Vérification mot de passe utilisateur et celui crypté de la base

Résolu/Fermé
samgione - 8 déc. 2015 à 03:08
 samgione - 17 déc. 2015 à 15:34
salut, je suis samgi
j'ai un espace membre à réaliser en php et Mysqli, j'ai realisé mon formulaire d'inscription qui marche tres bien et que le mot de passe est crypté avec cette fonction
password_hash($password, PASSWORD_DEFAULT)
,
cependant je ne peux pas vérifier le mot de passe rentré par l’utilisateur dans le formulaire de connexion avec celui crypté de la base de données.
est-ce que quelqu'un puisse m'aider svp?

code de traitement du 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.";
}
}
?>


code de traitement du formulaire de connexion:
<?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 nom d'utilisateur 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 $MotDePasse = htmlentities($_POST['password'], ENT_QUOTES, "utf-8"); //on se connecte à la base de données: $mysqli = mysqli_connect("Serveur", "utilisateur", "motdepass", "ma 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 * FROM user WHERE username = '".$username."' AND password = '".$MotDePasse."'"); // 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(mysqli_num_rows($Requete) == 0) { $error = "Le nom d'utilisateur ou le mot de passe est incorrect, le compte n'a pas été trouvé."; } else { // 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 } } }}}?>


NB: je ne peux pas comparer le mot de passe entrer par l'utilisateur avec celui qui est chiffré dans la base. comment puis-je faire svp?
A voir également:

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é.";
}
}
2
si quelqu'un puisse m'aider, je lui serai très reconnaissant
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
8 déc. 2015 à 12:24
Salut,

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é :
$Requete = mysqli_query($mysqli,"SELECT hash FROM user WHERE username = '" . mysqli_real_escape_string($username) . "'");
$result = mysqli_fetch_row($Requete);

if (!$result) {
	$error = "L'utilisateur est incorrect.";
} else {
	$hash = $result[0];
	
	if (password_verify($user_password, $hash)) {
		// password ok
	} else {
		$error = "Le mot de passe est incorrect.";
	}
	
}


Note : ajout de mysqli_real_escape_string() pour éviter les injections sql.

Bonne journée
0
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.
1
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
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) . "'");
0
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
Voici mes deux fichiers:

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.
1
salut,
il affiche cette erreur:
Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in
. sur cette ligne
$result = mysqli_fetch_row($Requete);
pouriez-vous me dire s'qui ce pace scp?
0
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
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 :
$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));
}
0
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
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?
<?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é."; } } } } }}?>
0
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
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) :
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.";
        }
    }
}
0
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
voici le formulaire d'inscription des utilisateurs et qui fonctionne tres bien d'apres moi:
<?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.
1
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
que pourais-je faire maintenant?
0
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
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.

$Requete = mysqli_query($mysqli,"SELECT password FROM user WHERE username = '" . mysqli_real_escape_string($mysqli, $username) . "'");
0

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é.";
					}
				
                } 
            }
        }
    }
}
?>
1
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
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 :
<?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é.";
					}
                } 
            }
        }
    }
}
0
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
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
// 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!
1
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
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 :
$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) ?
0
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
et voilà, je verifie et je modifie Type: VARCHAR et Taille/valeurs: 100
toujours le meme resultat, en voice:
1
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
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 ?
0
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
voici les champs de ma base, jeter un coup d'oeil, je n'ai pas le champ hash, ça ne posera pas de probleme?
0
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
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.
0
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
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'];
0
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.
0
mais comment ce fait-il que se hash ne fonctionne pas?

password_hash($password, PASSWORD_BCRYPT, array('cost' => 10));
0
hey salut, mon problème semble être résoudre voila comment:

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));
0
Merci beaucoup à vous tous qui avaient pris le temps de m'aider, j'ai combiné tous vos proposition pour parvenir à une solution, maintenant mon formulaire fonctionne très bien. A la prochaine pour un autre sujet.
Samgione
0