• Home
  • Forum
  • Fare Web
  • PHP

associare un bottone per ogni riga di una tabella

  • Creatore Discussione Creatore Discussione pape86
  • Data di inizio Data di inizio 4 Feb 2010
  • 1
  • 2
Succ.
1 di 2 Succ. Ultimo
P

pape86

Nuovo Utente
15 Gen 2010
19
0
0
  • 4 Feb 2010
  • #1
Ciao a tutti!
ho un problema, ho creato una tabella che mostra i post di un blog del sito che sto sviluppando andando a recuperare le informazioni dal database: in particolare, le varie colonne sono: autore - titolo - anteprima - data - cancella.
Per quest'ultima colonna, vorrei associare un bottone "elimina" ad ogni riga della tabella (quindi ad ogni post presente nel db) in modo da poter poi eliminare il post dal database.
Adesso, per creare la tabella con i relativi dati e pulsanti non ho problemi, vi posto il codice:

HTML:
<table align="center" width="800" class="tab">
<caption><div align="center" class="caption">News</div><br></caption>
<tr><th width="150">AUTORE</th><th width="150">TITOLO</th><th width="250">ANTEPRIMA</th><th width="100">DATA</th><th width="100">ELIMINA</th></tr>
<form action="prova_form.php" method="post">
PHP:
<?php
while($post_array = mysql_fetch_array($post_sql, MYSQL_ASSOC)) {
  echo "<tr><td align='center'>" .$post_array['autore_post'] ."</td>";	// colonna autore post
  echo "<td align='center'>" .$post_array['titolo_post'] ."</td>";	// colonna titolo post
  $anteprima = $news->preview($post_array['testo_post'], 20);
  echo "<td align='center'>" .$anteprima ."</td>";	// colonna testo post
  $data_post = $news->format_data($post_array['data_post']);
  echo "<td align='center'>" .$data_post ."</td>";	// colonna data post
  $post_id = $post_array['id_post'];
  echo "<td align=\"center\"><input name=\"".$post_id."\" type=\"image\" src=\"image\\cancella.gif\" onClick=\"return(confirm('Cancellare?'))\"></input></td></tr>";	// bottone per eliminare news
}
echo "</table></form><p></p>";
?>

Il problema è che non so gestire i bottoni. Ho pensato di chiamare ogni bottone con l'identificativo del post (name='id_post') in modo poi da verificare quale variabile GET o POST è stata passata e creare la query per l'eliminazione del corrispondente post.
Però quando vado a fare il controllo sulla pagina di destinazione del form (ad esempio prova_form.php):
PHP:
if(isset($_POST['???'])) {
  $id_post=$_POST['??'];
  // query per eliminare il post
}

come faccio a sapere qual è l'id_post che è stato passato cliccando sul relativo pulsante?

Spero di essermi spiegato bene...non riesco a venirne fuori e sono giorni che ci penso e provo varie soluzioni.
Se qualcuno può aiutarmi, anche proponendo vie alternative gliene sarei grato!
 
L

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
  • 5 Feb 2010
  • #2
Ciao pape86,
nella <input> devi specificare l'associazione chiave-valore, dove chiave
sara poi la chiave della array $_POST['chiave'] = valore. Quindi
utlizza l'attributo name per specificare la chiave ed in piu aggiungi l'attributo value --> $post_id. Magari come chiave scegli 'id':
PHP:
echo "<td align=\"center\">
<input name=\""id"\" value=\"".$post_id."\" type=\"image\" src=\"image\\cancella.gif\" onClick=\"return(confirm('Cancellare?'))\"></input>
In questo modo potrai automaticamente accedere post_id che devi cancellare:
PHP:
if(isset($_POST['id'])) {
  $id_post=$_POST['id'];
  // query per eliminare il post
}
 
P

pape86

Nuovo Utente
15 Gen 2010
19
0
0
  • 5 Feb 2010
  • #3
