Bonjour,

Je débute en php et je rencontre un problème avec une requête de suppression.
J'ai créé un petit blog avec la possibilité de supprimer un article si besoin.

Ma BDD est composée de deux tables : 'billets' et 'commentaires'.

La structure de ma tab billets :

  • id
  • titre
  • auteur
  • contenu
  • date_creation

La structure de ma tab commentaires :

  • id
  • id_billet
  • auteur
  • commentaire
  • date_commentaire

La requête que j'utilisais jusque là pour supprimer un billet fonctionnait impec :

<?php

header('Location:index.php');

    try
    {
      $bdd = new PDO('mysql:host=localhost;dbname=blogphp;charset=utf8','root','',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    catch(Exception $e)
    {
      die('Erreur : '.$e->getMessage());
    }

    $req=$bdd->prepare('DELETE FROM billets WHERE id=?');
    $req->execute([$_GET['id']]);
   ?>

Le seul soucis, c'est que les commentaires associés à l'article sont conservés ds ma tab commentaires.
J'aimerais supprimer les commentaires associés lors de la suppression de mon article.

J'ai recherché sur le net, mais rien de bien concluant, du moins, soit, ce n'était pas clair ou pas adapté à mon cas précis.

Merci pour le coup de pouce! :)

Caro

8 réponses


Carouge10
Réponse acceptée

Pas de soucis.
Par contre, attention a ce que tu viens d'écrire car là, tu n'exécutes pas la requête de suppression du billet.
Plus qu'à mettre le sujet en résolu.

Bonjour,
Il suffira de supprimer les commentaires correspondants à ce id_billet

Bonjour Carouge10,

merci pour ta réactivité!
oui, je comprend la logique mais je ne visualise pas du tout la requête nécessaire à l'op. :(
Est ce que je dois procéder à une jointure dans ma req DELETE par exemple?

Merci et navrée mais comme je le précisais plus haut, je ne suis qu'une débutante en php!

Non pas forcément, tu peux faire une requête directement sur la table commentaires comme tu le fais sur la table billet

DELETE FROM commentaires WHERE id_billet = ?

Je comprend ton raisonnement, mais l'idée était qu'en supprimant mon article, tous les comm associés soit supprimé en même temps :)
Si j'utilise ta requête, je supprime bien les comm mais plus le billet.

Je ne te parle pas de remplacer ta requête mais de faire une seconde requête.

<?php
// Suppression des commentaires associés au billet
$req_comm=$bdd->prepare('DELETE FROM commentaires WHERE id_billet = ?');
$req_comm->execute([$_GET['id']]);

 // Suppression du billet
$req=$bdd->prepare('DELETE FROM billets WHERE id = ?');
$req->execute([$_GET['id']]);*

Arf, j'y étais presque...! J'ai fait ma blonde, désolée! ^^

Je l'avais mal rédigé!

$req_comm=$bdd->prepare('DELETE FROM commentaires WHERE id_billet = ?');
$req=$bdd->prepare('DELETE FROM billets WHERE id = ?');
$req_comm->execute([$_GET['id']]);

En effet, ça fonctionne parfaitement!
J'ai cherché beaucoup trop loin avec mes histoires de jointures...!

Merci beaucoup, ça fonctionne très bien!! :)

Oui, c'est ce que je te disais, je m'étais complètement planté dans la rédaction!
J'ai simplement copié mon erreur pour illustrer mes propos ;)

Encore merci pour le gros de pouce et bonne journée ! ;)