- Home
- Categorie
- Coding e Sistemistica
- Coding
- Cancellazione Multipla Con Checkbox
-
Ciao,
i checkbox possono funzionare come un array impostando come name qualcosa[] e imposti come value l'id.
Lato php un array con gli id ad esempio e puoi utilizzarlo come meglio credi.
-
Ciao ho provato a fare così, però l'array non saprei come implementarlo:
<form enctype="multipart/form-data" name="formcancella" action="<?=$PHP_SELF?>" method="post">
<?php
$id = $row2[id_anagrafica];
?><table width="230" height="30" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="140" align="left"><input type="checkbox" name="delete[]" value="<?php echo($id); ?>"> <span class="testo_rosso_bold3">Elimina <?=$id?></span></td>
<td width="90"><input type="hidden" name="cancella" value="1">
<input name="submit" type="submit" class="pulsante" value="cancella">
</td> </tr> </table></form>
<?
if ($cancella==1){$comma_separated = implode(",", $_POST['delete']);
$sql = "DELETE FROM a_anagrafica WHERE a_anagrafica.id_anagrafica IN (".$comma_separated.")";
mysql_query($sql,$conn) or die (mysql_error());
}
?>
-
Mi sembra perfetto cosi, qual'è il problema che riscontri?
-
scusa hai ragione va bene così, ti chiederei l'ultima costesia.
L'anagrafica si trova in 3 tabelle: a_anagrafica, a_login, a_ana_preferenzecome faccio a cancellare in una volta sola i 3 record che si trovano rispettivamente nelle 3 tabelle?
questa è la query relazionale:
SELECT a_anagrafica., a_login., a_ana_preferenze.*
FROM a_anagrafica INNER JOIN a_login ON a_anagrafica.id_anagrafica = a_login.id_anagrafica LEFT JOIN a_ana_preferenze ON a_login.id_login = a_ana_preferenze.id_login
-
così potrebbe andare?
<?
if ($cancella==1){$comma_separated = implode(",", $_POST['delete']);
$sql1 = "DELETE FROM a_anagrafica WHERE a_anagrafica.id_anagrafica IN (".$comma_separated.")";
$sql2 = "DELETE FROM a_login WHERE a_login.id_anagrafica IN (".$comma_separated.")";
$sql3 = "DELETE FROM a_ana_preferenze WHERE a_ana_preferenze.id_login IN (".$comma_separated.")";
mysql_query($sql,$conn) or die (mysql_error());
}
?>
-
anche se quest'ultima query che ho postato non mi convince molto perchè i record non sono relazionati tra loro in questo modo ma sono indipendenti
-
Si volendo si può fare cosi, fai attenzione che il mysql_query lo hai richiamato una sola volta.
I delete puoi farli anche con dei join:
http://dev.mysql.com/doc/refman/5.0/en/delete.html
-
ok ho visto e poi fatto una prova, può andare bene?
DELETE a_anagrafica,a_login,a_ana_preferenze
FROM a_anagrafica
INNER JOIN a_login
ON a_anagrafica.id_anagrafica = a_login.id_anagraficaINNER JOIN a_ana_preferenze
ON a_login.id_login = a_ana_preferenze.id_loginWHERE a_anagrafica.id_anagrafica = '".$id."'
-
Si dovrebbe essere corretta, però hai messo un singolo id invece di usare IN (id1,id2)
-
ho fatto un test ma non mi ha cancellato niente

-
Fai prima una query SELECT cosi vedi cosa prende e se c'è qualche errore sui JOIN, io non posso sapere com'è strutturato il tuo database quindi non sò dirti cosa non va. Dopo la modifichi in DELETE facilmente.
-
questo è uno dei risultati delle query:
SELECT a_anagrafica., a_login., a_ana_preferenze.* FROM a_anagrafica INNER JOIN a_login ON a_anagrafica.id_anagrafica = a_login.id_anagrafica INNER JOIN a_ana_preferenze ON a_login.id_login = a_ana_preferenze.id_login WHERE a_anagrafica.id_anagrafica = '1902'
-
quindi praticamente mi stampa solo l'id di a_anagrafica.id_anagrafica è giusto che sia così?
-
questo è il codice x stampare a video la query:
<?php
$sql = "SELECT a_anagrafica., a_login., a_ana_preferenze.*FROM a_anagrafica
INNER JOIN a_login
ON a_anagrafica.id_anagrafica = a_login.id_anagraficaINNER JOIN a_ana_preferenze
ON a_login.id_login = a_ana_preferenze.id_loginWHERE a_anagrafica.id_anagrafica = '".$id."'";
mysql_query($sql,$conn) or die (mysql_error());
echo $sql;
?>
-
Tu devi eseguirla direttamente sul database (Tramite phpMyAdmin ad esempio) e vedere se restituisce qualcosa oppure no, perchè se non restituisce nulla significa che qualche join fatto cosi non va bene.
-
fatto, ma anche tramite phpMyAdmin non succede nulla
-
Significa che i JOIN non sono fatti correttamente, controlla bene che ti serva un INNER JOIN invece di un LEFT JOIN. E anche che i campi in cui unisci sono corretti.
-
ok ora funziona grazie dell'aiuto

-
scusa mi sono accorto solo ora che me ne cancella solo uno per volta anche se ne seleziono più contemporaneamente. Forse può dipendere dal pulsante cancella e dal form che li devo mettere fuori il ciclo della ricerca?
-
Puoi postare il codice completo?