[RESOLU] Supprimer plusieurs articles et ses commentaires liés

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] Supprimer plusieurs articles et ses commentaires liés

Re: Supprimer plusieurs articles et ses commentaires liés

par negima » 17 août 2020, 12:32

D'accord.

Et pour la méthode classique. Pourquoi on m'a toujours déconseillé de faire ceci :

Code : Tout sélectionner

$id = intval($id); $requete = $db->query("DELETE FROM users WHERE id = '$id'");
On m'a dit que c'est mieux de faire :

Code : Tout sélectionner

$requete = $db->prepare('DELETE FROM users WHERE id = :id'); $requete->bindValue(':id', $id, PDO::PARAM_INT);

Re: Supprimer plusieurs articles et ses commentaires liés

par or 1 » 16 août 2020, 16:51

echo intval("toto");
affiche 0 donc je ne vois pas de faille.

Re: Supprimer plusieurs articles et ses commentaires liés

par negima » 16 août 2020, 16:32

Oui, je sais. La méthode avec IN c'est mieux avec moins de requete.
Mais est-ce que c'est sécurisé ? Car on n'a pas vérifié que ce sont des entiers.

Re: Supprimer plusieurs articles et ses commentaires liés

par or 1 » 16 août 2020, 14:29

si vous avez 100 articles à supprimer, 2 requêtes avec le in, 200 sans le in.

Re: Supprimer plusieurs articles et ses commentaires liés

par negima » 16 août 2020, 10:16

Ne dois-je pas utiliser la méthode prepare ? Je ne sais pas du tout comment utiliser la méthode prepare avec IN.

Avec la méthode classique, on me disait qu'il fallait toujours la méthode prepare :

Code : Tout sélectionner

foreach ($_POST['article'] as $id) { /* --- Suppresion des commentaires liés : --- */ $requete = $db->prepare('DELETE FROM comments WHERE articles_id = :id'); // Effacer commentaires dans la BDD avec méthode prepare. $requete->bindValue(':id', $id, PDO::PARAM_INT); $requete->execute(); /* --- Suppresion des articles cochés : --- */ $query = $db->prepare('DELETE FROM articles WHERE id = :id'); $query->bindValue(':id', $id, PDO::PARAM_INT); $query->execute(); }

Re: Supprimer plusieurs articles et ses commentaires liés

par or 1 » 15 août 2020, 22:54

s'il faut supprimer les commentaires sans se poser de questions, alors le code est bon.
https://www.php.net/manual/fr/pdo.query.php exécute bien une requête.

Supprimer plusieurs articles et ses commentaires liés

par negima » 15 août 2020, 22:27

Bonjour,
J'ai fait des cases à cocher pour supprimer plusieurs articles en même temps. J'obtiens un tableau dans $_POST['article'].
J'efface les articles cochés et ses commentaires liés. Voici la partie suppression de mon script :

Code : Tout sélectionner

$chaine = implode(", ", array_map('intval', $_POST['article'])); // var_dump ($chaine); // Exemple: '15, 14, 8' /* --- Suppresion commentaires liés : --- */ $db->query("DELETE FROM comments WHERE articles_id IN ($chaine)"); // Exemple: DELETE FROM comments WHERE articles_id IN ('15, 14, 8') /* --- Suppresion articles : --- */ $query = $db->query("DELETE FROM articles WHERE id IN ($chaine)");
Cela marche bien.
Mais j'ai quelques questions : Ne dois-je pas vérifier que les commentaires existent avant d'effacer ?
C'est normal que je n'ai pas besoin de faire $query->execute() pour effacer avec la méthode IN ?