[RESOLU] Effacer messages avec cases à cocher

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Effacer messages avec cases à cocher

Re: [RESOLU] Effacer messages avec cases à cocher

par Saian » 06 déc. 2018, 11:06

Bravo =D>

Re: Effacer messages avec cases à cocher

par fatalfury » 06 déc. 2018, 00:22

C'est bon, j'ai réussi :

Code : Tout sélectionner

$chaine = implode(",", $_POST['idmessage']); // implode() rassemble les éléments d'un tableau en une chaîne $query = $db->prepare("DELETE FROM messages WHERE id IN ($chaine)"); // Doubles guillemets obligatoire pour une variable $query->bindValue(':chaine', $chaine, PDO::PARAM_STR); if ($query->execute()) {echo 'Message(s) '.$chaine.' effacé(s) !';}
Merci !

Re: Effacer messages avec cases à cocher

par Saian » 05 déc. 2018, 19:59

Le var_dump devrait afficher un Array de toutes les valeurs cochées. Le implode sert justement à joindre ces valeurs avec des virgules ainsi dans la requête tu peux obtenir un IN (id1, id2, id3, etc).

A noter que si tu veux mettre une variable dans une chaîne de caractères (WHERE id IN $chaine) tu dois entourer la chaîne par des " et non des '. Sinon la variable n'est pas interprétée. De plus tu dois ajouter les parenthèses autour de la variable sinon tu vas obtenir un IN id1, id2, id3, etc. Erreur garantie.

Re: Effacer messages avec cases à cocher

par fatalfury » 04 déc. 2018, 22:40

Merci, mais ça ne marche pas. En faisant le var_dump sur $_POST['idmessage'], je constate qu'il n'y a pas de virgule, donc impossible de faire implode().

Code : Tout sélectionner

<?php /** ==================== Effacement (2e méthode)==================== */ // En cas d'envoi de formulaire : if ( ($_SERVER["REQUEST_METHOD"] == "POST") and (isset($_POST['idmessage'])) ) { var_dump ($_POST['idmessage']); // $_POST['idmessage'] est un tableau contenant tous les id des checkbox sélectionnées $chaine = implode(",", $_POST['idmessage']); // implode() rassemble les éléments d'un tableau en une chaîne $db->query('DELETE FROM messages WHERE id IN $chaine'); if ($query->execute()) { echo 'Message(s) effacé(s) !<br>'; } } /** ==================== Affichage de liste de messages ==================== */ else { $requete2 = $db->query('SELECT * FROM messages ORDER BY id DESC'); $result2 = $requete2->fetchAll(); echo '<form method="post">'; // Une boucle pour afficher la liste de messages et une case à cocher à côté foreach ($result2 as $res) { echo '<div class="flex"> <div class="flex-child">ID: '.$res['id'].'<input name="idmessage[]" value="'.$res['id'].'" type="checkbox"></div> <div class="flex-child">Pseudo: '.$res['username'].'</div> <div class="flex-child">Message: '.$res['content'].'</div> <div class="flex-child">Date: '.$res['created_at'].'</div> <hr> </div>'; } echo '<div class="center"> <button type="submit">Effacer</button> </div> </form>'; } ?>

Re: Effacer messages avec cases à cocher

par Saian » 03 déc. 2018, 22:52

Salut, tu devrais plutôt avoir sur les input checkbox un attribut name="idmessages[]" (les crochets pour en faire un tableau) et l'id devrait aller dans l'attribut value.
Ainsi $_POST['idmessages'] serait un tableau contenant tous les id des checkbox sélectionnées.
Ensuite tu pourrais conditionner la suppression en reprenant ton if par un if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['idmessages'])) et au lieu de faire un select de tous les messages puis une boucle de suppression, tu pourrais faire directement un 'DELETE FROM messages WHERE id IN ('.implode(', ', $_POST['idmessages']).')'.

Effacer messages avec cases à cocher

par fatalfury » 03 déc. 2018, 22:21

Bonjour,

J'aimerais effacer des messages dans ma base de données. J'ai fait une boucle pour afficher la liste avec une case à cocher à côté de chaque message.

J'arrive à afficher la liste, mais je n'arrive pas à effacer. Voici mon script php :

Code : Tout sélectionner

<?php /** ==================== Effacement ==================== */ // En cas d'envoi de formulaire : if ($_SERVER["REQUEST_METHOD"] == "POST") { $requete = $db->query('SELECT * FROM messages ORDER BY id DESC'); $result = $requete->fetchAll(); // Une boucle pour parcourir la liste de messages. On efface un message si une case est cochée foreach ($result as $res) { if (isset($_POST['name'])) { $id = $res['id']; $query = $db->prepare('DELETE FROM messages WHERE id='.$id); $query->bindValue(':id', $id, PDO::PARAM_INT); $query->execute(); } } } /** ==================== Affichage de liste de messages ==================== */ else { $requete2 = $db->query('SELECT * FROM messages ORDER BY id DESC'); $result2 = $requete2->fetchAll(); echo '<form method="post">'; // Une boucle pour afficher la liste de messages et une case à cocher à côté foreach ($result2 as $res) { echo '<div class="flex"> <div class="flex-child">ID: '.$res['id'].'<input name="'.$res['id'].'" type="checkbox"></div> <div class="flex-child">Pseudo: '.$res['username'].'</div> <div class="flex-child">Message: '.$res['content'].'</div> <div class="flex-child">Date: '.$res['created_at'].'</div> <hr> </div>'; } echo '<div class="center"> <button type="submit">Effacer</button> </div> </form>'; } ?>