Bonjour à tous,

Voila mon soucis, je suis en train de créer un blog avec pour chaque billet la possibilité d'y ajouter un commentaire. Donc j'ai créer un formulaire pour insérer un commentaire et quand j'envoie un nouveau commentaire, il s'enregistre bien dans la bdd, mais il ne reprend pas id du billet en question dans le champs id_billet il indique 0 alors qu'il devrait indiqué 1 qui correspond à l'id du billet.

Alors comment faire pour que le commentaire s'inscrive avec l'id du billet correspondant.

J'ai essayé plusieurs solutions, mais rien n'y fait.

voici mon code pour INSERT du commentaire.

<?php
    $req = $bdd->prepare('INSERT INTO commentaires(auteur, commentaire, date_commentaire) VALUES(?, ?, ?, now())');

    $req->execute(array($_POST'auteur'], $_POST'comment']));

    header('LOCATION:commentaires.php');

?>

Quelqu'un pourrait-il m'aiguiller, svp ?

Merci d'avance

Bien cordialement

5 réponses


Vallyan
Réponse acceptée

Dans ta page commentaire.php, j'imagine que tu récupères le billet depuis la bdd pour l'afficher. Dans ce cas il est facile de récupérer en même temps son id, et d'ajouter un champ caché dans ton formulaire qui permet d'ajouter un commentaire, et de lui assigner comme valeur l'ID du billet (en php).

Du coup lorsque ton utilisateur postera un commentaire depuis cette page, il enverra en réalité 3 champs: $_POST'auteur'], $_POST'commentaire'] et $_POST'id_billet']. Tu pourras alors utiliser $_POST'billet_id'] dans ta requête.

Le code ressemblerai vaguement a quelque chose comme ca (a adapter !):

<?php
    // Requete mySQL pour récupérer ton billet ET son ID
    // Disons que tu récupères $billet'contenu'] et $billet'id']
?>
<div id="billet">
    <?php
            // Affichage du billet
            echo $billet'contenu'];
        ?>
</div>
<form name="ajout_commentaire">
    <input name="auteur" type="text" />
    <textarea name="commentaire"><textarea>
<!-- Ajout du champ caché qui sera envoyé avec le formulaire, et qui contient l'id du billet -->
    <input type="hidden" value=" <?php echo $billet'id']; ?> " />
</form>
Vallyan
Réponse acceptée

L'idée est strictement la même, tu envoies l'id en get alors que je l'envoie en post.
Cool que tu t'en sois sorti tout seul ;)

Dans la table commentaires, tu as un champ id_billet, je suppose. Mais dans ta requête je ne vois pas l'ajout d'une valeur pour id_billet ?

jbinfo
Auteur

Bonjour Vallyan,

Oui dans ma table il y a un id_billet, je ne l'ai pas mis dans la requête car je ne sais pas encore comment faire. Car en fait si tu veux, j'ai une page (tchat.php) ou l'on voit la liste des billet avec en dessous de chacun un lien vers une page (commentaire.php) qui elle affichera le billet et les commentaires qui lui correspondes et un petit formulaire pour ajouter un commentaire.

Et ce que je voudrais c'est récupérer l'id du billet affiché et l'injecter dans ma requête qui va enregistrer le commentaire que je vais ajouter.

jbinfo
Auteur

J'ai résolu mon problème,
J'ai ajouter a mon formulaire un écho pour envoyer id du billet dans l'url :

<form role="form" method="post" action="commentaires_post.php?billet=<?= $donnees'id']; ?>">

Et ensuite le l'ai récupérée en utilisant le $_get'billet']. et voici le code que j'ai fait pour envoyer à la bdd.

$req = $bdd->prepare("INSERT INTO commentaires (id_billet, auteur, commentaire, date_commentaire) VALUES (?, ?, ?, now())");
        $req->execute(array(
            $_GET'billet'],
            $_POST'auteur'],
            $_POST'comment']
        ));

Et maintenant tout fonctionne

En attendant un grand merci pour ton coup de main, et j'essayerai également ta proposition car c'est toujours intéressant d'en apprendre plus.

Bien à toi ;)