ciao! grazi per la risposta intanto!
allora, anch'io avevo pensato a questo..è proprio quello che mi serve, una coppia chiave/valore (di cui mi serve sapere il nome della chiave e mi posso ricavare il valore).
Però ho letto su una guida di html che per il tag <input> non c'è l'attributo "value" e quindi non sapevo come fare. Comunque ho provato ugualmente così, magari è sbagliata la guida, ma non va ancora.
Questo il codice e di seguito il risultato del browser:
PHP:
echo "<td align=\"center\"><form action='prova_form.php' method='post'><input name=\"id\" value=\"".$id_post."\" type=\"image\" alt=\"cancella\" src=\"image\\cancella.gif\" align=\"center\"></input></form></td>";	// bottone per eliminare news

su prova_form.php:
PHP:
<?php
	print_r($_POST);
	echo "<br>" . $_POST;
	echo "<br>" . $_POST['id'];
?>

e mi visualizza:
"Array ( )
Array
Notice: Undefined index: id in [...]"

Quindi, a questo punto, penso che ci sia un problema con il bottone, o meglio con la funzione JavaScript legata all'evento onclick..è possibile?
Io vorrei che prima di cancellare la news venisse richesta la conferma, appunto con la funzione "confirm" (o con una personalizzata).

PS: altro dubbio, il tag <form action='prova_form.php' method='post'> è meglio che lo metto prima del tag <table> (quindi solo una volta che vale per tutta la tabella) o posso lasciarlo così, cioè un form per ogni bottone?
 
P

pape86

Nuovo Utente
15 Gen 2010
19
0
0
  • 5 Feb 2010
  • #4
risolto!!! non so se correttamente e se c'era una via più semplice, ma funziona!
posto il codice:
PHP:
echo "<td align=\"center\"><form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\"><input name=\"id_canc\" type=\"image\" alt=\"cancella\" src=\"image\\cancella.gif\" align=\"center\" onClick=\"return(confirm('Cancellare?'))\"></input><input name=\"cancella\" type=\"hidden\" value=\"".$id_post."\"></input></form></td>";

in pratica per ogni riga della tabella creo un form con all'interno due tag input, il primo per creare il bottone di tipo immagine da cliccare, il secondo di tipo nascosto per passare la coppia chiave/valore tramite metodo POST.

Dopodichè, eseguo il controllo per verificare quale id_post è stato passato e cancellare la relativa news dal db, così:
PHP:
if(isset($_POST['cancella']) && is_numeric($_POST['cancella'])) {
  $id_post=$_POST['cancella'];
  // query per eliminare news con id_post
}
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 5 Feb 2010
  • #5
ciao,
...in pratica per ogni riga della tabella creo un form con all'interno due tag input, ...
Clicca per allargare...
guarda a che ne so io se nella stessa pagina hai più di un form ogni form deve avere un name diverso (ma posso sbagliarmi)
 
P

pape86

Nuovo Utente
15 Gen 2010
19
0
0
  • 5 Feb 2010
  • #6
borgo italia ha scritto:
ciao,

guarda a che ne so io se nella stessa pagina hai più di un form ogni form deve avere un name diverso (ma posso sbagliarmi)
Clicca per allargare...

sì, ma dal momento che i miei form corrispondono a dei bottoni, che una volta cliccatoci attiva quell'unico form a cui corrisponde, non mi serve che abbia un nome univoco, l'importante è il valore che passa.
Poi posso anche sbagliarmi, e so benissimo che non sarà una soluzione concettualmente corretta, però è l'unica che ho trovato finora..quindi nell'attesa di essere smentito da qualcuno o di trovare un'idea migliore, mi accontento!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 5 Feb 2010
  • #7
ciao
perchè non provi a fare una cosa del genere,
utilizzando un radiobutton per selezionare il post che vuoi eliminare e poi dai l'invio, così ti trovi un unico form

