Page 1 sur 1
Problème boucle
Posté : 24 févr. 2021, 23:35
par Cilum90
Bonsoir,
Je voudrais savoir pourquoi ma boucle me renvoie toujours oui même si les mdp sont différents. Merci
if(isset($_POST['form_inscription']))
{
$pseudo = htmlspecialchars($_POST['pseudo']);
$email = htmlspecialchars($_POST['email']);
$hmdp = password_hash($_POST["mdp"], PASSWORD_DEFAULT);
$hmdp2 = password_hash($_POST["mdp2"], PASSWORD_DEFAULT);
if(!empty($_POST['email']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']) AND !empty($_POST['email']))
{
if($hmdp == $hmdp2)
{
echo "oui" ;
}
else
{
echo "non";
}
}
else
{
$erreur= "Tous les champs doivent être complétés";
}
}
?>
Re: Problème boucle
Posté : 25 févr. 2021, 01:21
par two3d
Fais un var_dump de $_POST["mdp"] et $_POST["mdp2"] pour savoir si ils sont réellement différents.
Je connais pas password_hash, peut être que ça renvoi la même chaine lors du traitement
Re: Problème boucle
Posté : 25 févr. 2021, 15:51
par Cilum90
Fais un var_dump de $_POST["mdp"] et $_POST["mdp2"] pour savoir si ils sont réellement différents.
Je connais pas password_hash, peut être que ça renvoi la même chaine lors du traitement
Je te remercie pour ton message, j'ai enfin décidé de changer le code.
Bonne Journée
Re: Problème boucle
Posté : 26 févr. 2021, 18:38
par Saian
Salut, si je me souviens bien lorsque tu haches le mot de passe avec la fonction password_hash (qui est je pense une très bonne fonction de hachage qui utilise un algorithme de hachage fort et irréversible d'après la doc), tu dois utiliser la fonction password_verify pour vérifier le mot de passe lors du login en lui passant le mot de passe saisi par l'utilisateur avec le hash que tu as sauvegardé dans ta base de données. Tu ne peux justement pas comparer 2 hash générés avec cette fonction car elle va à chaque fois générer des hash différents pour une même chaine en entrée.
Re: Problème boucle
Posté : 27 févr. 2021, 13:01
par Cilum90
Salut, si je me souviens bien lorsque tu haches le mot de passe avec la fonction password_hash (qui est je pense une très bonne fonction de hachage qui utilise un algorithme de hachage fort et irréversible d'après la doc), tu dois utiliser la fonction password_verify pour vérifier le mot de passe lors du login en lui passant le mot de passe saisi par l'utilisateur avec le hash que tu as sauvegardé dans ta base de données. Tu ne peux justement pas comparer 2 hash générés avec cette fonction car elle va à chaque fois générer des hash différents pour une même chaine en entrée.
Salut, au final j'avais changé le code avec celui que je vais poster et maintenant ça fonctionne.
Juste après avoir contrôlé si les deux Mdp sont les mêmes, je l'ai haché au moment de l'enregistrer dans la base de données.
Code : Tout sélectionner
if(isset($_POST['form_inscription']))
{
$pseudo = htmlspecialchars($_POST['pseudo']);
$email = htmlspecialchars($_POST['email']);
$email2 = htmlspecialchars($_POST['email2']);
$mdp = htmlspecialchars($_POST['mdp']);
$mdp2 = htmlspecialchars($_POST['mdp2']);
if(!empty($_POST['pseudo']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']) AND !empty($_POST['email']) AND !empty($_POST['email2']))
{
if(isset($_POST['pseudo'],$_POST['mdp'],$_POST['mdp2'],$_POST['email'],$_POST['email2']))
{
//On controle si il n'y a pas deja d'autres membres avec le même pseudo
$reqpseudo = $bdd->prepare('SELECT pseudo FROM membres where pseudo = ?');
$reqpseudo->execute(array($pseudo));
$pseudoexist=$reqpseudo->rowCount();
if ($pseudoexist == 0)
{
//On controle si il n'y a pas deja d'autres membres avec le même email
$reqmail = $bdd->prepare('SELECT * FROM membres WHERE email = ?');
$reqmail->execute(array($email));
$mailexist=$reqmail->rowCount();
if ($mailexist == 0)
{
if(($mdp == $mdp2) AND ($email == $email2) AND preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email))
{
$req = $bdd->prepare("INSERT INTO membres(pseudo, mdp, email, date_inscription) VALUES(?, ?, ?, CURDATE())");
$req->execute(array($pseudo, $hmdp= password_hash($mdp, PASSWORD_DEFAULT), $email));
?><p><?php $inscrit= 'Vous etes inscrits!';?></p><?php
}

Re: Problème boucle
Posté : 27 févr. 2021, 14:06
par two3d
La fonction empty() sert de isset() aussi, tu na pas besoin de faire une fois empty puis une fois isset (d'ailleurs la logique serait de le faire à l'inverse, d'abord isset puis savoir si il est vide) mais empty() peut être utilisé pour les deux: isset et empty
Cf:
if(!empty($_POST['pseudo']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']) AND !empty($_POST['email']) AND !empty($_POST['email2']))
{
if(isset($_POST['pseudo'],$_POST['mdp'],$_POST['mdp2'],$_POST['email'],$_POST['email2']))
{//inutile
Re: Problème boucle
Posté : 27 févr. 2021, 14:08
par two3d
Attention à ta preg_match pour le mail, on peut proposer des mail comme ".@..[a-z]+"
pour éviter cela encadre le devant de l'adresse par "[a-z0-9]+[ta condition actuelle][a-z0-9]+@etc..."
J'ai créé une "petite" preg_match pour vérifier les mail en PHP:
https://www.c2script.com/scripts/verifi ... hp-s2.html
Ou sinon tu as la fonction
filter_var() avec un
filtre email , personnellement je préfère savoir qu'est ce que je vérifie et comment.
Re: Problème boucle
Posté : 27 févr. 2021, 14:32
par Cilum90
Attention à ta preg_match pour le mail, on peut proposer des mail comme ".@..[a-z]+"
pour éviter cela encadre le devant de l'adresse par "[a-z0-9]+[ta condition actuelle][a-z0-9]+@etc..."
J'ai créé une "petite" preg_match pour vérifier les mail en PHP:
https://www.c2script.com/scripts/verifi ... hp-s2.html
Ou sinon tu as la fonction
filter_var() avec un
filtre email , personnellement je préfère savoir qu'est ce que je vérifie et comment.
Merci pour les infos! Je vais regarder
