Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur dans la déclaration de variables

Sujet résolu
    14 février 2019 à 19:09:10

    bonsoir ,

    j'ai fais un code pour connecter un membre voici ce que m'affiche mon code : Undefined variable: resultat  on line 18 and 19

    je ne vois pas d'ou pourrait venir mon erreur . 

    Merci d'avance .

    voici mon code :

    <!DOCTYPE html>
    
    <html>
    
    <head>
    
        <title>connexions</title>
    
    </head>
    
    <body>
    
        <?php
    
        try
    
            {
    
                $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
    
            }
    
            catch(Exception $e)
    
            {
    
                die('Erreur : '.$e->getMessage());
    
            }
    
        $nom = $_POST['nom'];
    
        $prenom = $_POST['prenom'];
    
        $pass = password_verify($_POST['pass'], $resultat['pass']);
    
        $isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
    
    
    
    //  Récupération de l'utilisateur et de son pass hashé
    
    $req = $bdd->prepare('SELECT id, nom, prenom, pass FROM membres WHERE nom = :nom AND prenom = :prenom AND pass = :pass');
    
    $req->execute(array(
    
        'nom' => $nom,
    
        'prenom' => $prenom,
    
        'pass' => $pass));
    
    $resultat = $req->fetch();
    
    $req->closeCursor();
    
    
    
    
    
    // Comparaison du pass envoyé via le formulaire avec la base
    
    
    
        if (!$resultat) 
    
        {
    
            session_start();
    
            $_SESSION['id'] = $resultat['id'];
    
            $_SESSION['nom'] = $nom;
    
            $_SESSION['prenom'] = $prenom;
    
            echo 'Vous êtes connecté !';
    
            ?>
    
            <form method="post" action="deconnexions.php">
    
                <input type="submit" value="déconnexion" name="deconnexions.php">
    
            </form><br>
    
            <p>
    
            <a href="voir_clients.php">voir mes clients </a></p>
    
            <p>inscrire un nouveaux client
    
            <a href="new_client.php">oui</a></p>
    
            <?php 
    
        }
    
        else 
    
        {
    
            echo 'Mauvais identifiant ou mot de passe !';
    
        }
    
        ?>
    
    </body>
    
    </html>
    
    
    
            



    -
    Edité par Amilcar.A 16 février 2019 à 20:17:12

    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2019 à 19:22:54

      Bonsoir,

      Tu n'as pas bien compris comment on fait une connexion.

      1/ Est-ce que j'ai bien le prénom et le nom dans $_POST ?

      2/ Si oui alors je vais chercher le mot de pass en bdd correspondant

      3/ Ai-je un résultat ? Si oui alors je fais un password_verify avec le mot de passe de la bdd et celui du formulaire. Si non alors erreur

      4/ Les mots de passe correspondent ? Oui alors je suis connecté

      Je te laisse modifier ton code en conséquences et l'afficher à nouveau

      • Partager sur Facebook
      • Partager sur Twitter
        14 février 2019 à 20:54:11

        je pense avoir compris

        merci de ton conseil, je crois avoir corriger mon erreur (pourrait tu me dire si c'est sa), j'ai modifié la comparaison avec $resultat (ligne 26) bonne nuit :

        <!DOCTYPE html>
        <html>
        <head>
            <title>connexions</title>
        </head>
        <body>
            <?php
            try
                {
                    $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
                }
                catch(Exception $e)
                {
                    die('Erreur : '.$e->getMessage());
                }
            $nom = $_POST['nom'];
            $prenom = $_POST['prenom'];
            $pass = $_POST['pass'];
        //  Récupération de l'utilisateur et de son pass hashé
        $req = $bdd->prepare('SELECT id, nom, prenom, pass FROM membres WHERE nom = :nom AND prenom = :prenom AND pass = :pass');
        $req->execute(array(
            'nom' => $nom,
            'prenom' => $prenom,
            'pass' => $pass));
        
         $isPasswordCorrect = password_verify($_POST['pass'], $resultat = $req->fetch()['pass']);
        // Comparaison du pass envoyé via le formulaire avec la base
        
        
        
            if (!$resultat) 
            {
                session_start();
                $_SESSION['id'] = $resultat['id'];
                $_SESSION['nom'] = $nom;
                $_SESSION['prenom'] = $prenom;
                echo 'Vous êtes connecté !';
                ?>
                <form method="post" action="deconnexions.php">
                    <input type="submit" value="déconnexion" name="deconnexions.php">
                </form><br>
                <p>
                <a href="voir_clients.php">voir mes clients </a></p>
                <p>inscrire un nouveaux client
                <a href="new_client.php">oui</a></p>
                <?php 
            }
            else 
            {
                echo 'Mauvais identifiant ou mot de passe !';
            }
            ?>
        </body>
        </html>
        
                
        • Partager sur Facebook
        • Partager sur Twitter
          14 février 2019 à 20:58:37

          Oui c'est presque ça.

          1/ Il te faut quand faire un isset sur $_POST pour voir que tu es bien du contenu et mieux faire un !empty()

          2/ A mon avis la ligne 26 va planter car pas sur que tu puisses faire cela sur le fetch.

          3/ Reprend cette dernière ligne afin d'avoir juste $resul... = $req->fetch et tu feras le test du mot de passe à l'intérieur de ton if pour !$resultat

          4/ Enfin tu ne tests pas $isPass.... pour voir si le mdp est correct. Donc dans tous les cas, tu seras quand même connecté.

          • Partager sur Facebook
          • Partager sur Twitter
            14 février 2019 à 21:01:40

            merci de me conseiller : 

            mais je dois aller dormir (j'ai cour demain ;) ) merci encore je mettrait tes conseils en applications demain .

            Bonne nuit ;)

            • Partager sur Facebook
            • Partager sur Twitter
              14 février 2019 à 21:49:46

              Bonjour,

              Mauvais titre

              Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

              Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

              De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

              Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

              Pour modifier votre titre, éditez le premier message de votre sujet.

              (titre originel : variables)

              • Partager sur Facebook
              • Partager sur Twitter

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

                16 février 2019 à 18:12:14

                salut , 

                sa fais plusieurs fois que je fais tes conseils mais sa ne marche pas (même en mettant le mauvais mot de passe il se connecte comme tu me l'avais dis )

                merci d'avance 

                voici un des test de mon code :

                <!DOCTYPE html>
                <html>
                <head>
                    <title>connexions</title>
                </head>
                <body>
                    <?php
                    try
                        {
                            $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
                        }
                        catch(Exception $e)
                        {
                            die('Erreur : '.$e->getMessage());
                        }
                    $nom = $_POST['nom'];
                    $prenom = $_POST['prenom'];
                    $pass = $_POST['pass'];
                //  Récupération de l'utilisateur et de son pass hashé
                $req = $bdd->prepare('SELECT id, nom, prenom, pass FROM membres WHERE nom = :nom AND prenom = :prenom AND pass = :pass');
                $req->execute(array(
                    'nom' => $nom,
                    'prenom' => $prenom,
                    'pass' => $pass));
                $resultat = $req->fetch();;
                $isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
                 
                 
                    if (!$resultat = $req->fetch()) 
                    {
                       
                        $isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
                 
                        session_start();
                        $_SESSION['id'] = $resultat['id'];
                        $_SESSION['nom'] = $nom;
                        $_SESSION['prenom'] = $prenom;
                        echo 'Vous êtes connecté !';
                        ?>
                        <form method="post" action="deconnexions.php">
                            <input type="submit" value="déconnexion" name="deconnexions.php">
                        </form><br>
                        <p>
                        <a href="voir_clients.php">voir mes clients </a></p>
                        <p>inscrire un nouveaux client
                        <a href="new_client.php">oui</a></p>
                        <?php 
                    }
                    else 
                    {
                        $isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
                        echo 'Mauvais identifiant ou mot de passe !';
                    }
                    ?>
                </body>
                </html>
                
                        
                        



                • Partager sur Facebook
                • Partager sur Twitter
                  16 février 2019 à 20:10:18

                  Non, ajouter juste "erreur" avant "variables" n'en fait pas un titre correct. Merci de relire mon message, et notamment la partie en gras.
                  • Partager sur Facebook
                  • Partager sur Twitter

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

                    17 février 2019 à 0:24:46

                    Aurélien.C a écrit:

                    Oui c'est presque ça.

                    1/ Il te faut quand même faire un isset sur $_POST pour voir que tu es bien du contenu et mieux faire un !empty()

                    2/ A mon avis la ligne 26 va planter car pas sur que tu puisses faire cela sur le fetch.

                    3/ Reprend cette dernière ligne afin d'avoir juste $resul... = $req->fetch et tu feras le test du mot de passe à l'intérieur de ton if pour !$resultat

                    4/ Enfin tu ne tests pas $isPass.... pour voir si le mdp est correct. Donc dans tous les cas, tu seras quand même connecté.



                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 février 2019 à 22:13:24

                      je suis désolé je suis débutant et je ne vois pas ou tu veux en venir , je comprends que :

                      - il faut faire un isset() sur les $_POST et mettre en condition (à la place de !$resultat) !empty()

                      - les mots de passe seront tester dans les boucles est mettre que $resultat = $req->fetch()

                      voici un petit test (désolé de ne pas comprendre ;) ) :

                      <!DOCTYPE html>
                      <html>
                      <head>
                          <title>connexions</title>
                      </head>
                      <body>
                          <?php
                          try
                              {
                                  $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
                              }
                              catch(Exception $e)
                              {
                                  die('Erreur : '.$e->getMessage());
                              }
                          $nom = $_POST['nom'];
                          $prenom = $_POST['prenom'];
                          $pass = $_POST['pass'];
                          if (isset($_POST['nom']))
                          {
                       //verification
                      //  Récupération de l'utilisateur et de son pass hashé
                      $req = $bdd->prepare('SELECT id, pass FROM personne_physique WHERE nom = :nom AND prenom = :prenom AND pass = :pass');
                      $req->execute(array(
                          'nom' => $nom,
                          'prenom' => $prenom,
                          'pass' => $pass));
                      }
                      $resultat= $req->fetch();
                      $isPasswordCorrect = password_hash($_POST['pass'], PASSWORD_DEFAULT);
                       
                      // Comparaison du pass envoyé via le formulaire avec la base
                      
                      
                      
                          if ($_POST['pass'] != $resultat) 
                          {
                              $isPasswordCorrect = password_verify($_POST['pass'] ,$resultat = $req->fetch());
                              echo 'Mauvais identifiant ou mot de passe !';   
                          }
                          elseif ($_POST['pass'] == $isPasswordCorrect)
                          {
                              $isPasswordCorrect = password_verify($_POST['pass'] ,$resultat = $req->fetch());
                              
                              session_start();
                              $_SESSION['id'] = $resultat['id'];
                              $_SESSION['nom'] = $nom;
                              $_SESSION['prenom'] = $prenom;
                              echo 'Vous êtes connecté !';
                              ?>
                              <form method="post" action="deconnexions.php">
                                  <input type="submit" value="déconnexion" name="deconnexions.php">
                              </form><br>
                              <p>
                              <a href="voir_clients.php">voir mes clients </a></p>
                              <p>inscrire un nouveaux client
                              <a href="new_client.php">oui</a></p>
                              <?php 
                          }
                          ?>
                      </body>
                      </html>
                      
                              
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Erreur dans la déclaration de variables

                      × 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