Supprimer les enregistrements via les checkbox

Répondre
Sarti
Sarti
Déconnecté
Comment supprimer une série d’enregistrement d’une base de données après avoir coché les checkbox correspondant à ces enregistrements ?

Merci
LupusMic
LupusMic
Déconnecté
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
En construisant la requête de suppression à partir de la variable ad hoc.
Sarti
Sarti
Déconnecté
Merci mais ce genre de réponse ne peut aider personne au monde !
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
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 ?
Sarti
Sarti
Déconnecté
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 ?

  1. <?php  
  2. echo '<table>'; 
  3.    while ($data = mysql_fetch_array($result)) 
  4.    { 
  5.       echo '<td><input name="msg[]" type="checkbox" id="msg[]" value="' , $data['code'] , '"></td>'; 
  6.       echo '<td><a href="LireMessage.php?code_message=' , $data['code'] , '"></a></td>';} 
  7.       echo '<td><a href="FicheMixte.php?expediteur=' , $data['expediteur'] , '">', $data['expediteur'], '</a></td>'; 
  8.       echo '<td><a href="LireMessage.php?code=' , $data['code'] , '">', $data['titre'], '</a></td>'; 
  9.       echo '<td><a href="LireMessage.php?code=' , $data['code'] , '">', $data['message'], '</a></td>'; 
  10.    }  
  11. echo '</table>';  
  12. ?> 
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
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.
Sarti
Sarti
Déconnecté
Merci, je vais aller voir ça.
Sarti
Sarti
Déconnecté
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 ?
Sarti
Sarti
Déconnecté
Quand je fais ceci :

  1. <?php
  2. if(!empty($_POST))  
  3. {  
  4. print_r($_POST);  
  5.  
  6. foreach($_POST['msg'] as $msg)  
  7. {  
  8. mysql_query("DELETE FROM message WHERE ".$msg." IN(".implode(",",$_POST['msg']).")");  
  9. }  
  10. }  
  11. ?> 


il détruit tous les enregistrements même lorsque j'en sélectionne un seul.
moogli
moogli
Déconnecté
Il en faut peu pour être heureux !!!!!
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 :

  1. <?php
  2. if(!empty($_POST['msg']))  
  3. {  
  4. mysql_query('DELETE FROM message WHERE code IN('.implode(',',$_POST['msg']).')');  
  5. }  
  6. ?> 


@+
Sarti
Sarti
Déconnecté
Merci Moogli, je vais l'essayer dès que posible
moogli
moogli
Déconnecté
Il en faut peu pour être heureux !!!!!
de rien
@+
Sarti
Sarti
Déconnecté
Tu avais parfaitement raison Moogli, c’est exactement ce qu’il fallait faire mais je me suis trompé sur la logique et le contexte.
Merci beaucoup à toi.

Par contre, je fais face à un nouveau problème car avant l’effacement, je dois demander la confirmation ce qui à mon avis est difficile en PHP étant donné qu’il ne gère pas les MessageBox à l’instar de Java Script.

Je me demande alors comment dépanner cette situation.
LupusMic
LupusMic
Déconnecté
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Tu as plusieurs méthodes pour créer des dialogues et pallier le caractère stateless d'une application Web.

La plus simple, c'est d'avoir un formulaire intermédiaire qui pose la question. Ce formulaire peut être dans une page, nouvelle fenêtre (pop up), ou une boîte HTML en position absolue invoquée par du Javascript, etc.

Il ne faut pas oublier de mettre en place un système pour sécuriser la suppression d'une ressource. La technique courante est celle des tockens.
Répondre
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Bretagne - php - Moto