associare un bottone per ogni riga di una tabella

pape86

Nuovo Utente
15 Gen 2010
19
0
0
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! :)
 

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
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
}
 

pape86

Nuovo Utente
15 Gen 2010
19
0
0
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?
 

pape86

Nuovo Utente
15 Gen 2010
19
0
0
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.046
150
63
PR
www.borgo-italia.it
ciao,
...in pratica per ogni riga della tabella creo un form con all'interno due tag input, ...
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)
 

pape86

Nuovo Utente
15 Gen 2010
19
0
0
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)

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.046
150
63
PR
www.borgo-italia.it
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
26
Roma
alessandro1997.netsons.org
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.046
150
63
PR
www.borgo-italia.it
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.
 

pape86

Nuovo Utente
15 Gen 2010
19
0
0
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.

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.
 

pape86

Nuovo Utente
15 Gen 2010
19
0
0
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

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..
postzx.jpg


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.046
150
63
PR
www.borgo-italia.it
ciao
no mi riferivo proprio a name del tag form.

...se è una procedura corretta utilizzare tanti form ...
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.046
150
63
PR
www.borgo-italia.it
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...
 

pape86

Nuovo Utente
15 Gen 2010
19
0
0
nel post precedente ti ho suggerito un metodo per usare un <form...></form> unico.
sì, lo visto solo dopo quel post, scusa...infatti, se leggi il mio post precedente l'ho commentato! :)

è 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

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).
 

pape86

Nuovo Utente
15 Gen 2010
19
0
0
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...

ahahah...che incroci! :D
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" ...>
 

pape86

Nuovo Utente
15 Gen 2010
19
0
0
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.046
150
63
PR
www.borgo-italia.it
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.046
150
63
PR
www.borgo-italia.it
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>"
 

pape86

Nuovo Utente
15 Gen 2010
19
0
0
...
però dovresti fare due pagine...

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!!! :cool:

bene, si può passare ad altro...grazie mille per tutto l'aiuto, le dritte, il supporto che mi hai dato!!! :beer:
 
Discussioni simili
Autore Titolo Forum Risposte Data
C Associare biglietti numerici ad un account numerico PHP 0
G Associare un button ad una strnga PHP 9
Domenico_Falco1 Associare una stessa funzione get a due eventi a.click con classi differenti Ajax 6
M [MySQL] Come associare stats ad ogni utente. MySQL 0
Lizzy [WordPress] Associare una pagina php ad un css WordPress 2
Punix [PHP] associare immagine ad un array PHP 4
V Associare un immagine verificando il campo input Javascript 2
P Come associare una camera all'hotel PHP 12
Emix Sottodominio da associare ad un dominio Apache 2
Monital Associare dominio .com e dominio.it Domini 2
A Associare una foto al risultato di una query PHP 13
A leggere campo db phpmyadmin ed associare il valore a campo nascosto Joomla 0
S associare l'id del listato annunci alle pagine che si creano in automatico .... PHP 1
Monital Associare caselle di testo ad array PHP 21
H Associare dominio a server dedicato Domini 0
S Predefinito Come associare file pdf a un utente specifico PHP 5
M Associare un controllo AJAX Accondition ad una SQLDataSource Ajax 0
G Associare valori in tabella a variabili Flash 0
WpStyle Associare collegamenti PHP 11
A associare un evento a tanti fotogrammi Flash 1
G Associare un tasto ad incolla trasponi di Excel Windows e Software 0
A Associare una scollbar ad una picturebox Programmazione 0
M Come associare un evento ad un pulsante? Programmazione 1
M Come associare un evento ad un pulsante? HTML e CSS 0
M Come associare un evento ad un pulsante? Javascript 4
L Riempimento di una tabella al click di un bottone Javascript 1
C bottone query MySQL 0
K Come posso usare un'immagine al posto di un bottone? HTML e CSS 2
K Bottone torna indietro Javascript 6
Cosina Creare bottone delete in form upload PHP 5
Cosina Creare bottone delete in form upload PHP 1
G Modifica immagine di sfondo attraverso un bottone PHP 18
S Disattivare bottone Javascript 0
S non funzionano alcuni effetti (bottone futuristico creato con css) HTML e CSS 1
G Aiuto HTML, collegamento con un bottone a una <div> di un' altra pagna HTML e CSS 5
U PHP bottone per invio mail o ritorno al form PHP 15
P [Woocommerce] Modificare il Bottone Checkout di Woocommerce in base alla categoria di prodotto E-Commerce 10
M [PHP] Consiglio su come istanziare un Bottone PHP 0
G [PHP] Creare mail con allegato nascosto e bottone di richiamo PHP 0
K [HTML] Bottone che salva id Programmazione 1
L [HTML] Pagina che rimanda ad un bottone HTML e CSS 1
M [XAMARIN] Accettare una chiamata telefonica al click su bottone Sviluppo app per Android 3
I [Javascript] mantenere un bottone abilitato al refresh della pagina Javascript 1
M [Javascript] [HTML] come aumentare il valore di una progress bar quando si preme un bottone Javascript 1
bubino8 [WordPress] [PHP] Login diretto da bottone WordPress 4
bubino8 [WordPress] Login a WP da bottone WordPress 0
S [Javascript] Catturare l'evento click di un bottone Javascript 3
S [Javascript] Aggiornare solo un DIV una sola volta con un click di un bottone Javascript 9
gandalf1959 dopo la richiesta ajax il bottone del form non si disabilita Ajax 5
S Aiuto! Bottone inserito da codice non funziona PHP 7

Discussioni simili