Partage
  • Partager sur Facebook
  • Partager sur Twitter

Login mot de passe

    18 janvier 2018 à 14:58:44

    Bonjour,

    je cherche comment faire la connexion avec le login et le mot de passe en PHP mais je sais pas comment faire.

    Je sais qu'en c# c'est while(read.HasRow()){} mais en php je sais pas.

    //Procédure
    function login($nomUtilisateur,$motPasse,$bdd){
            $selUtilMpas=$bdd->query('select * from membre where nomUtilisateur=:username and motPasse=MD5(:password)');
            $selUtilMpas->execute(array(
               'username' => $nomUtilisateur,
               'password' => $motPasse
            ));
            
        }
    <!-- Page de connexion -->
    <div class="jumbotron">
        <h3>Se connecter</h3>
        <table class="table table-striped">
            <tbody>
                <form method="post" name="login" action="index.php?page=login"
                    <tr>
                        <th scope="row"><label>Nom d'utilisateur: </label></th>
                        <td><input type="text" name="username"/><br/></td>
                    </tr>
                    <tr>
                        <th scope="row"><label>Mot de passe: </label></th>
                        <td><input type="password" name="password"/><br/></td>
                    </tr>
                    <tr>
                        <th scope="row"></th><td><input type="submit" name="valider" value="Connexion"/></td>
                    </tr>
                </form>
            </tbody>      
        </table>
    <?php
        if(isset($_POST['valider'])){
            if(empty($_POST["username"]) || empty($_POST["password"])){
                echo "<p1>Veuillez remplir tout les champs</p1>";
            }
            else{
                //si le pseudo est dans la base alors se connecter si il existe pas alors il y a un message d'erreur
            }
        }
    ?> <div>
    




    • Partager sur Facebook
    • Partager sur Twitter
      18 janvier 2018 à 15:18:15

      Une fois que tu as récupéré ton username + password, tu lances une requête sur ta base de données.

      Attention à bien vérifier la sécurité : ajoute au moins un "htlmspecialchars" ou un regex avant de lancer ta requête.

      • Partager sur Facebook
      • Partager sur Twitter
        18 janvier 2018 à 15:33:12

        L'htmlspecialchars c'est à l'affichage de données donc pas besoin ici,

        Pour ce qui est du sujet je te conseille de suivre le cour PHP/MySQL d'OpenClassroom il y a un TP vers la fin qui explique comment créer un espace membres : https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/tp-creer-un-espace-membres

        -
        Edité par Fr0stFR 18 janvier 2018 à 15:33:51

        • Partager sur Facebook
        • Partager sur Twitter
        étudiant en BTS SIO (SLAM) en Alternance, je débute dans le dev web, mon premier site d'entrainement, je suis ouvert à toute suggestions.
          18 janvier 2018 à 18:39:47

          Voila j'ai fais sa, le mot de passe de l'utilisateur admin est admin mais il ne le reconnait pas.

          <div class="jumbotron">
              <h3>Se connecter</h3>
              <table class="table table-striped">
                  <tbody>
                      <form method="post" name="login" action="index.php?page=login"
                          <tr>
                              <th scope="row"><label>Nom d'utilisateur: </label></th>
                              <td><input type="text" name="username"/><br/></td>
                          </tr>
                          <tr>
                              <th scope="row"><label>Mot de passe: </label></th>
                              <td><input type="password" name="password"/><br/></td>
                          </tr>
                          <tr>
                              <th scope="row"></th><td><input type="checkbox" name="savelogin" id="savelogin"/>
                              <label for="savelogin">Connexion automatique</label></td>
                          </tr>
                          <tr>
                              <th scope="row"></th><td><input type="submit" name="valider" value="Connexion"/></td>
                          </tr>
                      </form>
                  </tbody>      
              </table>
          <?php
              
              if(isset($_POST['valider'])){
                  $user=$_POST['username'];
                  $password=$_POST['password'];
                  if(empty($_POST["username"]) || empty($_POST["password"])){
                      echo "<p1>Veuillez remplir tout les champs</p1>";
                  }
                  else{
                      //si le pseudo est dans la base alors se connecter si il existe pas alors il y a un message d'erreur
                      //Hachage du mot de passe
                      $pass_hashed=password_hash($password,PASSWORD_DEFAULT);
                  
                      //Vérification des identifiants
                      $requete=$bdd->prepare('select * from membre where nomUtilisateur=:username and motPasse=:password');
                      $requete->execute(array(
                          'username' => $user,
                          'password' => $pass_hashed
                      ));
                  
                      $resultat=$requete->fetch();
                      
                      
                      if (!$resultat){
                          echo "<p1>Votre nom d'utilisateur et/ou votre mot de passe est incorrect</p1>";
                      }
                      else{
                          session_start();
                          $_SESSION['idMembre'] = $resultat['idMembre'];
                          $_SESSION['nomUtilisateur']= $resultat['nomUtilisateur'];
                          echo $_SESSION['nomUtilisateur'];
                      }
                  }
              }
          ?> <div>
          



          • Partager sur Facebook
          • Partager sur Twitter
            18 janvier 2018 à 18:53:42

            La paire user/password existe bien dans la table "membre" ?

            • Partager sur Facebook
            • Partager sur Twitter
              18 janvier 2018 à 19:50:46

              On n'utilise pas password_hash pour une vérification mais password_verify
              • Partager sur Facebook
              • Partager sur Twitter
              le bienfait n'est jamais perdu
                19 janvier 2018 à 13:13:38

                Bonjour,

                J'ai vu le problème, en effet le mot de passe de admin est admin par défaut mais lorsque je fais un echo $pass_hashed, ça donne jamais le même hashage.

                 1ère tentative mot de passe : admin

                 2ème tentative mot de passe: admin

                hashage dans la base avec le même mot de passe

                -
                Edité par SébastienBunel 19 janvier 2018 à 13:14:01

                • Partager sur Facebook
                • Partager sur Twitter
                  19 janvier 2018 à 13:15:25

                  C'est pourquoi on utilise password_verify
                  • Partager sur Facebook
                  • Partager sur Twitter
                  le bienfait n'est jamais perdu
                    19 janvier 2018 à 13:54:55

                    J'arrive pas ça me met une autre erreur.

                    <div class="jumbotron">
                        <h3>Se connecter</h3>
                        <table class="table table-striped">
                            <tbody>
                                <form method="post" name="login" action="index.php?page=login"
                                    <tr>
                                        <th scope="row"><label>Nom d'utilisateur: </label></th>
                                        <td><input type="text" name="username"/><br/></td>
                                    </tr>
                                    <tr>
                                        <th scope="row"><label>Mot de passe: </label></th>
                                        <td><input type="password" name="password"/><br/></td>
                                    </tr>
                                    <tr>
                                        <th scope="row"></th><td><input type="checkbox" name="savelogin" id="savelogin"/>
                                        <label for="savelogin">Connexion automatique</label></td>
                                    </tr>
                                    <tr>
                                        <th scope="row"></th><td><input type="submit" name="valider" value="Connexion"/></td>
                                    </tr>
                                </form>
                            </tbody>      
                        </table>
                    <?php
                        
                        if(isset($_POST['valider'])){
                            $user=$_POST['username'];
                            $password=$_POST['password'];
                            if(empty($_POST["username"]) || empty($_POST["password"])){
                                echo "<p1>Veuillez remplir tout les champs</p1>";
                            }
                            else{
                      
                                $prerequete=$bdd->prepare('select motPasse from membre where nomUtilisateur=:user');
                                $prerequete->execute(array(
                                   'user' => $user 
                                ));
                                $motPassehash=$prerequete->fetch();
                                if(password_verify($password, $motPassehash)){
                                    echo "mot de passe valide";
                                }
                                else{
                                    echo "mot de passe incorrect";
                                }
                                        
                                //si le pseudo est dans la base alors se connecter si il existe pas alors il y a un message d'erreur
                                /*Hachage du mot de passe
                                $pass_hashed=  password_hash($_POST["password"],PASSWORD_DEFAULT);
                                echo $pass_hashed;*/
                                //Vérification des identifiants
                                $requete=$bdd->prepare('select * from membre where nomUtilisateur=:username and motPasse=:password');
                                $requete->execute(array(
                                    'username' => $user,
                                    'password' => $password
                                ));
                            
                                $resultat=$requete->fetch();
                                echo $resultat;
                                
                                
                                if (!$resultat){
                                    echo "<p1>Votre nom d'utilisateur et/ou votre mot de passe est incorrect</p1>";
                                }
                                else{
                                    session_start();
                                    $_SESSION['idMembre'] = $resultat['idMembre'];
                                    $_SESSION['nomUtilisateur']= $resultat['nomUtilisateur'];
                                    echo $_SESSION['nomUtilisateur'];
                                }
                            }
                        }
                    ?> <div>
                    



                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 janvier 2018 à 14:25:07

                      Traduction du message d'erreur : password_verify demande deux string, alors que tu lui passe une String puis un array.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 janvier 2018 à 15:30:06

                        Pourquoi faire 2 vérifications surtout que la 2ème est fausse.

                        - On ne fait pas $xxx = $_POST['xxxx']; avant de faire le test avec empty mais après quand la condition est vraie dans ton cas dans le else

                        - En utilisant || le pseudo peut être vide ou le mot de passe

                        - On peut avoir dans le else un truc comme ça

                        $prerequete = $bdd->prepare('SELECT idMembre, nomUtilisateur, motPasse FROM membre WHERE nomUtilisateur = :nomUtilisateur');
                        $prerequete->execute(['nomUtilisateur' => $_POST['username']]);
                        
                        if ($resultat = $prerequete->fetch() && password_verify($_POST['password'], $resultat['motPasse'])) {
                            //Tu mets tes données en session sauf le mot de passe
                        } else {
                            // Erreur de connexion
                        }

                        - Déplace ton code PHP avant ton code HTML

                        - Tu utilises boostrap, tu as les form-group pour les formulaires surtout pas de table, et je ne pense pas que ça soit le rôle du jumbotron

                        • Partager sur Facebook
                        • Partager sur Twitter
                        le bienfait n'est jamais perdu

                        Login mot de passe

                        × 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