Partage
  • Partager sur Facebook
  • Partager sur Twitter

soucis avec mes modifications du tp mini-chat

Sujet résolu
    22 juin 2018 à 14:54:11

    Bonjour ! Alors le tp dis entrez le pseudo , le msg et affichez la discussion (dans un ordre decroissant) les 10 derniers msg, moi j'ai voulu ajouter un détail: si l'utilisateur ne remplie pas le champ pseudo ou le champ msg je lui affiche un msg disant de le rentrer et je n'enregistre pas dans la base de donnée tant que les deux champs ne sont pas remplies. Mes je gelère trop :( voici mes codes et je ne comprend pas pourquoi ça ne marche pas ! malgré toute les conditions des lignes vides s'ajoutent dans ma base et ça affiche du vide ( : ) au lieu de (pseudo:msg) , où est le problème? :(
    <?php //mini-chat-traiter.php
    session_start();
    if (isset($_POST['msg'])!=1) //j'ai mis non egale car apparament si $_POST['msg'] existe ça renvoie 1 sinon ça ne renvoie rien
    	{
    	    $_SESSION['msg'] = -1;//j'ai pas trouvé une maniere de renvoyer une variable à traiter selon ses valeur dans la page formulaire je ne vois pas comment utiliser la methode post ici ni get donc j opté pour une session
    	    header('Location: mini-chat-formulaire.php');
    	}
    elseif (isset($_POST['pseudo'])!=1)
       	{
       		$_SESSION['pseudo'] = -2;
       		header('Location: mini-chat-formulaire.php');
       	} 
    elseif(isset($_POST['msg']) AND isset($_POST['pseudo']))
    	{
            $_SESSION['msg'] = 0;
            $_SESSION['pseudo'] = 0;
    		try
    		{
    		// On se connecte à MySQL
    		$bdd = new PDO('mysql:host=localhost;dbname=ma_base;charset=utf8', 'root', '');
    		}
    		catch(Exception $e)
    		{
    		// En cas d'erreur, on affiche un message et on arrête tout
            die('Erreur : '.$e->getMessage());
    		}
    	$req = $bdd->prepare('INSERT INTO minichat(pseudo, msg) VALUES(:pseudo, :msg) ');
    $req->execute(array(
    	'pseudo' =>htmlspecialchars($_POST['pseudo']),
    	'msg' => htmlspecialchars($_POST['msg']),
    	));
    		header('Location: mini-chat-formulaire.php');
    
    	}
    ?>
    <?php session_start();//mini-chat-formulaire.php  ?>
    <!DOCTYPE html> 
    <html>
        <head>
            <title>tinhi messagerie</title>
            <link rel="stylesheet" href="style.css" />
            <meta charset="utf-8" />
        </head>
        <body>
        	<form method="post" action="mini-chat-traiter.php" >
            <h1>CHATTER</h1>    
            	<label>pseudo</label></br>
            	<input type="text" name="pseudo"/></br>
            	<label>message</label></br>
            	<textarea name="msg"></textarea> 
            	<p><input type="submit" value="Envoyer"/></p>
            </form>
           <?php 
           if($_SESSION['msg'] == -1){echo"<p>Le message est vide tapez quelque chose!</p>";}
           elseif($_SESSION['pseudo'] ==-2){echo "<p>Renseignez votre pseudo.</p>";}
           else{
           try
            {
            // On se connecte à MySQL
            $bdd = new PDO('mysql:host=localhost;dbname=ma_base;charset=utf8', 'root', '');
            }
            catch(Exception $e)
            {
            // En cas d'erreur, on affiche un message et on arrête tout
            die('Erreur : '.$e->getMessage());
            }
           $reponse = $bdd->query('SELECT * FROM minichat ORDER BY id DESC');
    echo '<p>DISCUSSION:</p>';
    echo '<ul>';
    $i=0;
        while($donnees=$reponse->fetch() AND $i<10)
        {
        echo '<li>' . $donnees['pseudo'] . ' :' . $donnees['msg'].'</li>';
    $i++;
    }
    echo '</ul>';
    
    $reponse->closeCursor();}?>
        </body>
    </html>


    -
    Edité par TinhiNane3 22 juin 2018 à 15:16:04

    • Partager sur Facebook
    • Partager sur Twitter
      22 juin 2018 à 15:35:31

      Hello, 

      Je viens de reprendre ton code, l'ai modifié, et ai fait deux trois améliorations.

      Je n'ai pas pu le tester, donc je ne garanti pas qu'il fonctionne du premier coup, à toi de voir. Je l'ai commenté aux maximum afin de t'aider. Essayes de comprendre la logique, et de modifier au besoin. N'hésites pas au besoin, postes ton problème ici.

      <?php 
      //On initialise les sessions et on lance la requête de récupération des messages
      session_start();
      try {
          $bdd = new PDO('mysql:host=localhost;dbname=ma_base;charset=utf8', 'root', '');
          $reponse = $bdd->query('SELECT * FROM minichat ORDER BY id DESC LIMIT 10');
          $donnees=$reponse->fetchAll();
      } 
      catch(Exception $e) {
          //En cas d'erreur, on affecte un message au tableau
          $_SESSION['err'] = "ERREUR PDO : ".$e->getMessage();
      }
      ?>
      <!DOCTYPE html>
      <html>
          <head>
              <title>tinhi messagerie</title>
              <link rel="stylesheet" href="style.css" />
              <meta charset="utf-8" />
          </head>
          <body>
              <form method="post" action="mini-chat-traiter.php" >
              <h1>CHATTER</h1>   
                  <label>pseudo</label></br>
                  <input type="text" name="pseudo"/></br>
                  <label>message</label></br>
                  <textarea name="msg"></textarea>
                  <p><input type="submit" value="Envoyer"/></p>
              </form>
             <?php
             //Ici on balaye le tableau d'erreur s'il existe et on les affiche
             if(isset($_SESSION['err']){
                 foreach($_SESSION['err'] as $errmsg) {
                     echo "<p>{$errmsg}</p>";
                  }
                  //Pour éviter tout soucis après, on efface tous les messages d'erreur
                  unset($_SESSION['err']);
              }
              ?>
             <p>DISCUSSION :</p>
              <ul>
              <?php
              //Ici on affiche les 10 derniers messages sous forme de liste
                  foreach($donnees as $message){
                      echo '<li>' . $message['pseudo'] . ' :' . $message['msg'].'</li>';
                  }
              ?>
              </ul>
          </body>
      </html>
      <?php
      // On initialise les sessions
      session_start();
      //On vérifie indépendament que les champs soient remplis
      //Si ils sont vides, on affecte une erreur dans un tableau de messages flash en session
      if (empty($_POST['msg'])) {
          $_SESSION['err'] = "Le message est vide tapez quelque chose !";
      }
      if (empty($_POST['pseudo'])) {
           $_SESSION['err'] = "Renseignez votre pseudo.";
      }
      //Si notre tableau de message d'erreurs est vide, c'est que tout est bon, donc on continue
      if(!isset($_SESSION['err'])) {
          $pseudo = $_POST['pseudo'];
          $msg = $_POST['msg'];
          //On fait un try catch sur toute la partie de requête
          try {
              $bdd = new PDO('mysql:host=localhost;dbname=ma_base;charset=utf8', 'root', '');
              $req = $bdd->prepare('INSERT INTO minichat(pseudo, msg) VALUES (:pseudo, :msg)');
              $req->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
              $req->bindValue(':msg', $msg, PDO::PARAM_STR);
              $req->execute();
          }
          catch(Exception $e) {
              //En cas d'erreur, on plante pas le script, mais on affecte un message dans le tableau
              $_SESSION['err'] = "ERREUR PDO : ".$e->getMessage();
          }
      }
      //On redirige sur la page mini-chat
      header('Location: mini-chat-formulaire.php');
      exit();
      




      -
      Edité par Ealon 22 juin 2018 à 15:52:49

      • Partager sur Facebook
      • Partager sur Twitter
      Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
        22 juin 2018 à 15:39:43

        C'est plutôt ?

        if (empty($_POST['msg'])) {
            $_SESSION['err'] = "Le message est vide tapez quelque chose !";
        }
        if (empty($_POST['pseudo'])) {
             $_SESSION['err'] = "Renseignez votre pseudo.";
        }

        -
        Edité par DevMercenaire 22 juin 2018 à 15:40:30

        • Partager sur Facebook
        • Partager sur Twitter
          22 juin 2018 à 15:52:19

          Ah oui, pardon !

          Un peu trop rapide dans le post ... Je corrige également dans mon post !

          Merci.

          • Partager sur Facebook
          • Partager sur Twitter
          Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
            22 juin 2018 à 17:12:26

            Merci pour votre aide! Ealon j'ai voulu essayer ton code mais ça m'indique cette erreur et je ne trouve pas à quoi elle est dû:

            et c'est quoi la difference entre empty et !isset en fait?

            et c'est quoi exactement le soucis avec mon code pourquoi ça ne marche pas comme j'ai fais c'est quoi l'erreur?

            dans vos code il y a des fonctions et des methodes que je ne connais pas (j'arrive à comprendre ce que ça fait) car elle ne sont pas dans le cours, par exemple la façon de traiter les erreurs ça n'a pas du tt été bien expliqué dans le cours il n'y a pas de details juste la formule de die qu'on copie colle sans trop comprendre le fonctionnement.

            OUUUGHA! ça fonctionne ! j'ai juste remplacer dans mon code mon bricolage avec isset par empty et dans la page du formulaire le elseif par if (pour traiter le 2eme meme si le 1er s'est réaliser) un pour le msg et l'autre pour le pseudo , au final mon code marche completement sans souci !

            -
            Edité par TinhiNane3 22 juin 2018 à 17:34:07

            • Partager sur Facebook
            • Partager sur Twitter
              22 juin 2018 à 17:35:50

              Alors, pour la précision sur isset() et empty() :

              isset() cherche si la variable existe, si elle est définie. Quelle que soit sa valeur, si cette variable a été initialisée à un moment ou à un autre, cette fonction te renverra true (ou 1). Au contraire empty() cherche à savoir si la variable en question est vide, et te renverra true si c'est le cas.

              Souvent, pour du test de formulaire, les cours donnent la façon !isset() pour savoir si des champs ne sont pas remplis. Cependant, il n'est pas impossible de se retrouver avec la variable du champ initialisée, mais vide ... Alors que empty() saura si cette variable existe, mais également si elle est vide.

              Si tu cherches de la documentation sur le traitement des erreurs, je t'invite à te renseigner sur les messages flash (c'est ce que j'ai utilisé dans mon code) qui ressemblent beaucoup au final aux message en bas à gauche du forum quand on poste. Si c'est pour la gestion des erreurs PDO, il y à là encore de bons liens sur le net, mais je n'ai pas trop le temps de cherche en ce moment.

              • Partager sur Facebook
              • Partager sur Twitter
              Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
                22 juin 2018 à 17:40:24

                oui merci pour toute ces indications je chercherai !
                • Partager sur Facebook
                • Partager sur Twitter

                soucis avec mes modifications du tp mini-chat

                × 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