Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP - Minichat PHP/Mysql - Problème champ DATETIME

Sujet résolu
    24 septembre 2018 à 10:38:53

    Bonjour, 

    Je suis actuellement en train de suivre le cours "Concevez votre site Web avec Php et Mysql" et me voilà arrivé au TP sur le minichat.

    J'ai un soucis lorsque je veux récupérer la date et l'heure afin de l'injecter dans l'interface utilisateur. En fait ma base de donnée de s'édite plus dès lors que j'ai créé le champ DATETIME...

    Voici mes deux pages de code:

    minichat.php :

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Mini-chat</title>
        </head>
        <style>
        form
        {
            text-align:center;
        }
        </style>
        <body>
        
        <form action="minichat_post.php" method="post">
            <p>
            <label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" /><br />
            <label for="message">Message</label> :  <input type="text" name="message" id="message" /><br />
            <input type="hidden" name="temps" id="temps">
            <input type="submit" value="Envoyer" />
        </p>
        </form>
    
    <?php
    // Connexion à la base de données
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
    
    // Récupération des 10 derniers messages
    $reponse = $bdd->query('SELECT pseudo, message, temps FROM minichat ORDER BY ID DESC LIMIT 0, 10');
    
    // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
    while ($donnees = $reponse->fetch())
    {
        echo '<p><strong>' . htmlspecialchars($donnees['temps']) . ': ' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>';
    }
    
    $reponse->closeCursor();
    
    ?>
        </body>
    </html>

    minichat_post.php:

    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
    
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare('INSERT INTO minichat (pseudo, message, temps) VALUES(?, ?, NOW())');
    $req->execute(array($_POST['pseudo'], $_POST['message'], $_POST['temps']));
    
    // Redirection du visiteur vers la page du minichat
    header('Location: minichat.php');
    ?>

    Et enfin le paramétrage du champ "temps" dans ma base de donnée:



    Je suis obligé de mettre en NULL sinon j'ai un message d'erreur lors de la création !

    Mon problème étant donc que ma base de donnée de s'édite plus suite après ces manipulations... et je ne trouve pas mon (mes) erreur !

    Merci d'avance pour votre aide !

    • Partager sur Facebook
    • Partager sur Twitter
      24 septembre 2018 à 10:48:30

      Hello,

      Peux-tu activer les erreurs PDO/SQL ? Cela te permettra peut-être d'en savoir plus, notamment si une erreur est levée !

      https://openclassrooms.com/courses/pdo-comprendre-et-corriger-les-erreurs-les-plus-frequentes#/id/r-1262786

      Une solution temporaire est éventuellement de retirer de ta requête l'insertion du temps et de mettre CURRENT_DATETIME() comme valeur par défaut sur phpMyAdmin (je crois que tu dois avoir une option comme ça dans la liste).

      • Partager sur Facebook
      • Partager sur Twitter
      Celui qui croit tout savoir ne sait rien
        24 septembre 2018 à 11:02:48

        Bonjour,

        Pourquoi avoir crée input comme ceci dans minichat.php :

        <input type="hidden" name="temps" id="temps">
        Et ce n'est pas la peine de mettre $_POST['temps'] dans votre requête d'insertion car vous définissez le champs temps avec NOW()

        sur votre fichier minichat_post.php.

        Cordialement.

        • Partager sur Facebook
        • Partager sur Twitter
          24 septembre 2018 à 11:17:56

          Ok il fallait bien retirer l'insertion du temps dans ma requête & mettre CURRENT_TIMESTAMP() sur phpMyAdmin ! Merci beaucoup !
          • Partager sur Facebook
          • Partager sur Twitter
            24 septembre 2018 à 11:26:20

            Pas de soucis, mais je te conseille de corriger également les erreurs relevées par JohanVallon ;)
            • Partager sur Facebook
            • Partager sur Twitter
            Celui qui croit tout savoir ne sait rien
              24 septembre 2018 à 11:31:12

              Merci à vous deux ! Erreurs corrigées !

              J'ai viré:

              <input type="hidden" name="temps" id="temps">

              Et ma requête ressemble désormais à ça:

              $req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)');
              $req->execute(array($_POST['pseudo'], $_POST['message']));

              Et ça marche que je fais:

              $reponse = $bdd->query('SELECT pseudo, message, temps FROM minichat ORDER BY ID DESC LIMIT 0, 10');
              
              // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
              while ($donnees = $reponse->fetch())
              {
                  echo '<p><strong>' . htmlspecialchars($donnees['temps']) . ' à ' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>';
              }
              
              $reponse->closeCursor();
              
              ?>

              :D




              • Partager sur Facebook
              • Partager sur Twitter
                19 mars 2019 à 17:28:04

                J'avais le même problème. C'était juste qu'il n'y avait pas besoin d'appeler $_POST['date'] car déjà définie par NOW()!!!

                Merci JohanVallon!

                ;)

                • Partager sur Facebook
                • Partager sur Twitter

                TP - Minichat PHP/Mysql - Problème champ DATETIME

                × 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