Partage
  • Partager sur Facebook
  • Partager sur Twitter

Blog [Ajout de commentaires ]

Sujet résolu
Anonyme
    3 mars 2021 à 11:11:05

    Bonjour,

    J'ai réalisé le TP sur le blog en PHP tout marche correctement mais il semble que soit je ne réfléchis pas assez ou que j'ai omis quelque chose car j'essaie de réaliser la partie ajout de commentaires mais je suis bloqué car rien ne s'insère dans la base de données bien que la syntaxe soit correcte et une fois que les données sont envoyés la page avec le paramètre Id_billet ne s'affiche pas et laisse place à une page blanche.

    Je me suis dis qu'au bout d'un moment j'allais regarder sur le forum si d'autres avait eu le même problème ce qui fut le cas mais comme je ne veux pas avoir la solution tout de suite je me suis demandé si vous pourriez m'éclairer avec un indice ou m'indiquez si j'ai fais une grossière erreur car je crois qu'à mesure que je regarde le code je ne comprends plus rien...

    Voici la partie index.php ( qui fonctionne) : 

    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
      <head>
        <meta charset="utf-8">
        <link rel="stylesheet" href="index.css">
        <title>Blog</title>
      </head>
      <body>
    <h1>Mon Super blog !</h1>
    <?
    // Connexion à la base de données
    $bdd = new PDO('mysql:host=localhost;dbname=test','root','root');
    // Récupération des données de chaque billets
    $requete = $bdd->query("SELECT ID, Titre,Contenu_billets,DATE_FORMAT(date_creation,'%d/%m/%Y à %Hh%i') AS date_creation_billet FROM billets");
    
      // Boucle pour afficher chaque données de chacun des billets
      while ($donnees = $requete->fetch())
      {
              echo "<h3>".$donnees['Titre']." le ".$donnees['date_creation_billet']."</h3>";
    
     ?>
    
          <div class="news">
          <p>
                  <?
                  echo $donnees['Contenu_billets'];
                  ?>
                  <br>
                  <!-- Le paramètre Id_Billet servira a lié l'ID de la Table billets à l'Id_Billet de la table commentaires-->
                  <a href="commentaires.php?Id_Billet=<? echo $donnees['ID'];?>">Commentaires</a>
          </p>
        </div>
    <?
    }
     // Fin de la requête !
    $requete->CloseCursor();
    ?>
    
    
      </body>
    </html>
    

    La partie commentaires.php ( de même qu'au dessus sans le formulaire !) : 

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <link rel = "StyleSheet" href = "index.css" type = "text/css" />
    
          <title>Document</title>
      </head>
    
      <body>
      <a href="index.php">Retour à la liste des billets</a>
      <br>
    
      <?
      // Connexion à la base de données
       $bdd = new PDO('mysql:host=localhost;dbname=test','root','root');
    
      // Récupération des données de chaque billets via le filtrage de l'ID par une requête préparée prenant en compte le paramètre Id_Billet
       $reponse = $bdd->prepare("SELECT ID,Titre,Contenu_billets,DATE_FORMAT(date_creation,'%d/%m/%Y à %H:%i') AS date_creation_du_billet FROM billets WHERE ID = ?");
       $reponse->execute(array($_GET['Id_Billet']));
    
          // Récupération d'une entrée à la fois
              $donnees = $reponse->fetch();
              echo '<h3>'.$donnees['Titre'].' le '.$donnees['date_creation_du_billet'].'</h3>';
    
      ?>
                      <div class="news">
    
                          <p>
                                <?
                                echo $donnees['Contenu_billets'];
                                // Fin de la requête !
                                $reponse->CloseCursor();
                                ?>
                          </p>
    
                      </div>
    
      <h2 style="font-size : 2em;">Commentaires</h2>
    
          <form action="commentairespost.php"  method="post">
    
              <p>Pseudo:</p><input type="text" name="utilisateur">
              <p>Message :</p><input type="text" name="message" >
              <br><br>
              <input type="submit"value="Envoyer">
    
          </form>
    
      <br><br>
      <?
      // Ici le paramètre Id_Billet permet de récupérer les commentaires du billet qui lui est lié par le filtrage
       $requete_preparee = $bdd->prepare("SELECT Id_Billet,Pseudo,Contenu,DATE_FORMAT(date_creation_commentaire,'%d/%m/%Y à %H:%i') FROM commentaires WHERE Id_Billet = ?");
       $requete_preparee->execute(array($_GET['Id_Billet']));
    
        $data = $requete_preparee->fetch();
        echo $data['Pseudo'].' a écrit :'.$data['Contenu'];
    
      ?>

    Et la partie commentairespost.php :

    $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
    $insertion = $bdd->prepare("INSERT INTO commentaires (Pseudo,Contenu) VALUES (?,?)");
    $insertion->execute(array($_POST['utilisateur'],$_POST['message']));
    $insertion->CloseCursor();
    header('Location:commentaires.php')
    

    Je me doute bien que le code doit être différent du minichat mais là je suis complètement perdu.


    -
    Edité par Anonyme 3 mars 2021 à 12:36:01

    • Partager sur Facebook
    • Partager sur Twitter
      3 mars 2021 à 12:22:44

      Bonjour.

      Je t'invite à revoir le fonctionnement des requêtes préparées et les marqueurs

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        3 mars 2021 à 12:35:32

        Aurélien.C a écrit:

        Bonjour.

        Je t'invite à revoir le fonctionnement des requêtes préparées et les marqueurs


        Merci d'avoir répondu hormis la petite erreur que j'ai omis de corriger dans la partie insertion de données de commentairespost.php que j'ai corrigé que veux tu dire par là ? 

        Pour ce qui est des marqueurs je vais y jeter un coup d'oeil mais pourrais-tu être plus spécifique hormis l'erreur que j'ai omise au dessus il me semble que le reste est correcte.

        -
        Edité par Anonyme 3 mars 2021 à 12:37:04

        • Partager sur Facebook
        • Partager sur Twitter
          3 mars 2021 à 13:27:32

          Active les erreurs PDO ! Sur 3 connexions, tu ne le fais pas une seule fois.

          Il ne manque pas des choses à ton insertion : éventuellement la date mais surtout le billet (Id_Billet) auquel est rattaché le commentaire ? (mais encore faudrait-il faire transiter ce dernier via le formulaire soit en query string via l'action soit via un champ caché)

          PS : il est vivement recommandé d'éviter la balise courte <? pour <?php

          -
          Edité par julp 3 mars 2021 à 13:31:27

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            4 mars 2021 à 17:12:43

            Bonjour,

            Merci d'avoir répond pour les erreurs PDO j'en prends note.

            J'ai essayé mais n'est pas réussi l'amélioration et ai regardé la solution sur un ancien sujet de ce fait je m'afférer à comprendre là ou j'ai fauté et m'améliorer par la suite merci pour vos retour.

            Je clos le sujet.

            • Partager sur Facebook
            • Partager sur Twitter

            Blog [Ajout de commentaires ]

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown