Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Password_verify qui ne marche pas

Sujet résolu
    15 octobre 2020 à 11:04:35

    Bonjour à tous,

    Je suis face à un problème dans le cadre de la création de l'espace membre du cours PHP. En effet la fonction password_verifiy me retourne faux et je ne comprends pas pourquoi car les mots de passe correspondent. 

    Ci dessous :

    1 - Le code de ma page connexion_post.php

    2 - Le code de hachage de inscription_post.php

    $req=$bdd->prepare('SELECT id,password FROM membres WHERE pseudo=:pseudo');
    $req->execute(array(
    'pseudo'=>$_POST['pseudo']));
    $pseudo=$req->fetch();
    
    
    
    if (!$pseudo) {
    	header('location:connexion.php?error=wrong');
    	exit;
    }
    else
    {
    	if(password_verify($_POST['password'], $pseudo['password']))
    	{
    		session_start();
    		$_SESSION['id']=$pseudo['id'];
    		$_SESSION['pseudo']=$_POST['pseudo'];
    		header('location:index.php?a=connect');
    		exit;
    	}
    	elseif(password_verify($_POST['password'], $pseudo['password'])==false)
    	{
    		header('location:connexion.php?error=wrong2');
    		exit;
    	}
    }
    	$pass_hache = password_hash($_POST['password'], PASSWORD_DEFAULT);
    		$insert=$bdd->prepare('INSERT INTO membres (pseudo,password,groupe,email,date_inscription) VALUES(:pseudo,:password,0,:email,NOW()) ');
    		$insert->execute(array(
    			':pseudo'=>$_POST['pseudo'],
    			':password'=>$pass_hache,
    			':email'=>$_POST['email']));
    		header('location:connexion.php');
    		exit;


    Je vous remercie d'avance pour votre aide et votre attention :)

    • Partager sur Facebook
    • Partager sur Twitter
      15 octobre 2020 à 11:13:31

      Salut,

      Quel est la taille de la colonne qui permet de stocker le mot de passe ?

      Affiche juste avant la condition if password_verify les 2 valeurs avec un var_dump($_POST['password'], $pseudo['password']);

      Aussi pas besoin de faire un elseif, un else suffira

      • Partager sur Facebook
      • Partager sur Twitter
        15 octobre 2020 à 14:32:31

        Hello,

        Merci pour ta réponse :)

        La colonne password est de type "text" donc pas de limite de taille si j'ai bien compris.

        Pour le var_dump ça me donne ça : string(4) "root" string(60) "$2y$10$gw3pQ8WzQxpQaVf9WIK75OHUw42HEBtBTgyGUhceWgBOfny0r.sq."


        Mais je vois pas trop en quoi ça m'aide ^^


        Et le elseif c'était pour faire des tests pour voir si ça renvoyait false ou juste si ça partait sur un else car la fonction marchait pas ou quelque chose du genre.


        Dans l'attente de te lire,


        Martin

        • Partager sur Facebook
        • Partager sur Twitter
          15 octobre 2020 à 15:03:25

          Salut,

          passe la taille à 255, tu as un hash tronqué je pense ;)

          • Partager sur Facebook
          • Partager sur Twitter
            15 octobre 2020 à 15:17:37

            Bonjour Christouphe,

            Merci d'avoir pris le temps de me répondre, j'ai donc mis mon hash en Varchar (255) mais toujours le même problème... Je n'y comprends rien, pourtant c'est sûrement un petit truc tout bête...

            Ci-joint le lien de mon site que j'ai herbergé afin de vous fournir le plus d'informations possibles : http://legioncerbere.go.yj.fr/index.php

            Je vous partage la structure de ma BDD juste en dessous : 

            -
            Edité par MartinHermouey 15 octobre 2020 à 15:19:15

            • Partager sur Facebook
            • Partager sur Twitter
              15 octobre 2020 à 15:24:16

              Salut

              Je précise à tout hasard qu'augmenter la taille des colonnes ne changera pas leur contenu. S'il était d'aventure tronqué, les données sont perdues.

              • Partager sur Facebook
              • Partager sur Twitter
                15 octobre 2020 à 15:27:51

                Je viens de faire un test rapide avec ton hash et en effet celui-ci ne marche pas :

                http://sandbox.onlinephpfunctions.com/code/51e74bad289c5b7b50eeb6d20db2be70bbf50754

                Il faut tester au niveau de l'inscription déjà est-ce que tout est bon puis voir avec la connexion

                Edit: En testant ton formulaire et en y enlevant les champs j'ai le droit à une erreur 500 signe d'une erreur dans le code.

                Je soupçonne le manque de vérification des champs du formulaire.

                -
                Edité par quenti77 15 octobre 2020 à 15:30:45

                • Partager sur Facebook
                • Partager sur Twitter
                  15 octobre 2020 à 15:35:29

                  Ymox a écrit:

                  Salut

                  Je précise à tout hasard qu'augmenter la taille des colonnes ne changera pas leur contenu. S'il était d'aventure tronqué, les données sont perdues.


                  C'était en sous entendu de mon intervention ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 octobre 2020 à 15:40:22

                    Ymox a écrit:

                    Salut

                    Je précise à tout hasard qu'augmenter la taille des colonnes ne changera pas leur contenu. S'il était d'aventure tronqué, les données sont perdues.

                    Bonjour Ymox, je m'en doutais j'avais bel et bien supprimé le contenu de ma bdd et m'étais inscrit à nouveau mais merci quand même pour votre réponse :) 

                    quenti77 a écrit:

                    Je viens de faire un test rapide avec ton hash et en effet celui-ci ne marche pas :

                    http://sandbox.onlinephpfunctions.com/code/51e74bad289c5b7b50eeb6d20db2be70bbf50754

                    Il faut tester au niveau de l'inscription déjà est-ce que tout est bon puis voir avec la connexion

                    Edit: En testant ton formulaire et en y enlevant les champs j'ai le droit à une erreur 500 signe d'une erreur dans le code.

                    Je soupçonne le manque de vérification des champs du formulaire.

                    -
                    Edité par quenti77 il y a 5 minutes


                    Bonjour quenti77,

                    Je ne suis pas sûr de comprendre, pouvez-vous m'expliquer plus en détail. Cet espace membre étant mon premier projet en php, j'ai donc très peu d'expérience en vérification de formulaire.

                    Ce que j'ai mis en place : 

                    - type = password

                    - type = email

                    - on vérifie si le pseudo est dans la bdd côté serveur et sinon on renvoi à la page de connexion avec un message d'erreur

                    - on vérifie que les deux mdp sont les mêmes côté serveur et sinon pareil on renvoi à la page de connexion

                    Merci d'avance pour ta réponse,

                    EDIT :  le code du formulaire

                    		<?php
                    				if(isset($_GET['error']) AND $_GET['error']=='mdp')
                    				{
                    					echo "<p class=error>Les mots de passe saisis ne correspondent pas</p>";	
                    				}
                    				if(isset($_GET['error']) AND  	$_GET['error']=='pseudo')
                    				{
                    					echo "<p class=error>Le pseudo saisi existe déja. Veuillez-en essayer un autre</p>";
                    				}
                    				?>
                    				<form method="post" action="inscription_post.php">
                    					<label for="pseudo">Pseudo : </label><input id="pseudo" type="text" name="pseudo" required placeholder="Votre pseudo" /><br/>
                    					<label for="password">Mot de passe : </label><input id="password" type="password" name="motdepasse" required placeholder="Mot de passe" /><br/>
                    					<label for="cpassword">Confirmation du mot de passe : </label><input id="cpassword" type="password" name="cmotdepasse" required placeholder="Mot de passe" /><br/>
                    					<label for="email">Email : </label><input id="email" type="email" required name="email"  placeholder="Adresse mail" /><br/>
                    					<input type="checkbox" class="chekbox" name="cgu" id="cgu" required><label class="textcheckbox" for="cgu"> J'ai lu et j'accepte les règles de confidentialité liées à mes Informations et Cookies</label><br/>
                    					<input id="valider" type="submit" value="Valider" />
                    				</form>
                    			</p>
                    			</article>

                    Le code de ma page inscription_post.php : 

                    if($_POST['password']==$_POST["cpassword"])
                    {
                    	$verif=$bdd->prepare('SELECT pseudo FROM membres WHERE pseudo=:pseudo');
                    	$verif->execute(array('pseudo'=>$_POST['pseudo']));
                    	$pseudo=$verif->fetch();
                    	if($pseudo)
                    	{
                    		header('location:inscription.php?error=pseudo');
                    	}
                    	else
                    	{
                    		$pass_hache = password_hash($_POST['password'], PASSWORD_DEFAULT);
                    		$insert=$bdd->prepare('INSERT INTO membres (pseudo,password,groupe,email,date_inscription) VALUES(:pseudo,:password,0,:email,NOW()) ');
                    		$insert->execute(array(
                    			':pseudo'=>$_POST['pseudo'],
                    			':password'=>$pass_hache,
                    			':email'=>$_POST['email']));
                    		header('location:connexion.php');
                    		exit;
                    	
                    	exit;
                    	}
                    }	
                    else
                    {
                    	header('location:inscription.php?error=mdp');
                    	exit;
                    }
                    ?>




                    Martin



                    -
                    Edité par MartinHermouey 15 octobre 2020 à 15:44:17

                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 octobre 2020 à 15:52:59

                      name="motdepasse" pour $_POST['password'] = ça marchera jamais (enfin, si, mais le mot de passe pour le hash sera systématiquement '')

                      Pareil pour $_POST["cpassword"] pour name="cmotdepasse"

                      -
                      Edité par julp 15 octobre 2020 à 15:54:25

                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 octobre 2020 à 16:03:05

                        julp a écrit:

                        name="motdepasse" pour $_POST['password'] = ça marchera jamais (enfin, si, mais le mot de passe pour le hash sera systématiquement '')

                        Pareil pour $_POST["cpassword"] pour name="cmotdepasse"

                        -
                        Edité par julp il y a 4 minutes


                        Croyez le ou non mais je vous promets que je m'étais relu. Comme quoi quand tu as le nez dedans des fois.....

                        En tout cas un énorme merci pour ton aide. Et désolé de vous avoir un peu tous fait perdre votre temps.

                        Merci mille fois à tous cette communautée qui est quand même une des plus réactives :) 

                        À bientot :)

                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 octobre 2020 à 16:43:59

                          Tu aurais dû le détecter plus tôt si :

                          1. tu développais avec toutes les erreurs PHP affichées (notices comprises, sur ton code tu aurais dû le voir de suite par des notice: undefined index (c)password)
                          2. tu avais vérifier que tu recevais bien ce que tu penses à l'aide d'un var_dump($_POST);
                          3. tu testais d'abord l'existence (isset), a minima, de ces variables POST

                          -
                          Edité par julp 15 octobre 2020 à 16:44:24

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Problème Password_verify qui ne marche pas

                          × 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