Page 1 sur 1

Supprimer plusieurs articles et ses commentaires liés

Posté : 15 août 2020, 22:27
par negima
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 ?

Re: Supprimer plusieurs articles et ses commentaires liés

Posté : 15 août 2020, 22:54
par or 1
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.

Re: Supprimer plusieurs articles et ses commentaires liés

Posté : 16 août 2020, 10:16
par negima
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

Posté : 16 août 2020, 14:29
par or 1
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

Posté : 16 août 2020, 16:32
par negima
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

Posté : 16 août 2020, 16:51
par or 1
echo intval("toto");
affiche 0 donc je ne vois pas de faille.

Re: Supprimer plusieurs articles et ses commentaires liés

Posté : 17 août 2020, 12:32
par negima
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);