Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec le minichat

TP du cours de M@teo

    18 février 2007 à 17:34:44

    Bonjour,
    J'apprends le PHP par le cours de Mateo, je suis arrivé au TP : minichat, j'ai réussi à faire le script, mais j'aimerais qu'il soit impossible de mettre deux fois le même message (ça le fait quand on rafraichit la page).
    Voilà mon script :

                    <?php
                            $jour=date('d');
                            $mois=date('m');
                            $dateheure="$heure:$minute";
                            mysql_connect("localhost", "***", "***");
                            mysql_select_db("***");
                            if(isset($_POST['pseudo']) AND isset($_POST['message']) AND $_POST['pseudo'] != NULL AND $_POST['message'] != NULL)
                            {
                                    $pseudo=htmlentities ($_POST['pseudo']);
                                    $message=htmlentities ($_POST['message']);
                                    mysql_query("INSERT INTO test_chat(ID, dateheure, pseudo, message) VALUES('', '$dateheure', '$pseudo', '$message')");
                                    mysql_close();
                            }
                    ?>
                    <p>
                            <form method="post" action="<?php echo"$page"?>">
                                    Pseudo : <input name="pseudo" class="minichatform" type="text" <?php if(isset($_POST['pseudo']) AND $_POST['pseudo'] != NULL) {echo"value=\"$pseudo\"";}?> /><br/>
                                    Message : <input name="message" class="minichatform" type="text" />
                                    <input type="submit" value="OK"/>
                            </form>
                    </p>
                    <p>
                            <div id="minichat">
                                    <?php
                                            mysql_connect("localhost", "***", "***");
                                            mysql_select_db("***");
                                            $reponse = mysql_query("SELECT * FROM test_chat ORDER BY ID DESC LIMIT 0,10"); // Requête SQL
                                            mysql_close(); // Déconnexion de MySQL
                                            while ($donnees = mysql_fetch_array($reponse) )
                                            {
                                    ?>     
                                    [<?php echo $donnees['dateheure'];?>] <strong><?php echo $donnees['pseudo'];?> :<br/></strong><?php echo $donnees['message'];?><br/>
                                    <?php
                                            }
                                    ?>
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      18 février 2007 à 17:48:14


                      <?php
                              $jour=date('d');
                              $mois=date('m');
                              $dateheure="$heure:$minute";
                              mysql_connect("localhost", "***", "***");
                              mysql_select_db("***");
                              if(isset($_POST['pseudo']) AND isset($_POST['message']) AND $_POST['pseudo'] != NULL AND $_POST['message'] != NULL)
                              {
                                      $pseudo=htmlentities ($_POST['pseudo']);
                                      $message=htmlentities ($_POST['message']);

      // On regarde le dernier message posté

      $dern1 = mysql_query('SELECT message FROM chat WHERE pseudo="' . $pseudo . '" ORDER BY id DESC LIMIT 0,1');
      $dern = mysql_fetch_assoc($dern1);

      // On compare le message actuellement posté avec le dernier de la table
      if($dern['message'] != $message) {
                                      mysql_query("INSERT INTO test_chat(ID, dateheure, pseudo, message) VALUES('', '$dateheure', '$pseudo', '$message')");
                                      mysql_close();
                              }
                          else {
                         echo 'On actualise pas cette page !';
                        }
                        }
                      ?>
                      <p>
                              <form method="post" action="<?php echo"$page"?>">
                                      Pseudo : <input name="pseudo" class="minichatform" type="text" <?php if(isset($_POST['pseudo']) AND $_POST['pseudo'] != NULL) {echo"value=\"$pseudo\"";}?> /><br/>
                                      Message : <input name="message" class="minichatform" type="text" />
                                      <input type="submit" value="OK"/>
                              </form>
                      </p>
                      <p>
                              <div id="minichat">
                                      <?php
                                              mysql_connect("localhost", "***", "***");
                                              mysql_select_db("***");
                                              $reponse = mysql_query("SELECT * FROM test_chat ORDER BY ID DESC LIMIT 0,10"); // Requête SQL
                                              mysql_close(); // Déconnexion de MySQL
                                              while ($donnees = mysql_fetch_array($reponse) )
                                              {
                                      ?>     
                                      [<?php echo $donnees['dateheure'];?>] <strong><?php echo $donnees['pseudo'];?> :<br/></strong><?php echo $donnees['message'];?><br/>
                                      <?php
                                              }
                                      ?>

      Regarde mes commentaires ...
      Cela n'est que pour éviter le double poste, mais si tu veux que le message soit unique (ce qui ne sert à rien ...) tu fais ça pour compter le nombre de message égal à $message:

      if(mysql_result(mysql_query('SELECT COUNT(*) AS nb_msg FROM chat WHERE message="' . $message . '"'), 0, 'nb_msg') == 0)

      Donc si le resultat = 0 on peut poster !
      • Partager sur Facebook
      • Partager sur Twitter
        18 février 2007 à 20:41:25

        :S
        Je sais pas ce que tu m'as fait faire là mais ça va pas beaucoup mieux.
        j'ai ce message d'erreur :
        Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /web/ftpusers/soad-fan/menu.php on line 85
        et l'heure des messages ne s'affiche pas quand j'essaye avec ce que tu m'as modifié (j'ai ça >>>[ : ]).
        Et puis ton dernier bout de code je ne vois pas trop ce que je dois en faire.

        PS : au cas où tu n'as pas bien compris ce que je veux faire :
        Quand je poste un message sur le minichat, puis que j'actualise ensuite la page, j'ai un message de firefoxImage utilisateur
        Si je fais OK j'ai le message en double, si je fais Annuler la page ne se rafraichit pas.

        Citation : M@teo21 dans son tuto

        Empêcher les messages en double. En effet, si vous actualisez la page (touche F5) pour voir s'il y a de nouveaux messages, votre navigateur va vous demander s'il doit renvoyer les informations... Si vous dites "oui", alors le message qu'il vient d'envoyer sera réenvoyé, ce qui fait qu'il apparaîtra en double !Pour éviter cela, il y a bien une solution : avant d'enregistrer un message, vous vérifiez que le dernier message posté n'est pas identique. Si c'est le même, vous n'enregistrez pas le message (sinon vous auriez eu un double !).

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          18 février 2007 à 21:08:32

          Le code que je t'ai passé sert à contrer le double poste ...
          Comme tu vois j'ai pris le dernier message posté dans la BDD puis je l'ai comparé à celui qui est sur le point d'être posté. Si il est différent alors on poste, sinon ça veut dire qu'il a actualisé !

          Mon code à l'air juste ! Tu as bien changé les variables de ma requête ? Et le nom de la table ? Vérifie bien ces paramètres ;)

          Ciao,
          J@mes.
          • Partager sur Facebook
          • Partager sur Twitter
            18 février 2007 à 22:54:16

            Ah Ok, le problème c'était juste que tu avais nommé dans ton script la table "chat" alors que ma table s'appelle "test_chat", j'ai modifié ça et maintenant ça fonctionne, je te remercie :D
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              19 février 2007 à 0:01:29

              Tu as compris le principe du script ? Tu arriverais à le refaire seul ? :)
              • Partager sur Facebook
              • Partager sur Twitter
                19 février 2007 à 0:15:03

                Non pas vraiment, mais bon j'avais l'intention me faire un autre topic pour demander des explications à propos d'un autre bout de code dans le tuto PHP qui y ressemble et qui m'a demandé des heures de réflexion sans résultat.
                Bon moi j'ai l'habitude de me coucher à 21H30 et de me lever à 7H00, je crois qu'il est temps que j'aille me coucher.
                • Partager sur Facebook
                • Partager sur Twitter

                Problème avec le minichat

                × 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