Vérification mot de passe et pseudo (PHP - MySql)
Bonjour à tous,
j'ai créé une page PHP pour inscription visiteur et une page pour identification qui renvoie vers une page de vérification de mot de passe et du pseudo qui compare les identifiants aux ceux stockés dans la base de données MySql .
Le code de cette dernière est le suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
$objetpdo =new PDO('mysql:host=dbXXXXXXXXX.hosting-data.XX;dbname=dbXXXXXXX','XXXXXXXX','XXXXXXXXXXX');
$pdostat=$objetpdo->prepare('SELECT * FROM inscription');
$executeEstBon=$pdostat->execute();
$requete=$pdostat->fetchall();
foreach($requete as $donnee):
if ($_POST['pass'] ==$donnee['motpasse'] && $_POST['pseudo']==$donnee['pseudo']){
header("location:passBon.php");
}
else{
header("location:passFaux.php");
}
endforeach;
?> |
ce code fonctionne bien sauf qu'il ne prend en compte que la dernière colonne dans la base des données (cad: le dernier inscrit). Si je supprime cette dernière colonne, il prend en compte celle d'avant qui devient la dernière sur la liste.
Quelqu'un pourrait m'aider svp.
Vérification mot de passe et pseudo (PHP - MySql)
Merci pour la réponse Jreaux62.
Vérification mot de passe et pseudo (PHP - MySql)
Bonjour à tous,
j'ai un souci avec la récupération du mot de passe haché dans une base de donnée de membres.
Chaque fois que m'identifie, je reçois un message me disant: "Pseudo ou mot de passe incorrect". Dans la base de données j'ai bien le mot de passe "$hash".
$2y$10$sYbqY.fVbU2Hz
Voici le code des 3 pages:
page1:
Code:
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
|
<!DOCTYPE html>
<html>
<head>
<title>base de données membres</title>
</head>
<body>
<h2>Enregistrement</h2>
<form action="connexion.php" method="POST">
<label>Identifiant :</label>
<input type="text" name="username" required /><br /><br />
<label>Mot de passe :</label>
<input type="password" name="password1" required /><br /><br />
<label>Retapez mot de passe :</label>
<input type="password" name="password2" required /><br /><br />
<input type="submit" />
</form>
<br /><hr />
<h2>Connexion</h2>
<form action="identification.php" method="POST">
<label>Identifiant :</label>
<input type="text" name="username" required /><br /><br />
<label>Mot de passe :</label>
<input type="password" name="password1" required /><br /><br />
<input type="submit" name="valider" />
</form>
</body>
</html> |
page2 qui insère les données dans la base
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
error_reporting(E_ALL);
ini_set("display_errors", 1);
$objetpdo =new PDO('mysql:host=dbxxxxxxxxxx.hosting-data.io;dbname=dbsxxxxxxx','dbuxxxx','xxxxxxxx');
if(isset($_POST["username"]) && isset($_POST["password1"]) && isset($_POST["password2"])){
if($_POST["password1"] == $_POST["password2"]){
$hash = password_hash($_POST["password1"],PASSWORD_DEFAULT);
$pdostat = $objetpdo->prepare('INSERT INTO basemotpasse (username, password1) VALUES(:username, :password1);');
$pdostat->bindvalue(':username',$_POST['username'],PDO::PARAM_STR);
$pdostat->bindvalue(':password1',$hash,PDO::PARAM_STR);
$pdostat->execute();
header('Location: connexion.php');
exit();
}
}
?> |
page3 qui traite la requête:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
<?php
$objetpdo =new PDO('mysql:host=dbxxxxxxxxx.hosting-data.io;dbname=dbsxxxxxx','dbuxxxxxx','xxxxxxxxx');
if(isset($_POST['username']) && isset($_POST['password1'])){
$pdostat = $objetpdo->prepare('SELECT password1 FROM basemotpasse WHERE username = :username');
$pdostat->bindvalue(':username',$_POST['username'],PDO::PARAM_STR);
$pdostat->bindvalue(':password1',$hash,PDO::PARAM_STR);
$pdostat->execute();
$result = $pdostat->fetch();
$correctPassword = password_verify($_POST['password1'],$hash);
echo password_verify($_POST['password1'],$hash);
if($correctPassword){
echo "Bienvenue sur le site ".$_POST['username'];
}
else{
echo "Identifiant et/ou mot de passe incorrect";
}
}
?> |
pourriez-vous me dire pourquoi le mot de passe haché ne correspond pas au mot de passe d'identification, svp ?
Merci par avance.
Vérification mot de passe et pseudo (PHP - MySql)
Merci beaucoup pour ta gentillesse et ton attention Jreaux62,
J'ai cru comprendre que l'on hachait un mot de passe pour le protéger en cas d'intrusion malintentionnée dans la base de données, tout en laissant la possibilité aux membres de s'identifier lors de la connexion. Maintenant je saisi l'esprit de cette démarche. Mais alors comment un visiteur peut-il se connecter avec un mot de passe qu'il a créé si ce même mot de passe est refusé ??!
Merci encore
Vérification mot de passe et pseudo (PHP - MySql)
Bonjour Jreaux62,
pardon de te déranger encore avec mes histoires. J'ai appliqué les codes que tu m'as envoyés. Cela fonctionne sauf que au moment où je me suis connecté j'ai rçu le message suivant:
Citation:
Notice: Undefined variable: row in /homepages/34/d793616889/htdocs/exemple_inscription_connexion.php on line 29 qui correspond à cette ligne dans le code: $_SESSION['username'] = $row['username'];
du coup j'ai ajouté $row devant $pdostat->execute(); comme suit: $row=$pdostat->execute(); // (LIGNE 25).
ça fonctionne sans encombre et je parviens à ouvrir l'espace membre. Lorsque j'essaie d'accéder à l'espace membre il me redirige vers la page connexion comme prévu grâce à include protection_page.php.
Sauf que j'ai toujours le même problème lors de la connexion. Je n'arrive pas à me connecter car le message 'Identifiant et/ou mot de passe incorrect.' persiste.
Je suis bloqué. Je te demande pardon.
Vérification mot de passe et pseudo (PHP - MySql)
Bonjour,
j'ai appliqué les modifications. Il n'y a plus de message d'erreur.
Par contre le problème de connexion demeure inchangé. Je parviens à ouvrir une session lors de l'inscription, mais il est impossible de me connecter par la suite car il ne reconnait pas le mot de passe qui, pourtant, existe dans la base des données (haché)
je reçois le message suivant:
erreur : mot de passe : xxxx
Identifiant et/ou mot de passe incorrect.
Vérification mot de passe et pseudo (PHP - MySql)
Salut Jreaux62,
hier, pour comparer le mot de passe '$_POST['password1']' au mot de passe haché j'ai fait un essai en ajoutant une variable $hash :
Code:
1 2
|
$hash = password_hash($_POST["password1"],PASSWORD_DEFAULT); |
ensuite dans la partie connexion j'ai introduit ceci:
Code:
1 2
|
if( password_verify($_POST['password1'], $hash) ) // pwd OK |
Resultat: ça fonctionne bien car il compare au moins le 'username' et ouvre une session. Le souci est que le mot de passe haché qui est pris en compte est celui qui vient d'être tapé lors de la connexion et non celui stocké dans la base de données lors de l'inscription. Donc c'est logique que ça fonctionne. J'ai essayé de mettre la variable plus haut dans le code pour qu'elle soit liée au mot de passe de l'inscription et non à celui tapé lors de la connexion, mais malheureusement en faisant ainsi elle n'est plus reconnue dans la partie CONNEXION.
Vérification mot de passe et pseudo (PHP - MySql)
BRAVO Jreaux62,
avec ta question tu m'as mis sur une piste.
c'était la taille maximale des mots de passe dans la BDD qui posait problème. Elle était à 50 et je l'ai mise à 250. et c'set réglé.
Quelle disponibilité et quelle générosité !! Merci beaucoup et bonne continuation
;);););););)