Supprimer les enregistrements via les checkbox
le 05/02/2010 à 20:29
Sarti
Comment supprimer une série d’enregistrement d’une base de données après avoir coché les checkbox correspondant à ces enregistrements ?
Merci
En construisant la requête de suppression à partir de la variable ad hoc.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
le 08/02/2010 à 19:27
Sarti
Merci mais ce genre de réponse ne peut aider personne au monde !
Ta question est tellement vague en même temps.
Que répondre à part dire "ben en faisant une suppression sql avec les variables qui vont bien" :/
Précise ton soucis : tu n'arrives pas à récupérer les checkboxs cochées ? Tu ne sais pas quel type de requete SQL utiliser ? Tu as une erreur mysql ?
le 08/02/2010 à 23:37
Sarti
Ok, j’ai 2 problèmes
1er
J’ai un checkbox qui servira à sélectionner tous les autre de la boucle WHILE.
Quelles instructions donner et comment pour qu'il puisse le faire ?
2ème
J’ai ensuite autant de checkbox msg[] que d’enregistrements dans le WHILE suivant.
Comment faire pour supprimer tous les checkbox cochés, comment ma requête DELETE devait être constituée ?
<?php
echo '<table>';
while ($data = mysql_fetch_array($result))
{
echo '<td><input name="msg[]" type="checkbox" id="msg[]" value="' , $data['code'] , '"></td>';
echo '<td><a href="LireMessage.php?code_message=' , $data['code'] , '"></a></td>';}
echo '<td><a href="FicheMixte.php?expediteur=' , $data['expediteur'] , '">', $data['expediteur'], '</a></td>';
echo '<td><a href="LireMessage.php?code=' , $data['code'] , '">', $data['titre'], '</a></td>';
echo '<td><a href="LireMessage.php?code=' , $data['code'] , '">', $data['message'], '</a></td>';
}
echo '</table>';
?>
Le premier problème est un problème de javascript. Tu pourras trouver plein de scripts de ce genre sur
le net.
Certains sont plus ou moins élégants.
Quant à ton deuxième problème, si ton formulaire a une méthode post, je te suggère de faire un print_r($_POST['msg']); dans la page qui doit traiter les résultats.
Normalement, tu devrais y trouver le $data['code'] de toutes les checkbox cochées.
Ensuite, ben soit tu boucles sur ce tableau pour faire autant de delete que de checkbox cochées, ou bien tu
explode ton tableau pour construire une requête unique.
le 10/02/2010 à 05:01
Sarti
Merci, je vais aller voir ça.
le 10/02/2010 à 21:50
Sarti
J'ai réglé le 1er problème et au sujet du second, je suppose qu'il me faut une page que je devrais appeler par le lien.
Comment je formule le print_r($_POST['msg']); dans cette page ?
le 10/02/2010 à 23:34
Sarti
Quand je fais ceci :
<?php
if(!empty($_POST))
{
print_r($_POST);
foreach($_POST['msg'] as $msg)
{
mysql_query("DELETE FROM message WHERE ".$msg." IN(".implode(",",$_POST['msg']).")");
}
}
?>
il détruit tous les enregistrements même lorsque j'en sélectionne un seul.
salut,
1/ if (!empty($_POST)) : ceci est inutile cart $_POST existe toujours.
2/dans requete sql tu met en condition : est ce que $msqg est dans la liste fournie par le tableau $_POST['msg']. cette condition est TOUJOURS vrai puisse que $sqm est un élément du tableau $_POST.
Par contre tu ne met null un condition en fonction du champ de la table sql.
ta requete devrait être :
<?php
if(!empty($_POST['msg']))
{
mysql_query('DELETE FROM message WHERE code IN('.implode(',',$_POST['msg']).')');
}
?>
@+
Il en faut peu pour être heureux !!!!!