PHP:
<?php
//dati connessione ecc..
if(isset(S_POST['Submit']) && isset($_POST['da_canc']){
	$id_da_cancellare=$_POST['da_canc'];//leggo l'id del post da cancellare
	//query per eliminare
}//fine if
//ecc...........
?>
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table width="100%"  border="0" cellspacing="2" cellpadding="0">
<?php
while($post_array = mysql_fetch_array($post_sql, MYSQL_ASSOC)) {
  echo "<tr>";
    echo "<td>".$post_array['titolo_post']."</td>";
    echo "<td><input name=\"da_canc\" type=\"radio\" value=\"".$post_array['id_post']."\"></td>";
  echo "</tr>";
}//fine while
?>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="Submit" value="cancella"></td>
  </tr>
</table>
</form>

p.s.
non ho messo il controllo js ed ho semplificato la parte visibile in quanto solo un esempio
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
27
Roma
alessandro1997.netsons.org
  • 5 Feb 2010
  • #8
Mi sembra strano che i form devono avere nomi univoci, perché l'attributo name nel tag form è stato deprecato con XHTML 1.0 Transitional. Di solito una cosa non viene deprecata se sanno che è di fondamentale importanza per il funzionamento di alcune applicazioni.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 5 Feb 2010
  • #9
Ciao
Non so se è stato deprecato, da quello che capisco se non si usa name conviene usare id, vedi link qui sotto (per facilitarti ho copiato quanto indicato)

http://www.diodati.org/w3c/html401/interact/forms.html#h-17.3

name = cdata [CI]
Questo attributo dà un nome all'elemento, in modo che vi si possa far riferimento da fogli di stile o da script. Nota. Questo attributo è stato incluso per ragioni di compatibilità all'indietro. Le applicazioni dovrebbero usare l'attributo id per identificare degli elementi.
Clicca per allargare...
 
P

pape86

Nuovo Utente
15 Gen 2010
19
0
0
  • 5 Feb 2010
  • #10
alessandro1997 ha scritto:
Mi sembra strano che i form devono avere nomi univoci, perché l'attributo name nel tag form è stato deprecato con XHTML 1.0 Transitional. Di solito una cosa non viene deprecata se sanno che è di fondamentale importanza per il funzionamento di alcune applicazioni.
Clicca per allargare...

Infatti non ho assegnato nessun attributo "name" al tag <form>...forse borgo italia si riferiva al "name" che va assegnato al tag <input> relativo al form...
Comunque, l'unico problema che vorrei capire è se è una procedura corretta utilizzare tanti form quanti sono il numero delle righe della tabella, oppure se c'è un modo per usarne uno unico. In ogni caso, il tag <input> va associato ad ogni riga della tabella.
 
P

pape86

Nuovo Utente
15 Gen 2010
19
0
0
  • 5 Feb 2010
  • #11
borgo italia ha scritto:
ciao
perchè non provi a fare una cosa del genere,
utilizzando un radiobutton per selezionare il post che vuoi eliminare e poi dai l'invio, così ti trovi un unico form

PHP:
<?php
//dati connessione ecc..
if(isset(S_POST['Submit']) && isset($_POST['da_canc']){
	$id_da_cancellare=$_POST['da_canc'];//leggo l'id del post da cancellare
	//query per eliminare
}//fine if
//ecc...........
?>
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table width="100%"  border="0" cellspacing="2" cellpadding="0">
<?php
while($post_array = mysql_fetch_array($post_sql, MYSQL_ASSOC)) {
  echo "<tr>";
    echo "<td>".$post_array['titolo_post']."</td>";
    echo "<td><input name=\"da_canc\" type=\"radio\" value=\"".$post_array['id_post']."\"></td>";
  echo "</tr>";
}//fine while
?>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="Submit" value="cancella"></td>
  </tr>
</table>
</form>

p.s.
non ho messo il controllo js ed ho semplificato la parte visibile in quanto solo un esempio
Clicca per allargare...

Ah, ho capito la tua idea e ho provato a vedere come viene..in effetti così sarebbe più semplice dal punto di vista del codice, però mi piaceva di più "esteticamente" come vorrei fare io...ti posto un'immagine..


comunque la terrò in considerazione nel caso in cui dovessi rinunciare alla mia prima idea! grazie! :fonzie:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 5 Feb 2010
  • #12
ciao
no mi riferivo proprio a name del tag form.

...se è una procedura corretta utilizzare tanti form ...
Clicca per allargare...
nel post precedente ti ho suggerito un metodo per usare un <form...></form> unico.
è un sistema che uso io (forse non il più migliore), ma nei casi in cui sono solo io ad operare mi sembra abbastanza semplice,se invece può essee un utente deve essere migliorato con altri controlli (non basta js), l'operazione di cancellazione è sempre un'operazione che abbisogna (secondo me) di conferma.


p.s.
poi metterci anche il pulsante di reset se (capita) hai sbaliato a selezionare quello che vuoi cancellare
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 5 Feb 2010
  • #13
ciao
non avevo visto la tua risposta (ci siamo incrociati).
verifica se anche i radiobutton accettano un immagine, cioè se il button può essere type="radio" e quindi con l'src...
 
P

pape86

Nuovo Utente
15 Gen 2010
19
0
0
  • 5 Feb 2010
  • #14
borgo italia ha scritto:
nel post precedente ti ho suggerito un metodo per usare un <form...></form> unico.
Clicca per allargare...
sì, lo visto solo dopo quel post, scusa...infatti, se leggi il mio post precedente l'ho commentato!

borgo italia ha scritto:
è un sistema che uso io (forse non il più migliore), ma nei casi in cui sono solo io ad operare mi sembra abbastanza semplice,se invece può essee un utente deve essere migliorato con altri controlli (non basta js), l'operazione di cancellazione è sempre un'operazione che abbisogna (secondo me) di conferma.

p.s.
poi metterci anche il pulsante di reset se (capita) hai sbaliato a selezionare quello che vuoi cancellare
Clicca per allargare...

per come è concepito, dovrebbe usarlo solo l'amministratore del sito, trattandosi di un'area per gestire (e quindi anche cancellare) le news. Il controllo JS lo metto in ogni caso..è questo: onclick="return(confirm('Cancellare?'))" che apre un pop-up in cui si può deve premere ok oppure annulla, quindi il reset non mi serve in questo caso (c'è l'annulla).
 
P

pape86

Nuovo Utente
15 Gen 2010
19
0
0
  • 5 Feb 2010
  • #15
borgo italia ha scritto:
ciao
non avevo visto la tua risposta (ci siamo incrociati).
verifica se anche i radiobutton accettano un immagine, cioè se il button può essere type="radio" e quindi con l'src...
Clicca per allargare...

ahahah...che incroci!
mi sa che non si può associare un'immagine a un tag <input> di tipo "radio"..l'immagine puoi metterla solo con <input type="image" ...>
 
P

pape86

Nuovo Utente
15 Gen 2010
19
0
0
  • 5 Feb 2010
  • #16
avrei trovato una soluzione alternativa, che mi evita di usare form o input vari...in pratica simulo un bottone, con un link di un'immagine (nell'attributo href del link passo, tramite metodo get, il valore dell'id_post che mi serve)...il codice lo spiega meglio che a parole:

PHP:
echo "<td align='center'><a href=\"".$_SERVER['PHP_SELF']."?id_canc=".$id_post."\" onClick='return(confirm('Cancellare la news?'))'><img src='image\\cancella.gif'></a></td>";

e il controllo diventa:
PHP:
if(isset($_GET['id_canc']) && is_numeric($_GET['id_canc'])) {
  $id_post=$_GET['id_canc'];
  // query per cancellare la news
}

Dal punto di vista html/php funziona, il problema è sulla funzione JavaScript: dal momento che vorrei che una volta cliccato sull'immagine, mi compaia una finestrella pop-up con la richiesta "cancellare?" -> 'ok' o 'annulla' ho inserito nel tag <a> la funzione onClick='return(confirm('Cancellare la news?'))' ma se mi viene visualizzato un "errore nella visualizzazione della pagina" e la variabile viene passata correttamente, ma il pop-up non compare. Qualcuno mi sa dire perchè?
Potrebbe andare come soluzione, invece di usare tutti quei form input?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 5 Feb 2010
  • #17
ciao,
in questo modo non devi utilizzare alcun <form>....</form>,
però dovresti fare due pagine

PHP:
<table width="100%"  border="0" cellspacing="2" cellpadding="0"> 
<?php
//dati connessione ecc..
while($post_array = mysql_fetch_array($post_sql, MYSQL_ASSOC)) { 
  echo "<tr>"; 
    echo "<td>".$post_array['titolo_post']."</td>"; 
	echo "<td><a href=\"pag_elimina.php?id=".$post_array['id_post']."\"><img src=\"immagine_cestino.jpg\" border=\"0\"></a></td>" 
  echo "</tr>"; 
}//fine while 
?> 
</table> 

poi nella pag_elimina.php
<?php
$id_da_cancellare=$_GET['id'];
//connessione al db e query di elimazione
//e ritorno automatico alla pagina di selezione o altra
?>
evidentemente con tutti i controlli del caso
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 5 Feb 2010
  • #18
ciao, ho dimenticato

echo "<td><a href=\"pag_elimina.php?id=".$post_array['id_post']."\" onclick=\"return(confirm('sei sicuro di cancellare'))\"><img src=\"immagine_cestino.jpg\" border=\"0\"></a></td>"
 
P

pape86

Nuovo Utente
15 Gen 2010
19
0
0
  • 5 Feb 2010
  • #19
borgo italia ha scritto:
...
però dovresti fare due pagine...
Clicca per allargare...

Beh, non necessariamente...posso fare anche tutto nella stessa pagina, così:
PHP:
echo "<td align='center'><a onClick=\"return(confirm('Cancellare la news?'))\" href=\"".$_SERVER['PHP_SELF']."?id_canc=".$id_post."\"><img src='image\\cancella.gif'></a></td>";

visto che la varibile $_SERVER['PHP_SELF'] mi restituisce l'indirizzo della pagina corrente (quello della tabella) a cui allego dopo il punto interrogativo l'id da cancellare (tutto adesso tramite metodo get).
Ho verificato e funziona tutto! il problema di JavaScript che dicevo prima l'ho risolto, era un banale errore di sintassi (avevo messo ' invece di \").
Bene, così mi sono liberato di tutti i form e input vari e ho snellito il tutto!!!

bene, si può passare ad altro...grazie mille per tutto l'aiuto, le dritte, il supporto che mi hai dato!!! :beer:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 5 Feb 2010
  • #20
bene, si può passare ad altro...
Clicca per allargare...
bene, alla prossima....
 
  • 1
  • 2
Succ.
1 di 2 Succ. Ultimo
Devi accedere o registrarti per poter rispondere.

Discussioni simili

C
Associare biglietti numerici ad un account numerico
  • culturealpine
  • 13 Gen 2022
  • PHP
Risposte
0
Visite
794
PHP 13 Gen 2022
culturealpine
C
G
Associare un button ad una strnga
  • Gianluca66
  • 1 Ago 2020
  • PHP
Risposte
9
Visite
2K
PHP 2 Ago 2020
Tommy03
  • Bloccata
Associare una stessa funzione get a due eventi a.click con classi differenti
  • Domenico_Falco1
  • 9 Giu 2019
  • Ajax
Risposte
6
Visite
7K
Ajax 14 Giu 2019
Domenico_Falco1
M
[MySQL] Come associare stats ad ogni utente.
  • MimmoFusco
  • 3 Feb 2019
  • MySQL
Risposte
0
Visite
1K
MySQL 3 Feb 2019
MimmoFusco
M
[WordPress] Associare una pagina php ad un css
  • Lizzy
  • 2 Ott 2017
  • WordPress
Risposte
2
Visite
2K
WordPress 2 Ott 2017
glm1986ITALY
[PHP] associare immagine ad un array
  • Punix
  • 23 Lug 2017
  • PHP
Risposte
4
Visite
4K
PHP 26 Lug 2017
Punix
V
Associare un immagine verificando il campo input
  • Valerio Sparacio
  • 20 Feb 2014
  • Javascript
Risposte
2
Visite
2K
Javascript 20 Feb 2014
Valerio Sparacio
V
P
Come associare una camera all'hotel
  • pinoshine
  • 23 Mar 2013
  • PHP
Risposte
12
Visite
4K
PHP 27 Mar 2013
pinoshine
P
Sottodominio da associare ad un dominio
  • Emix
  • 28 Gen 2013
  • Apache
Risposte
2
Visite
2K
Apache 30 Gen 2013
Emix
Associare dominio .com e dominio.it
  • Monital
  • 12 Nov 2012
  • Domini
Risposte
2
Visite
2K
Domini 19 Nov 2012
WebHosting.it
A
Associare una foto al risultato di una query
  • aedesy
  • 20 Set 2012
  • PHP
Risposte
13
Visite
3K
PHP 20 Set 2012
aedesy
A
A
leggere campo db phpmyadmin ed associare il valore a campo nascosto
  • antonello66
  • 15 Feb 2012
  • Joomla
Risposte
0
Visite
2K
Joomla 15 Feb 2012
antonello66
A
S
associare l'id del listato annunci alle pagine che si creano in automatico ....
  • searedone
  • 29 Mar 2011
  • PHP
Risposte
1
Visite
2K
PHP 29 Mar 2011
searedone
S
Associare caselle di testo ad array
  • Monital
  • 25 Mar 2011
  • PHP
  • 2
Risposte
21
Visite
4K
PHP 1 Apr 2011
Monital
H
Associare dominio a server dedicato
  • huck
  • 10 Feb 2011
  • Domini
Risposte
0
Visite
2K
Domini 10 Feb 2011
huck
H
S
Predefinito Come associare file pdf a un utente specifico
  • syndrome
  • 25 Dic 2009
  • PHP
Risposte
5
Visite
2K
PHP 20 Lug 2011
marco85
M
M
Associare un controllo AJAX Accondition ad una SQLDataSource
  • marcopuccio
  • 14 Lug 2009
  • Ajax
Risposte
0
Visite
2K
Ajax 14 Lug 2009
marcopuccio
M
G
Associare valori in tabella a variabili
  • G_Modugno
  • 10 Lug 2009
  • Flash
Risposte
0
Visite
1K
Flash 10 Lug 2009
G_Modugno
G
Associare collegamenti
  • WpStyle
  • 13 Giu 2009
  • PHP
Risposte
11
Visite
2K
PHP 17 Giu 2009
borgo italia
A
associare un evento a tanti fotogrammi
  • andia
  • 12 Gen 2009
  • Flash
Risposte
1
Visite
1K
Flash 13 Gen 2009
carla146
Condividi:
Facebook X (Twitter) LinkedIn WhatsApp e-mail Condividi Link
  • Home
  • Forum
  • Fare Web
  • PHP
  • Italiano
  • Termini e condizioni d'uso del sito
  • Policy Privacy
  • Aiuto
  • Home
Community platform by XenForo® © 2010-2024 XenForo Ltd. | Traduzione a cura di XenForo Italia
Menu
Accedi

Registrati

  • Home
  • Forum
    • Nuovi Messaggi
    • Cerca...
  • Novità
    • Featured content
    • Nuovi Messaggi
    • Ultime Attività
X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?

X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?