Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de else

Sujet résolu
    14 février 2019 à 5:42:05

    Bonjour,

    J'ai fait une page contenant un formulaire pour créer un espace membre. J'ai créé une seconde page qui enregistre les éléments dans la base de données. Je peux envoyer les éléments et ils s'enregistrent bien dans la base. J'ai ajouté ensuite des regex dans des conditions pour pouvoir contrôler ce qui est entré dans les champs pseudo, mot de passe (et resaisie) et email. J'ai utilisé htmlspecialchars, trim et demandé des mots de passe identiques. Cependant, je bloque à cause d'une erreur. PHP ne semble pas vouloir de mon premier else et je ne comprends pas pourquoi.... Ca fait un temps fou que je me creuse la tête mais je ne comprends pas où est l'erreur. Quelqu'un pourrait il m'aider svp ? Merci beaucoup. Ca me bloque complètement.

    Bonne journée.

    inscription.php
    
    <!DOCTYPE html>
    	<html lang="fr">
    		<head>
    			<meta charset="utf-8">
    			<meta name="viewport" content="width=device-width, initial-scale=1"/>
    			 <link rel="stylesheet" href="cssandfonts/style.css" />
    			<title> Inscription </title>
    		</head>
    
    
    		<body>
                
                <h1>Les blogotteurs</h1>
                
                <h2> Bienvenue sur <em>le </em>site référence des <em>vrais</em> voyageurs ! </h2> <br/>
                
                
                <form method="post" action="inscription_post.php">
                    
                    <p> Pour vous inscrire, veuillez svp remplir les champs suivants (tous obligatoires) :  <br/> </p>
                
                    <p>
                        <label for="pseudo">Votre pseudo : </label> <input type="text" id="pseudo" name="pseudo" required/> <br/>
                        
                        <label for="pass">Votre mot de passe : </label> <input type="password" id="pass" name="pass" required/> <br/>
                        
                        <label for="pass2">Resaisissez votre mot de passe : </label> <input type="password" id="pass2" name="pass2" required/> <br/>
                        
                        <label for="email">Votre email : </label> <input type="email" id="email" name="email" required/> <br/>
                        
                        <input type="submit" value="Valider l'inscription"/> <br/>
                        
                    </p>
                
                </form>
    
        
                
            </body>
            
    </html>
    inscription_post.php
    
    <?php
        //connection bdd    
    
            try 
            {
                $bdd=new PDO('mysql: host=localhost; dbname=test; charset=utf8', 'root', 'globetrotter2018', array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
            }
    
            catch(Exception $e)
            {
                die('Erreur ' .$e ->getMessage());
            }
                
    
                // vérification du fait que les champs ont été renseignés, contre les espaces vides et la faille xxs
       if(!empty(trim($_POST['pseudo'])) AND !empty(trim($_POST['pass'])) AND !empty(trim($_POST['pass2'])) AND !empty(trim($_POST['email'])))
        { 
            $pseudo = trim(htmlspecialchars($_POST['pseudo']));
            $pass = trim(htmlspecialchars($_POST['pass']));
            $pass2 = trim(htmlspecialchars($_POST['pass2']));
            $email= trim(htmlspecialchars($_POST['email']));
       
           //if else : pour vérifier que le pseudo est bien conforme aux attentes du site
           if(preg_match('#^[a-zA-Z0-9]{1}[a-zA-Z0-9.-_]{4,9}$#',$_POST[['pseudo']]));
           {
            $req=$bdd->prepare('INSERT INTO membres(pseudo) VALUES(?)');
            $req->execute(array(htmlspecialchars($_POST['pseudo'])));   
            echo'Pseudo validé';
           }
           else
           {
               echo 'Attention : un pseudo doit contenir un premier caractère alphanumérique puis peut contenir des caractère alphanumérique, points, tirets ou underscores. Il doit contenir entre 5 et 10 caractères. Aucun accent autorisé.'; 
           }
           
           // if else : pour vérifier le mot de passe numéro 1 : lettres chiffres, & - _ . / * + ? ! ; autorisés, entre 5 et 10 caractères
           if(preg_match('#^[a-zA-Z0-9]{1}[a-zA-Z0-9.-_&/*+?!;,:%@#]{4,9}$#', $_POST['pass']))
           {
                $req=$bdd->prepare('INSERT INTO membres(pass) VALUES(?)');
               $req->execute(array(htmlspecialchars($_POST['pass'])));   
               echo'Mot de passe validé';
           }
           else
           {
              echo 'Attention : un mot de passe doit contenir un premier caractère alphanumérique puis peut contenir des caractère alphanumérique ou les éléments suivants : .,:;@!?/*-+_&#%. Il doit contenir entre 5 et 10 caractères. Aucun accent autorisé.';  
                   }
                  
           //if else : pour vérifier le deuxième password :
           
           if($_POST['pass'] == $_POST['pass2'])
           {
               $req=$bdd->prepare('INSERT INTO membres(pass2) VALUES(?)');
               $req->execute(array(htmlspecialchars($_POST['pass2'])));    
               echo 'Mot de passe validé';
           }
           else
           {
               echo 'Vos deux mots de passes ne sont pas identiques, veuillez les resaisir.';
           }
           
           //if else : pour vérifier la validité de l'adresse email : 
           if(preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#',$_POST['email']));
           {
                  $req=$bdd->prepare('INSERT INTO membres(email) VALUES(?)');
               $req->execute(array(htmlspecialchars($_POST['email'])));  
               echo 'Adresse email validée';
           }
           else
           {
               echo 'Adresse email incorrecte.';
           }
           
       }
      else
                                                                                   
        {
          
            echo 'Attention : Vous n\'avez pas remplis tous les champs (obligatoires) ou vous avez saisi un ou des espaces (interdits)';                                           
        }
    
                                                                                   
    ?>
                
    




    -
    Edité par laure79 14 février 2019 à 5:44:59

    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2019 à 6:27:21

      Bonjour,

      déjà : pas de htmlspecialchars pour de la sauvegarde de données. Cette méthode est faite pour l'affichage. Ensuite : pas de trim ! Tu n'as pas le droit de modifier le pseudo ou, surtout, le mot de passe qu'on te fournit : le mot de passe peut très bien commencer ou finir par des espaces, et c'est valide ! (ça augmente même probablement sa sécurité, puisque 1) ça l'allonge, 2) ça utilise des caractères dits spéciaux et donc moins courants)

      Pour comprendre où ça coince, fais un var_dump($_POST) à la ligne 16, afin qu'on sache ce qu'il y a dedans. Après tout, mieux vaut vérifier qu'on a un sac avant de chercher à piocher dedans :p

      -
      Edité par Lamecarlate 14 février 2019 à 6:28:13

      • Partager sur Facebook
      • Partager sur Twitter

      Pas d'aide concernant le code par MP, le forum est là pour ça :)

        14 février 2019 à 6:57:39

        Bonjour Lamecarlate,

        Merci, j'ai supprimé mes htmlspecialchars et trim. Mais, je ne comprends pas comment mettre mon var_dump, je ne me suis jamais servie de cette fonction... :(

        • Partager sur Facebook
        • Partager sur Twitter
          14 février 2019 à 7:36:35

          Bonjour,

          C'est incontournable quand on met au point un code d'avoir des traces à certains endroits pour savoir si le déroulement passe à cet endroit et la valeur des variables.

          Le var_dump, le print_r et le classique echo sont des possibilités de traces basiques. Après l'on peut faire un système de log plus sophistiqué ... 

          Dans ton cas, lecture de la doc : http://php.net/manual/fr/function.var-dump.php

          Tu pourrais par exemple placer un var_dump($_POST) en ligne 16 pour voir le tableau associatif : 

          http://php.net/manual/fr/reserved.variables.post.php

          A+

          • Partager sur Facebook
          • Partager sur Twitter
            14 février 2019 à 11:04:39

            Bonjour monkey3d,

            Merci à toi et à Lamecarlate pour votre aide. J'ai trouvé l'erreur sans utiliser le var_dump, il y a avait un problème de point virgule que je n'avais pas trouvé après maintes lectures ! :( Je me pose sur le var_dump dès que possible, ça me sera certainement très utile ! @+

            • Partager sur Facebook
            • Partager sur Twitter
              14 février 2019 à 11:09:05

              Bonne continuation :)

              Pense à marquer ton sujet comme résolu, tu as un bouton pour ça en haut à droite.

              • Partager sur Facebook
              • Partager sur Twitter

              Pas d'aide concernant le code par MP, le forum est là pour ça :)

                15 février 2019 à 3:48:21

                Merci, j'avais oublié.Je m'en occupe tout de suite. Bonne journée.
                • Partager sur Facebook
                • Partager sur Twitter

                Problème de else

                × 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