IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

password_verify d'accord, mais ccomment?


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Février 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 13
    Points : 7
    Points
    7
    Par défaut password_verify d'accord, mais ccomment?
    Salut les gars (et filles, on sait jamais),

    Je bloque sur un problème depuis plusieurs jours, j'ai beau chercher et même trouver, je ne suis pas plus avancé car je ne comprends pas.

    Comme beaucoup de personne qui étaient dans mon cas et qui ont résolu leur problème grâce aux forums, j'ai créé un site avec bdd et un espace membre. L'enregistrement est ok, ça se passe bien, le mdp est hashé avec password_hash.

    Là où ça se corse pour moi, mais qui sera évident pour vous je l'imagine, c'est la partie log in avec le password verify.

    J'ai suivi le tuto vidéo sur youtube de PrimFx sauf qu'il utilise sha1 (et oui, ça date de 2015), donc la technique ici n'est plus la même.

    Je sais qu'il faut que je mette un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(password_verify('le mot de passe saisi', 'le mot de pass hashé dans le bdd');
    sauf que je ne sais absolument pas où l'insérer dans mon code. J'ai testé quelques trucs mais je me retrouve avec des erreurs.

    De plus, je ne sais pas comment aller chercher le mot de passe haché dans ma bdd pour le comparer. Est-ce que je dois créer une variable?

    Bref vous l'aurez compris, je suis un peu dépassé et j'aimerais comprendre.

    Voici mon code entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <?php
    session_start();
     
    $bdd = new PDO('mysql:host=127.0.0.1;dbname=calendar', 'root', '');
     
    if(isset($_POST['signin']))
    {
      $mailin = htmlspecialchars($_POST['mailin']);
      $passwordin = $_POST['passwordin'];
      $passwordin = password_verify($passwordin, $hashpass);
      if(!empty($mailin) AND !empty($passwordin))
      {
        $requser = $bdd->prepare("SELECT * FROM members WHERE mail = ? AND password = ?");
        $requser->execute(array($mailin, $passwordin));
        $userexists = $requser->rowCount();
        if($userexists == 1)
        {
          $userinfo = $requser->fetch();
          $_SESSION['id'] = $userinfo['id'];
          $_SESSION['username'] = $userinfo['username'];
          $_SESSION['mail'] = $userinfo['mail'];
          header("Location: profil.php?id=".$_SESSION['id']);
        }
        else
        {
          $error = "Wrong mail or password";
        }
      }
      else
      {
        $error = "Please fill all the fields";
      }
    }
     
    ?>
     
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- META -->
     
        <title>CRIT | Calendar</title>
     
        <!-- CSS -->
        <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
        <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
        <link href="https://fonts.googleapis.com/css?family=Anton" rel="stylesheet">
        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
        <link href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.3.1/css/flag-icon.min.css" rel="stylesheet"/>
        <!-- CSS -->
     
        <!-- Global site tag (gtag.js) - Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=UA-133907448-1"></script>
        <script>
          window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
              gtag('js', new Date());
     
              gtag('config', 'UA-133907448-1');
        </script>
        </head>
     
     
      <body>
          <table class="user">
            <form action="" method="POST">
              <tr>
                <td>
                  <input type="email" placeholder="Username" id="mailin" name="mailin" />
                </td>
              </tr>
              <tr>
                <td>
          		    <input type="password" placeholder="Password" id="passwordin" name="passwordin" />
                </td>
              </tr>
              <tr>
                <td>
          		    <input type="submit" name="signin" value="Sign in" />
                </td>
              </tr>
            </table>
        	</form>
          <?php
          if(isset($error))
          {
            echo $error;
          }
          ?>
      </body>
     
    </html>

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Février 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    J'ai apporté quelques modification au code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
    session_start();
     
    $bdd = new PDO('mysql:host=127.0.0.1;dbname=calendar', 'root', '');
     
    if(isset($_POST['signin']))
    {
      $mailin = htmlspecialchars($_POST['mailin']);
      $passwordin = $_POST['passwordin'];
      if(!empty($mailin) AND !empty($passwordin))
      {
        $requser = $bdd->prepare("SELECT * FROM members WHERE mail = ? AND password = ?");
        $requser->execute(array($mailin, $passwordin));
        $hashpass = $requser->fetch();
        if(password_verify($passwordin, $hashpass['password']))
        {
          $userexists = $requser->rowCount();
          if($userexists == 1)
          {
            $userinfo = $requser->fetch();
            $_SESSION['id'] = $userinfo['id'];
            $_SESSION['username'] = $userinfo['username'];
            $_SESSION['mail'] = $userinfo['mail'];
            header("Location: profil.php?id=".$_SESSION['id']);
          }
          else
          {
            $error = "Wrong mail";
          }
        }
        else
        {
          $error = "Wrong password";
        }
      }
      else
      {
        $error = "Please fill all the fields";
      }
    }
     
    ?>
    Par ailleurs, j'ai mon erreur "mot de passe invalide" qui s'affiche alors que je tape le bon mdp.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Exemple ici.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Février 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Salut jreaux62, merci pour ta réponse.

    J'ai omis de préciser que j'étais débutant en PHP. Du coup le lien que tu m'as envoyé m'a totalement largué...

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par bween Voir le message
    Salut les gars (et filles, on sait jamais),
    Merci

    Le principe de base c'est :
    - à l'insertion : on hache le mot de passe avant de le stocker en base
    - à la vérification : on récupère le mot de passe haché de la base à partir de l'identifiant et on le compare avec le mot de passe reçu via password_verifiy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $requser = $bdd->prepare("SELECT * FROM members WHERE mail = ? ");
        $requser->execute(array($mailin));
        $hashpass = $requser->fetch();
        if(password_verify($passwordin, $hashpass['password']))
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Février 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Hello Celira, merci beaucoup pour cette réponse. Je constate que ne j'étais pas très loin de la solution!

    Tout se passe correctement, je suis redirigé vers la page profil.php, sauf que.

    La page est blanche, et l'url n'affiche rien pour l'id : http://localhost/TEST/profil.php?id=

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    <?php
    session_start();
     
    $bdd = new PDO('mysql:host=127.0.0.1;dbname=calendar', 'root', '');
     
    if(isset($_GET['id']) AND $_GET['id'] > 0) {
       $getid = intval($_GET['id']);
       $requser = $bdd->prepare('SELECT * FROM members WHERE id = ?');
       $requser->execute(array($getid));
       $userinfo = $requser->fetch();
    ?>
     
    ?>
     
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- META -->
     
        <title>CRIT | Calendar</title>
     
        <!-- CSS -->
        <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
        <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
        <link href="https://fonts.googleapis.com/css?family=Anton" rel="stylesheet">
        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
        <link href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.3.1/css/flag-icon.min.css" rel="stylesheet"/>
        <!-- CSS -->
     
        <!-- Global site tag (gtag.js) - Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=UA-133907448-1"></script>
        <script>
          window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
              gtag('js', new Date());
     
              gtag('config', 'UA-133907448-1');
        </script>
        </head>
     
     
      <body>
        <div align="center">
           <h2>Profil de <?php echo $userinfo['name']; ?></h2>
           <br /><br />
           Pseudo = <?php echo $userinfo['username']; ?>
           <br />
           Mail = <?php echo $userinfo['mail']; ?>
           <br />
           <?php
           if(isset($_SESSION['id']) AND $userinfo['id'] == $_SESSION['id']) {
           ?>
           <br />
           <a href="editionprofil.php">Editer mon profil</a>
           <a href="deconnexion.php">Se déconnecter</a>
           <?php
           }
           ?>
         </div>
      </body>
     
    </html>
    <?php
    }
    ?>
    EDIT : D'ailleurs, lorsque je rentre une adresse mail non enregistrée, il m'affiche toujours le message "wrong password" et pas "wrong email", j'ai l'impression qu'il ne fait plus la vérification. Ou alors je dois vérifier l'email avant le mot de passe?

    EDIT 2 : C'était bien ça, j'ai inversé la vérification du mot de passe et la vérification de l'email.

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Attention, tu appelles deux fois la méthode fetch sur la même requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $hashpass = $requser->fetch();
        if(password_verify($passwordin, $hashpass['password']))
        {
          $userexists = $requser->rowCount();
          if($userexists == 1)
          {
            $userinfo = $requser->fetch();
    Une seule fois suffit, la 2e fois va te retourner un tableau vide et tu ne pourras pas récupérer les données.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Février 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2019
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Celira, je ne saurais jamais comment te remercier. C'est la première fois que quelqu'un me répond simplement et efficacement sur un forum de ce genre.

    En deux posts tu as réglé mon problème, de manière hyper simple, et j'ai compris ce que tu me disais. Mille mercis!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Erreur du a un nombre de parametres invalide: oui d'accord mais
    Par Errebey dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/01/2014, 09h40
  2. Réponses: 4
    Dernier message: 11/11/2006, 19h50
  3. Réponses: 11
    Dernier message: 17/03/2003, 10h56
  4. [Choix SGBD] Application mono-poste mais beaucoup de données
    Par Wavyx dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 16/03/2003, 18h24
  5. Lancer un programme, mais sur une autre machine
    Par GOUGOU1 dans le forum Réseau
    Réponses: 12
    Dernier message: 08/12/2002, 20h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo