Eliminare un record tramite Checkbox

Salve a tutti, sto cercando da giorni di risolvere un problema. In pratica ho creato un form dove un utente puo' mandare un messaggio che viene memorizzato nel mio database. I messaggi vengono da me letti grazie alla pagina in php che ho creato per mezzo di un ciclo while e per ogni messaggio ho la possibilità di eliminarlo dal database cliccando su un "LINK" che ho inserito per ogni messaggio e che passa il valore della "id" ($_GET['ID'] ) alla pagina che si occuperà di interrogare il database e cancellare il corrispondente record. Fin quì tutto ok. Io vorrei invece avere la possibilita di selezionare piu' messaggi tramite un campo ckeckbox assegnato ad ogni messaggio che ho nel database e cancellare solo quelli per l'appunto selezionati da tale campo. (in pratica creare lo stesso sistema di quando si entra in un account di posta e cancellare i vecchi messaggi che vogliamo dando il segno di flag solo a chi vogliamo nai nel campo checkbox) Come posso fare?

Cliccando sul link è chiaro che il valore passato da $_GET è uno solo, non riesco a capire come posso fare con un checkbox e sopattutto quando sono selezionati piu' campi checkbox.

Grazie a tutti coloro che mi aiuteranno.... :bye:

inviato 10 anni fa
MGbyte78
X 0 X

poresti mettere come nome di ciascuna checkbox qualcosa del tipo mess_id[101] dove 101 è l'ipotetico ID del messaggio associato. Inviando il form avrai a disposizione la variabile $_POST['mess_id'] che in realtà sarà un array con tutte le checkbox selezionate. Potresti fare un ciclo foreach su tutti gli elementi di $_POST['mess_id'] per avere gli ID dei messaggi da cancellare.

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

La pagina che legge i messaggi è questa:

?>

<table border="1" width="100%">

<form name="mioform" method="post" action="delete.php">

<?   

 while ($row=mysql_fetch_array($query))

{

$id = $row['id'];

?>

<tr><td width="5%"><input type='checkbox' name="<? echo $id ?>"  value="<? echo $id ?>" ></td>

<td><? echo $row['messaggio'] ?></td></tr>

<?

}

?>

<tr><td><input type="submit" value="cancella messaggi"></td></tr>

</form>

</table>

nella pagina delete.php poi non  saprei quale valore far passare alla query per poter cancellare i messaggi, suppongo la id con l'istruzione $_POST['$id'] atraverso un ciclo credo,  ma non mi funziona.

Purtroppo non sono riuscito a capire bene, è possibile vedere uno script di esempio dove io possa vedere e capire facilmente?

risposto 10 anni fa
MGbyte78
X 0 X

Allora, potresti fare in questo modo.

Costruisci le checkbox così:

<input type="checkbox" name="messaggi[]"  value="<? echo $id ?>" >

Inviato il POST, la pagina per cancellare i messaggi dovrebbe contenere questo ciclo:

foreach ($_POST['messaggi'] as $key => $m_id)

{

   mysql_query("DELETE FROM tab_messaggi WHERE id = $m_id");

}

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Grazie davvero!!! Funziona!! Finalmente ho risolto il problema, un ultima cortesia, vorrei anche imparare e non riuscire senza capire. Correggimi se sbaglio.

Allora per ogni checkbox abbiamo creato un array di nome messaggi[] dove dentro le parentesi verrà inserito il valore della $id. Poi nella pagina che deve cancellare i messaggi abbiamo un ciclo:

foreach ($_POST['messaggi'] as $key => $m_id)

{

   mysql_query("DELETE FROM tab_messaggi WHERE id = $m_id");

}

cosa fa esattamente questo ciclo?  e soprattutto non capisco l'istruzione  as $key => $m_id[/color]

GRAZIE ANCORA.

risposto 10 anni fa
MGbyte78
X 0 X

Per capire esattamente come abbiamo costruito le checkbox ed i relativi valori restituiti via POST puoi lanciare questa semplice instruzione (nella pagina che rivece il post):

print_r($_POST['messaggi']);

vedrai che utilizzando il nome messaggi[] per ciascuna checkbox si ottiene un utile risultato: tutte le caselle selezionate vengono inserite in $_POST['messaggi'] che guindi diventa un array. Ciascun elemento contenuto nell'array $_POST['messaggi'] è quindi una checkbox selezionata.

Il ciclo foreach estrae un elemento per volta dall'array $_POST['messaggi']. Gli elementi di un array in PHP sono in realtà delle coppie CHIAVE => VALORE. Con $key => $m_id ho specificato che le chiavi vanno salvate di volta in volta in $key mentre i valori (che nel nostro caso sono gli ID dei messaggi) in $m_id.

In realtà in questo caso, visto che non ci interessava la chiave potresti usare direttamente:

foreach ($_POST['messaggi'] as $m_id)

Qualche delucidazione in più sugli array in PHP la trovi qui:

http://www.phpnews.it/content/view/244/107/

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda