Partage
  • Partager sur Facebook
  • Partager sur Twitter

Echo d'une variable ne fonctionne pas.

    14 octobre 2020 à 20:58:00

    Bonjour à tous,

    Je suis actuellement en train de créer un système d'inscription mais j'ai un problème, lorsque j'essaye d'afficher "l'erreur" lors de l'inscription (ex: adresse mail incorrecte...), elle ne s'affiche pas, je vous montre mon code: 

    if(isset($_POST['submit'])){
        if(isset($_POST['username']) AND isset($_POST['email']) AND isset($_POST['password']) AND isset($_POST['password_confirm'])){
            if(!empty($_POST['username']) AND !empty($_POST['email']) AND !empty($_POST['password']) AND !empty($_POST['password_confirm'])){
                
                $username = trim(htmlspecialchars($_POST['username']));
                $email = trim(htmlspecialchars($_POST['email']));
                $password = trim(htmlspecialchars($_POST['password']));
                $password_confirm = trim(htmlspecialchars($_POST['password_confirm']));
    
                if(strlen($email) <= 255){
                    if(filter_var($email, FILTER_VALIDATE_EMAIL)){
                        if(strlen($username) >= 3 AND strlen($username) <= 255){
                            if(strlen($password) >= 4 AND strlen($password) <= 100){
                                if($password == $password_confirm){
    
                                    $req = $db->prepare("INSERT INTO users (username, email, password) VALUES (?,?,?)");
                                    $req->execute(array($username,$email,$password));
    
                                    $error = "Inscription validée !";
    
                                } else {
                                    $error = "Vos mots de passes de correspondent pas.";
                                }
                            } else {
                                $error = "Votre mot de passe doit contenir au moins 4 caractères.";
                            }
                        } else {
                            $error = "Votre pseudonyme doit entre 3 et 255 caractères.";
                        }
                    } else {
                        $error = "Veuillez saisir une adresse e-mail correcte.";
                    }
                } else {
                    $error = "Veuillez saisir une adresse e-mail correcte.";
                }
    
            }
        }
    }

    Et la ligne qui permet d'afficher l'erreur: 

    <p><?php if(isset($error)){echo $error;} ?></p>

    J'utilise une architecture MVC, c'est-à-dire que les fichiers sont reliés (permet d'optimiser le code et sépare le html du php..), même si je suppose que cela n'a rien à voir car j'ai fais plusieurs test, j'ai déclaré une variable puis ai essayé de l'afficher, et là , cela fonctionnait.. Quelqu'un aurait-il une idée du problème et saurait comment le résoudre :o ? Merci d'avance, bonne soirée !


    • Partager sur Facebook
    • Partager sur Twitter
      14 octobre 2020 à 21:09:14

      Bonsoir,

      ça veut surement dire que tu ne rentres mêmes pas dans les 1er if qui eux n'ont pas de else

      d'ailleurs

      - tu peux supprimer la ligne 2 car la fonction isset est comprise dans la fonction empty

      - pas de htmlspecialchars sur les données entrée en BDD (cf signature)

      - pas de "trim" sur le password car l'espace peut faire parti du MDP

      - un mdp en clair, ce n'est pas bon. Il faut utiliser "password_hash" pour l'encodage et "password_verify" pour la vérification

      - Le problème avec ton code c'est que l'utilisateur verra seulement une erreur à fois. Donc s'il doit les corriger une à une, ça va être long

      -
      Edité par Aurélien.C 14 octobre 2020 à 21:10:42

      • Partager sur Facebook
      • Partager sur Twitter
        14 octobre 2020 à 21:16:05

        Salut

        Aurélien.C a écrit:

        ça veut surement dire que tu ne rentres mêmes pas dans les 1er if qui eux n'ont pas de else

        Je serais d'ailleurs peu surpris que le formulaire "envoie en GET" parce que la méthode a été oubliée ou comporte une coquille  ;)

        -
        Edité par Ymox 14 octobre 2020 à 21:16:18

        • Partager sur Facebook
        • Partager sur Twitter
        OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
          14 octobre 2020 à 21:36:38

          Merci de votre aide, j'ai bien conscience de certaines de mes erreurs, mais donc, que faudrait-il que je change pour régler ce problème en clair ?
          • Partager sur Facebook
          • Partager sur Twitter
            14 octobre 2020 à 22:31:32

            commence par appliquer à minima les 3 premiers conseils que je te donne, pour les 2 autres il faudra le faire après

            ensuite mets un else à chaque if avec dans ce dernier un "echo" pour indiquer où tu passes, cela permet de débugger son code

            • Partager sur Facebook
            • Partager sur Twitter
              15 octobre 2020 à 20:31:43

              Bonjour de nouveau,

              J'ai appliqué vos conseils comme j'ai pu.

              Voilà ce que j'ai pour le moment:

              <?php
              
              require "../network.php";
              require "register/register.php";
              
              if(isset($_POST['submit'])){
                  if(!empty($_POST['username']) AND !empty($_POST['email']) AND !empty($_POST['password']) AND !empty($_POST['password_confirm'])){
              
                      $username = trim($_POST['username']);
                      $email = trim($_POST['email']);
                      $password = $_POST['password'];
                      $pasword_confirm = $_POST['password_confirm'];
              
                      if(filter_var($email, FILTER_VALIDATE_EMAIL)){
              
                      } else {
                          $error = "Veuillez entrer une adresse e-mail correcte.";
                      }
              
                  } else { 
                      $error = "Veuillez remplir tous les champs.";
                  }
              }

              Mais lorsque j'essaye d'afficher l'erreur de nouveau, rien..

              • Partager sur Facebook
              • Partager sur Twitter
                15 octobre 2020 à 20:50:43

                il nous faut aussi le code du formulaire

                et donne nous le code complet de la page, en cachant bien sur les données sensibles (email, mdp ...)

                • Partager sur Facebook
                • Partager sur Twitter
                  15 octobre 2020 à 21:09:20

                  Avec plaisir,

                  <?php
                  
                  require "../network.php";
                  require "register/register.php";
                  
                  if(isset($_POST['submit'])){
                      if(!empty($_POST['username']) AND !empty($_POST['email']) AND !empty($_POST['password']) AND !empty($_POST['password_confirm'])){
                  
                          $username = trim($_POST['username']);
                          $email = trim($_POST['email']);
                          $password = $_POST['password'];
                          $pasword_confirm = $_POST['password_confirm'];
                  
                          if(filter_var($email, FILTER_VALIDATE_EMAIL)){
                              if(strlen($username <= 20) AND strlen($username >= 3)){
                                  if(strlen($password <= 50) AND strlen($password >= 5)){
                  
                                  } else {
                                      
                                  }
                              } else {
                                  $error = "Votre nom d'utilisateur doit comporter entre 3 et 20 caractères.";
                              }
                          } else {
                              $error = "Veuillez entrer une adresse e-mail correcte.";
                          }
                  
                      } else { 
                          $error = "Veuillez remplir tous les champs.";
                      }
                  }

                  Et le HTML: 

                  <?php include('../main.php') ?>
                  
                  <html>
                  <head>
                          <title>Inscription - Nemosia</title>
                          <meta name="viewport" content="width=device-width, inital-scale-1.0">
                          <link rel="stylesheet" href="../css/register.css">
                          <link href="https://fonts.googleapis.com/css2?family=Montserrat&display=swap" rel="stylesheet">
                      </head>
                  <body>
                      <div class="box-center">
                          <h1 class="box-title">Inscription</h1>
                          <form method="POST" class="box-form">
                              <div class="form-field">
                                  <input name="username" type="text" required>
                                  <span></span>
                                  <label>Nom d'utilisateur</label>
                              </div>
                              <div class="form-field">
                                  <input name="email" type="text" required>
                                  <span></span>
                                  <label>Adresse e-mail</label>
                              </div>
                              <div class="form-field">
                                  <input name="password" type="password" required>
                                  <span></span>
                                  <label>Mot de passe</label>
                              </div>
                              <div class="form-field">
                                  <input name="password_confirm" type="password" required>
                                  <span></span>
                                  <label>Répétez le mot de passe</label>
                              </div>
                              <p class="confidentiality">En continuant, vous acceptez la<a href="#" class="confidentiality"> charte de confidentialité.</a></p>
                              <button type="submit" class="button-register" name="submit">S'inscrire !</button>
                          </form>
                      </div>
                  
                      <p><?php if(isset($error)){echo $error;} ?></p>
                  
                  </body>
                  </html>
                  
                  




                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 octobre 2020 à 21:25:29

                    donc ton code php est contenu dans le fichier "main.php" ?

                    donc un "var_dump($_POST);" à la ligne 5 du php devrait donner quelque choses après soumission du formulaire

                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 octobre 2020 à 21:39:57

                      Tous tes strlen sont tous faux, les ) sont mal placées.

                      Et si le if comme le else n'ont pas de corps, alors tous deux ne servent à rien.

                      PS : j'ai oublié de dire que strlen c'est le nombre d'octets, pas forcément de caractères (exemple : é c'est un caractère mais il est codé sur 2 octets en UTF-8)

                      Tu dis utiliser le principe MVC mais comment ? Parce que si ça implique des fonctions/méthodes, il y a peut être la question du scope de $error qui se pose.

                      -
                      Edité par julp 16 octobre 2020 à 1:21:41

                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 octobre 2020 à 17:42:48

                        Apparemment j'ai du mal à reprendre PhP :lol:.

                        Je ne comprend pas votre histoire de corps de else etc, possible d'être plus clair ;D ?

                        Sinon je n'utilise pas de fonction pour le moment.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 octobre 2020 à 17:47:57

                          alors le corps vide = ligne 17 & 19 vide

                          ah si vous utilisez plein de fonction (strlen, trim, filter_var, isset, empty......)

                          cette ligne est fausse 

                          if(strlen($username <= 20) AND strlen($username >= 3)){
                                          if(strlen($password <= 50) AND strlen($password >= 5)){

                          cela devrait être 

                          if(strlen($username) <= 20 AND strlen($username) >= 3){
                                          if(strlen($password) <= 50 AND strlen($password) >= 5){




                          -
                          Edité par Aurélien.C 16 octobre 2020 à 17:49:02

                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 octobre 2020 à 17:57:09

                            C'est vraiment pas net cette histoire :euh:

                            J'ai essayé:

                            <?php
                            
                            require "../network.php";
                            require "register/register.php";
                            
                            if(isset($_POST['submit'])){
                                if(!empty($_POST['username']) AND !empty($_POST['email']) AND !empty($_POST['password']) AND !empty($_POST['password_confirm'])){
                            
                                    $username = trim($_POST['username']);
                                    $email = trim($_POST['email']);
                                    $password = $_POST['password'];
                                    $pasword_confirm = $_POST['password_confirm'];
                            
                                    if(strlen($username) <= 20 AND strlen($username) >= 3){
                                        if(strlen($password) <= 50 AND strlen($password) >= 5){
                            
                                        } else {
                                            $error = "fonctionne ?";
                                        }
                                    } else {
                                        $error = "fonctione !";
                                    }
                            
                                } else { 
                                    $error = "Veuillez remplir tous les champs.";
                                }
                            }

                            Juste avec ceci et, toujours pas..

                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 octobre 2020 à 18:15:26

                              Aurélien.C a écrit:

                              donc ton code php est contenu dans le fichier "main.php" ?

                              donc un "var_dump($_POST);" à la ligne 5 du php devrait donner quelque choses après soumission du formulaire



                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 octobre 2020 à 2:59:36

                                Tous simplement par ce que votre formulaire ne contient pas une input au nom de submit c'est bouton de type submit il n'ya pas de variable en post qui s'appel submit dans votre formulaire veuillez enlevé la condition

                                if (isset($_POST['submit']))

                                ou ajouté a votre formulaire une input

                                <input type="hidden" name="submit" />


                                NB: vou avez pas vu d'erreur par ce que vous vous avez pas mis le else de la première if qui recherche le submit

                                if (isset($_POST['submit'])){ .... }
                                else {
                                   $error ="pas de submit";
                                }

                                j'espère que ça vous aide


                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 octobre 2020 à 10:54:41

                                  Si jamais, le bouton possède bien un attribut name et si on utilise ledit bouton pour soumettre le formulaire, c'est la valeur entre les balises qui est envoyée comme si le bouton était une saisie.

                                  Mais si on soumet le formulaire avec ENTER, par exemple, vu que le bouton n'a pas été cliqué, effectivement l'index submit n'existe pas.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
                                    Staff 18 octobre 2020 à 12:25:09

                                    Bonjour,

                                    je viens de vérifier en local, et si si si, en tout cas avec Firefox, l'index "submit" ainsi que sa valeur sont bien envoyées après l'appui sur la touche Entrée.

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Pas d'aide concernant le code par MP ni par mail, le forum est là pour ça :) Postez votre code html et css (bouton '</>') !!

                                      18 octobre 2020 à 13:28:18

                                      On en revient au var_dump de $_POST pour vérifier qu'il reçoit bien ce qu'il pense ?

                                      -
                                      Edité par julp 18 octobre 2020 à 13:28:32

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        19 octobre 2020 à 8:17:42

                                        @Lamecarlate au temps pour moi, je suis resté sur un vieux comportement qui apparemment devait être un bug.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir

                                        Echo d'une variable ne fonctionne pas.

                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                        • Editeur
                                        • Markdown