Vérification mot de passe utilisateur et celui crypté de la base
Résolu/Fermé
A voir également:
- Password_verify ne fonctionne pas
- Identifiant et mot de passe - Guide
- Voir mot de passe wifi android - Guide
- Trousseau mot de passe iphone - Guide
- Mot de passe administrateur - Guide
- Réinitialiser pc sans mot de passe - Guide
13 réponses
j'ai essayé de comparer les deux mots de passes en utilisant la fonction "password_verify" de cette manière mais ça ne fonctionne pas.
if(!$mysqli){
$error = "Erreur de connexion à la base de données.";
} else {
// on fait maintenant la requête dans la base de données pour rechercher si ces données existe et correspondent:
$Requete = mysqli_query($mysqli,"SELECT * FROM user WHERE username = '".$username."' AND password = '".$user_password."'");
// si il y a un résultat, mysqli_num_rows() nous donnera alors 1
// si mysqli_num_rows() retourne 0 c'est qu'il a trouvé aucun résultat
$hash = password_hash($user_password, PASSWORD_DEFAULT);
if(mysqli_num_rows($Requete) == 1) {
if (password_verify($user_password, $hash)) {
// on ouvre la session avec $_SESSION:
$_SESSION['login_user'] = $username; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le username
header("location: membre.php"); // Redirecting To Other Page
}
} else {
$error = "Le username ou le mot de passe est incorrect, le compte n'a pas été trouvé.";
}
}
Salut Pitet, je vous suis tres reconnaissant parce que vous etes venu a mon aide.
Mais je dois vous dire que ca ne fonctionne pas encore. j'ai essayé la façon dont vous m'avez conseillé ça n'a pas marché. ça affiche deux erreurs:
1) Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in (emplacement du fichier) on line 27.
2) Notice: Undefined variable: result in (emplacement du fichier) on line 30
ce sont les deux erreurs affichés.
Mais je dois vous dire que ca ne fonctionne pas encore. j'ai essayé la façon dont vous m'avez conseillé ça n'a pas marché. ça affiche deux erreurs:
1) Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in (emplacement du fichier) on line 27.
2) Notice: Undefined variable: result in (emplacement du fichier) on line 30
ce sont les deux erreurs affichés.
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
9 déc. 2015 à 09:34
9 déc. 2015 à 09:34
Oups, plus l'habitude d'utiliser mysqli. En procédurale mysqli_real_escape_string() attend l'identifiant de connexion en premier paramètre (comme mysqli_query) :
$Requete = mysqli_query($mysqli,"SELECT hash FROM user WHERE username = '" . mysqli_real_escape_string($mysqli, $username) . "'");
samgione
Messages postés
35
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
16 décembre 2019
5
8 déc. 2015 à 22:27
8 déc. 2015 à 22:27
Voici mes deux fichiers:
Formulaire d'inscription:
celui ci foctionne tres bien
Formulaire de connexion:
celui ci ne veut pas fonctionner.
c'est plus noble de vous transmet c'est deux fichiers pour pouvoir m'aider plus facilement.
Formulaire d'inscription:
<?php
session_start();
$error='';
include 'database.php';
if(isset($_REQUEST['submit'])){
$user_firstname=$_REQUEST['fname'];
$user_lastname=$_REQUEST['lname'];
$user_username=$_REQUEST['username'];
$user_email=$_REQUEST['email'];
$user_password=$_REQUEST['password'];
$user_confpass=$_REQUEST['confpass'];
//On vérifie que password et password2 sont identiques
if($_POST["password"] == $_POST["confpass"]){
//On utilise alors notre fonction password_hash :
$hash = password_hash($user_password, PASSWORD_DEFAULT);
// encore plus secure
//$hash = password_hash($password, PASSWORD_BCRYPT, array('cost' => 10));
$sql="INSERT INTO user(fname,lname,username,email,password,confpass) VALUES('$user_firstname','$user_lastname','$user_username','$user_email','$hash','$hash')";
mysqli_query($database,$sql) or die(mysqli_error($database));
$_SESSION['login_user'] = $user_username;
header('Location: membre.php?login_user='.$user_username);
} else {
$error = "Les deux mots de passe ne sont pas identiques.";
}
}
?>
celui ci foctionne tres bien
Formulaire de connexion:
celui ci ne veut pas fonctionner.
<?php
/*
Page: login.php
- /session_start(); // à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION$error=''; // Variable To Store Error Messageif(isset($_POST['submit'])) { // si le bouton "Connexion" est appuyé // on vérifie que le champ "username" n'est pas vide // empty vérifie à la fois si le champ est vide et si le champ existe belle et bien (is set) if(empty($_POST['username'])) { $error = "Le champ username est vide."; } else { // on vérifie maintenant si le champ "Mot de passe" n'est pas vide" if(empty($_POST['password'])) { $error = "Le champ Mot de passe est vide."; } else { // les champs sont bien posté et pas vide, on sécurise les données entrées par le membre: $username = htmlentities($_POST['username'], ENT_QUOTES, "utf-8"); // le htmlentities() passera les guillemets en entités HTML, ce qui empêchera les injections SQL $user_password = htmlentities($_POST['password'], ENT_QUOTES, "utf-8"); //on se connecte à la base de données: $mysqli = mysqli_connect("serveur", "utilisateur", "mot de passe", "base"); //on vérifie que la connexion s'effectue correctement: if(!$mysqli){ $error = "Erreur de connexion à la base de données."; } else { // on fait maintenant la requête dans la base de données pour rechercher si ces données existe et correspondent: $Requete = mysqli_query($mysqli,"SELECT hash FROM user WHERE username = '". mysqli_real_escape_string($username) . "'"); // si il y a un résultat, mysqli_num_rows() nous donnera alors 1 // si mysqli_num_rows() retourne 0 c'est qu'il a trouvé aucun résultat if (!$result) { $error = "L'utilisateur est incorrect."; } else { $hash = $result[0]; if(password_verify($user_password, $hash)) { //if (mysqli_num_rows($Requete) == 1) { // on ouvre la session avec $_SESSION: $_SESSION['login_user'] = $username; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le username header("location: membre.php"); // Redirecting To Other Page }else { $error = "Le username ou le mot de passe est incorrect, le compte n'a pas été trouvé."; } } } } }}?>
c'est plus noble de vous transmet c'est deux fichiers pour pouvoir m'aider plus facilement.
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
10 déc. 2015 à 12:04
10 déc. 2015 à 12:04
C'est surement l'erreur la plus connu de PHP ;)
La fonction mysqli_query retourne le booléen FALSE si la requête ne s'est pas exécutée correctement, d'où le message d'erreur de mysqli_fetch_row qui attend un ensemble de résultat et pas un booléen.
Pour éviter ca il faut normalement toujours vérifier que les requêtes sql soient bien exécutées et afficher le message d'erreur dans le cas contraire :
La fonction mysqli_query retourne le booléen FALSE si la requête ne s'est pas exécutée correctement, d'où le message d'erreur de mysqli_fetch_row qui attend un ensemble de résultat et pas un booléen.
Pour éviter ca il faut normalement toujours vérifier que les requêtes sql soient bien exécutées et afficher le message d'erreur dans le cas contraire :
$Requete = mysqli_query($mysqli,"SELECT hash FROM user WHERE username = '". mysqli_real_escape_string($mysqli, $username) . "'"); if (!$Requete) { printf("Erreur sql : %s\n", mysqli_error($mysqli)); }
samgione
>
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
10 déc. 2015 à 16:17
10 déc. 2015 à 16:17
merci Pitet.
voici mon code j'arrive pas à porter la correction de dans. tu peux verifier et la corrigé pour moi s'il te plait?
voici mon code j'arrive pas à porter la correction de dans. tu peux verifier et la corrigé pour moi s'il te plait?
<?php
/*
Page: login.php
- /session_start(); // à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION$error=''; // Variable To Store Error Messageif(isset($_POST['submit'])) { // si le bouton "Connexion" est appuyé // on vérifie que le champ "username" n'est pas vide // empty vérifie à la fois si le champ est vide et si le champ existe belle et bien (is set) if(empty($_POST['username'])) { $error = "Le champ username est vide."; } else { // on vérifie maintenant si le champ "Mot de passe" n'est pas vide" if(empty($_POST['password'])) { $error = "Le champ Mot de passe est vide."; } else { // les champs sont bien posté et pas vide, on sécurise les données entrées par le membre: $username = htmlentities($_POST['username'], ENT_QUOTES, "utf-8"); // le htmlentities() passera les guillemets en entités HTML, ce qui empêchera les injections SQL $user_password = htmlentities($_POST['password'], ENT_QUOTES, "utf-8"); //on se connecte à la base de données: $mysqli = mysqli_connect("localhost", "root", "mondieu", "inend"); //on vérifie que la connexion s'effectue correctement: if(!$mysqli){ $error = "Erreur de connexion à la base de données."; } else { // on fait maintenant la requête dans la base de données pour rechercher si ces données existe et correspondent: $Requete = mysqli_query($mysqli,"SELECT hash FROM user WHERE username = '" . mysqli_real_escape_string($mysqli, $username) . "'"); // si il y a un résultat, mysqli_num_rows() nous donnera alors 1 // si mysqli_num_rows() retourne 0 c'est qu'il a trouvé aucun résultat $result = mysqli_fetch_row($Requete); if (!$result) { $error = "L'utilisateur est incorrect."; } else { $hash = $result[0]; if(password_verify($user_password, $hash)) { //if (mysqli_num_rows($Requete) == 1) { // on ouvre la session avec $_SESSION: $_SESSION['login_user'] = $username; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le username header("location: membre.php"); // Redirecting To Other Page }else { $error = "Le username ou le mot de passe est incorrect, le compte n'a pas été trouvé."; } } } } }}?>
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
10 déc. 2015 à 16:58
10 déc. 2015 à 16:58
Je ne sais pas comment ni pourquoi mais ton code posté sur le forum apparait tout entier sur une seule ligne, ce qui le rend difficile à relire ou à reprendre.
Bref pour voir le message d'erreur sql il suffit de reprendre le code proposé dans mon dernier commentaire. Par exemple (je n'ai repris que la fin de ton code) :
Bref pour voir le message d'erreur sql il suffit de reprendre le code proposé dans mon dernier commentaire. Par exemple (je n'ai repris que la fin de ton code) :
if (!$mysqli) { $error = "Erreur de connexion à la base de données."; } else { $Requete = mysqli_query($mysqli, "SELECT hash FROM user WHERE username = '" . mysqli_real_escape_string($mysqli, $username) . "'"); if (!$Requete) { printf("Erreur sql : %s\n", mysqli_error($mysqli)); exit(); } $result = mysqli_fetch_row($Requete); if (!$result) { $error = "L'utilisateur est incorrect."; } else { $hash = $result[0]; if (password_verify($user_password, $hash)) { $_SESSION['login_user'] = $username; header("location: membre.php"); exit(); } else { $error = "Le mot de passe est incorrect."; } } }
samgione
Messages postés
35
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
16 décembre 2019
5
10 déc. 2015 à 17:39
10 déc. 2015 à 17:39
voici le formulaire d'inscription des utilisateurs et qui fonctionne tres bien d'apres moi:
et voici le formulaire de connexion celui qui ne veut pas encore fonctionner:
j'ai esseye de modifier le formulaire de connexion de la façon dont tu viens de me proposer, voici la nouveau message d'erreur:
Remarque: le champs hashe n'est pas dans ma base.
<?php session_start(); $error=''; include 'database.php'; if(isset($_REQUEST['submit'])){ $user_firstname=$_REQUEST['fname']; $user_lastname=$_REQUEST['lname']; $user_username=$_REQUEST['username']; $user_email=$_REQUEST['email']; $user_password=$_REQUEST['password']; $user_confpass=$_REQUEST['confpass']; //On vérifie que password et password2 sont identiques if($_POST["password"] == $_POST["confpass"]){ //On utilise alors notre fonction password_hash : $hash = password_hash($user_password, PASSWORD_DEFAULT); // encore plus secure //$hash = password_hash($password, PASSWORD_BCRYPT, array('cost' => 10)); $sql="INSERT INTO user(fname,lname,username,email,password,confpass) VALUES('$user_firstname','$user_lastname','$user_username','$user_email','$hash','$hash')"; mysqli_query($database,$sql) or die(mysqli_error($database)); $_SESSION['login_user'] = $user_username; header('Location: membre.php?login_user='.$user_username); } else { $error = "Les deux mots de passe ne sont pas identiques."; } } ?>
et voici le formulaire de connexion celui qui ne veut pas encore fonctionner:
<?php /* Page: login.php */ session_start(); // à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION $error=''; // Variable To Store Error Message if(isset($_POST['submit'])) { // si le bouton "Connexion" est appuyé // on vérifie que le champ "username" n'est pas vide // empty vérifie à la fois si le champ est vide et si le champ existe belle et bien (is set) if(empty($_POST['username'])) { $error = "Le champ username est vide."; } else { // on vérifie maintenant si le champ "Mot de passe" n'est pas vide" if(empty($_POST['password'])) { $error = "Le champ Mot de passe est vide."; } else { // les champs sont bien posté et pas vide, on sécurise les données entrées par le membre: $username = htmlentities($_POST['username'], ENT_QUOTES, "utf-8"); // le htmlentities() passera les guillemets en entités HTML, ce qui empêchera les injections SQL $user_password = htmlentities($_POST['password'], ENT_QUOTES, "utf-8"); //on se connecte à la base de données: $mysqli = mysqli_connect("localhost", "root", "mondieu", "inend"); //on vérifie que la connexion s'effectue correctement: if(!$mysqli){ $error = "Erreur de connexion à la base de données."; } else { // on fait maintenant la requête dans la base de données pour rechercher si ces données existe et correspondent: $Requete = mysqli_query($mysqli,"SELECT hash FROM user WHERE username = '" . mysqli_real_escape_string($mysqli, $username) . "'"); if (!$Requete) { printf("Erreur sql : %s\n", mysqli_error($mysqli)); exit(); } // si il y a un résultat, mysqli_num_rows() nous donnera alors 1 // si mysqli_num_rows() retourne 0 c'est qu'il a trouvé aucun résultat $result = mysqli_fetch_row($Requete); if (!$result) { $error = "L'utilisateur est incorrect."; } else { $hash = $result[0]; if(password_verify($user_password, $hash)) { //if (mysqli_num_rows($Requete) == 1) { // on ouvre la session avec $_SESSION: $_SESSION['login_user'] = $username; // la session peut être appelée différemment et son contenu aussi peut être autre chose que le username header("location: membre.php"); // Redirecting To Other Page exit(); }else { $error = "Le username ou le mot de passe est incorrect, le compte n'a pas été trouvé."; } } } } } } ?>
j'ai esseye de modifier le formulaire de connexion de la façon dont tu viens de me proposer, voici la nouveau message d'erreur:
Erreur sql : Unknown column 'hash' in 'field list'
Remarque: le champs hashe n'est pas dans ma base.
samgione
Messages postés
35
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
16 décembre 2019
5
10 déc. 2015 à 17:40
10 déc. 2015 à 17:40
que pourais-je faire maintenant?
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
11 déc. 2015 à 11:18
11 déc. 2015 à 11:18
Oui j'ai confondu le nom du champ password avec le nom de la variable hash.
Il faut récupérer le champ password en bdd.
Il faut récupérer le champ password en bdd.
$Requete = mysqli_query($mysqli,"SELECT password FROM user WHERE username = '" . mysqli_real_escape_string($mysqli, $username) . "'");
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
salut encore a vous tous, voici mon nouveau code ça n'a toujours pas marcher. il affiche le message suivant: "Le username ou le mot de passe est incorrect, le compte n'a pas été trouvé." et le mot de passe est là mais il est crypté, comment ce fait-il que la comparaison n'est pas fait? aider moi à trouver l'erreur s'il us plait?
<?php session_start(); $error=''; include 'database.php'; if(isset($_POST['submit'])) { if(empty($_POST['username'])) { $error = "Le champ username est vide."; } else { if(empty($_POST['password'])) { $error = "Le champ Mot de passe est vide."; } else { $username = mysqli_real_escape_string($database, $_POST['username']); $user_password = mysqli_real_escape_string($database, $_POST['password']); if(!$database){ $error = "Erreur de connexion à la base de données."; } else { $Requete = mysqli_query($database,"SELECT password FROM user WHERE username = '" . mysqli_real_escape_string($database, $username) . "'"); $result = mysqli_fetch_row($Requete); if (!$result) { $error = "L'utilisateur est incorrect."; } else { $hash = $result[0]; if(password_verify($user_password, $hash)) { $_SESSION['login_user'] = $username; header("location: membre.php"); }else { $error = "Le username ou le mot de passe est incorrect, le compte n'a pas été trouvé."; } } } } } } ?>
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
14 déc. 2015 à 12:24
14 déc. 2015 à 12:24
La fonction mysqli_real_escape_string() qui permet d'éviter les injections sql soit être utilisée uniquement sur les données utilisées dans une requête sql, il n'est donc pas nécessaire de l'appliquer sur la variable $_POST['password'] puisque celle-ci n'est pas utilisée dans une requête sql.
Cette fonction est également appliquée deux fois sur le nom d'utilisteur (ligne 12 et ligne 19), une seule fois suffit.
Essaye comme ceci :
Cette fonction est également appliquée deux fois sur le nom d'utilisteur (ligne 12 et ligne 19), une seule fois suffit.
Essaye comme ceci :
<?php session_start(); $error=''; include 'database.php'; if(isset($_POST['submit'])) { if(empty($_POST['username'])) { $error = "Le champ username est vide."; } else { if(empty($_POST['password'])) { $error = "Le champ Mot de passe est vide."; } else { $username = $_POST['username']; $user_password = $_POST['password']; if(!$database){ $error = "Erreur de connexion à la base de données."; } else { $Requete = mysqli_query($database,"SELECT password FROM user WHERE username = '" . mysqli_real_escape_string($database, $username) . "'"); $result = mysqli_fetch_row($Requete); if (!$result) { $error = "L'utilisateur est incorrect."; } else { $hash = $result[0]; // pour débug : à supprimer ensuite var_dump('user_password : ' . $user_password); var_dump('hash : ' . $hash); if(password_verify($user_password, $hash)) { $_SESSION['login_user'] = $username; header("location: membre.php"); exit(); }else { $error = "Le username ou le mot de passe est incorrect, le compte n'a pas été trouvé."; } } } } } }
samgione
Messages postés
35
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
16 décembre 2019
5
14 déc. 2015 à 15:06
14 déc. 2015 à 15:06
Salut Petet,
comme dit le dicton "la patience est amer mais son fruit est doux".
je ne perdrai pas de patience et continuez à me soutenir s'il vous plait.
je viens d'apporter toutes les modiffications que tu m'as proposes, voici les resultats obtenus:
avec cette partie de code
sans cette partie de code
Merci pour votre aide et conseils, ne soyez pas découragé, aidez moi jusqu'à ce que je trouverai une solution.
que Dieu vous guarde!
comme dit le dicton "la patience est amer mais son fruit est doux".
je ne perdrai pas de patience et continuez à me soutenir s'il vous plait.
je viens d'apporter toutes les modiffications que tu m'as proposes, voici les resultats obtenus:
avec cette partie de code
// pour débug : à supprimer ensuite var_dump('user_password : ' . $user_password); var_dump('hash : ' . $hash);
sans cette partie de code
// pour débug : à supprimer ensuite var_dump('user_password : ' . $user_password); var_dump('hash : ' . $hash);
Merci pour votre aide et conseils, ne soyez pas découragé, aidez moi jusqu'à ce que je trouverai une solution.
que Dieu vous guarde!
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
Modifié par Pitet le 14/12/2015 à 16:44
Modifié par Pitet le 14/12/2015 à 16:44
On y est presque.
A la vue du var_dump(), le problème semble venir du mot de passe enregistré en bdd qui devrait être plus long que 22 caractères.
Exemple :
Il faut donc vérifier que le mot de passe crypté s'enregistre correctement et en entier à l'inscription.
Le champ password en bdd est de type VARCHAR ? Si oui a t-il une taille suffisante pour accepter le mot de passe crypté en entier (minimum 60 caractères) ?
A la vue du var_dump(), le problème semble venir du mot de passe enregistré en bdd qui devrait être plus long que 22 caractères.
Exemple :
$pass = 'caca'; $hash = password_hash('caca', PASSWORD_DEFAULT); var_dump($hash); // affiche string(60) "$2y$10$koPaRBTp0nqGemg9j30MKOxVEHw3a8Vmb53mDY0AZ4jNfEX8KxRsS"
Il faut donc vérifier que le mot de passe crypté s'enregistre correctement et en entier à l'inscription.
Le champ password en bdd est de type VARCHAR ? Si oui a t-il une taille suffisante pour accepter le mot de passe crypté en entier (minimum 60 caractères) ?
samgione
Messages postés
35
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
16 décembre 2019
5
14 déc. 2015 à 18:17
14 déc. 2015 à 18:17
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
15 déc. 2015 à 09:20
15 déc. 2015 à 09:20
Le hash semble désormais correct, tout devrait être bon.
Es tu sur que le mot de passe hashé en bdd correspond bien au mot de passe 12345678 ?
Es tu sur que le mot de passe hashé en bdd correspond bien au mot de passe 12345678 ?
samgione
Messages postés
35
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
16 décembre 2019
5
10 déc. 2015 à 17:25
10 déc. 2015 à 17:25
voici les champs de ma base, jeter un coup d'oeil, je n'ai pas le champ hash, ça ne posera pas de probleme?
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
10 déc. 2015 à 17:33
10 déc. 2015 à 17:33
Effectivement j'ai confondu le nom du champ password avec le nom de la variable hash.
Il faut donc récupérer le champ password en bdd.
Il faut donc récupérer le champ password en bdd.
samgione
Messages postés
35
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
16 décembre 2019
5
10 déc. 2015 à 17:25
10 déc. 2015 à 17:25
voici les champs
$user_firstname=$_REQUEST['fname'];
$user_lastname=$_REQUEST['lname'];
$user_username=$_REQUEST['username'];
$user_email=$_REQUEST['email'];
$user_password=$_REQUEST['password'];
$user_confpass=$_REQUEST['confpass'];
$user_firstname=$_REQUEST['fname'];
$user_lastname=$_REQUEST['lname'];
$user_username=$_REQUEST['username'];
$user_email=$_REQUEST['email'];
$user_password=$_REQUEST['password'];
$user_confpass=$_REQUEST['confpass'];
oui c'est exactement le même mot de passe, je ne sais pas encore qu'est ce qui est a la base de ce probleme.
de toute facon Pitet, merci beaucoup pour tous les aides et support que tu m'as donnés.
de toute facon Pitet, merci beaucoup pour tous les aides et support que tu m'as donnés.
mais comment ce fait-il que se hash ne fonctionne pas?
password_hash($password, PASSWORD_BCRYPT, array('cost' => 10));
hey salut, mon problème semble être résoudre voila comment:
dans le formulaire d'inscription j'ai utilisé
a la place de
et dans le formulaire de connexion j'ai enlevé toutes ces lignes:
et voila ça fonctionne.
il me semble que c’était la méthode de hachage que j'avais utilise qui était le problème?
par exemple celui ci:
dans le formulaire d'inscription j'ai utilisé
$hash = password_hash($_POST["password"], PASSWORD_DEFAULT);
a la place de
$hash = password_hash($password, PASSWORD_BCRYPT, array('cost' => 10));
et dans le formulaire de connexion j'ai enlevé toutes ces lignes:
echo $hash; exit; // pour débug : à supprimer ensuite var_dump('user_password : ' . $user_password); var_dump('hash : ' . $hash);
et voila ça fonctionne.
il me semble que c’était la méthode de hachage que j'avais utilise qui était le problème?
par exemple celui ci:
$hash = password_hash($password, PASSWORD_BCRYPT, array('cost' => 10));
8 déc. 2015 à 03:11
8 déc. 2015 à 12:24
Ton traitement n'est pas correct
1. On récupère le mot de passe crypté dans la bdd via le nom de l'utilisateur.
2. On vérifie le mot de passe saisie avec le mot de passe crypté en bdd grâce à la fonction password_verify()
Pour le point 1, ta requête n'est pas correcte puisque tu ne peux pas sélectionner l'utilisateur via le mot de passe saisie (AND password = '".$user_password."'"), le mot de passe en bdd étant crypté.
Pour le point 2, il n'est pas nécessaire de crypter le mot de passe saisie pour le comparer avec le mot de passe en bdd, le premier paramètre de password_verify() doit être le mot de passe saisie en clair.
Donc en résumé :
Note : ajout de mysqli_real_escape_string() pour éviter les injections sql.
Bonne journée