Bonjour,
Je tombe sur ce problème depuis et je vous demande votre aide. J'aimerais vérifier que l'username existe dans ma bdd mais ça ne marche pas, meme avec des noms d'utilisateurs qui sont déja enrégistré ma bdd. Voici l'erreur que ça m'affiche : Username/Password do not match.**
Voici mon code :
if(isset($_POST['valider'])){
$username = htmlentities($_POST['username']);
$password = password_hash($_POST['password'],PASSWORD_DEFAULT);
$password2 = password_hash($_POST['password2'],PASSWORD_DEFAULT);
if (empty($_POST['username'])) {
$error = true;
$usernameError = "Please enter your username .";
} else {
if (empty($_POST['password'])) {
$error = true;
$passwordError = "Please enter your password .";
} else {
if (empty($_POST['password2'])) {
$error = true;
$password2Error = "Please confirm the password .";
} else {
if ($_POST['password'] != $_POST['password2']) {
$error = true;
$passworddifferentError = "Passwords are not the same .";
} else {
$pdo = new PDO('mysql:host=localhost;dbname=projet;charset=UTF8', 'root', '');
if (!$pdo) {
echo "Please check your information and try again";
} else {
$query = $pdo->prepare('SELECT * FROM `client6` WHERE username = :username AND password = :password');
$query->execute(array('username' => $username,
'password' => $password));
if ($reponse = ($query)) {
if ($reponse->fetchColumn() == 1) {
$_SESSION['username'] = $username;
header("location: accueil.php");
} else {
$error = true;
$noncorrespondError = "Username/Password do not match .";
}
}
}
}
}
}
}
}
Salut,
$username = htmlentities($_POST['username']);
$password = $_POST['password'];
$password2 = $_POST['password2'];
$champsremplis = !empty($username) && !empty($password) && !empty($password2);
if(!$champremplis){$msgerr[] = "tous les champs sont obligatoires";}
$correspondancepasswords = ($password == $password) ;
if(!$correspondancepasswords){$msgerr[] = "Les mots de passes ne corespondent pas";}
if(empty($msgerr){
// ici, tout est OK
// je peux rechercher dans la base de données
$password = password_hash($password,PASSWORD_DEFAULT);
$query = $pdo->prepare('SELECT * FROM client WHERE username = :username' and password=:password");
$result = $query->execute(array('username' => $username,'password=>$password));
if($result->rowCount()>0){
$user = $result->fetch(PDO::FETCH_ASSOC);
$_SESSION['username'] =$user['username'];
header("location: accueil.php");
}else{
$msg[] = "Utilisateur/Mot de passe inexistant";
}
}else{
// traitement des erreurs
foreach ($msgerr as $value){
echo $value."</br>";
}
}
// retraitement des erreurs
@plus
Pierre
Bonsoir.
Tu ne cryptes pas les mots de passe en base de données ?
Si tu les cryptes, c'est normal que tu ne trouves aucun enregistrement en base de données correspondant au username et au password étant donné que tu envois le mot de passe non crypté en base de données pour ta requête.
Voila
<?php
/*
Page: login.php
*/
// à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION
session_start();
include("config.php");
try
{
// On se connecte à MySQL
$pdo = new PDO('mysql:host=localhost;dbname=projet;charset=UTF8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
$AfficherFormulaire=1;
$usernameError = "";
$passwordError ="";
$password2Error ="";
$passworddifferentError ="";
$noncorrespondError = "";
$adminpageError="";
if (isset($_SESSION['admin']) && $_SESSION['admin']=$username) {
$adminpageError = "<p><a href='logout.php'>Log Out </a></p>";
}
if(isset($_POST['valider'])) {
$username = htmlentities($_POST['username']);
$password = password_hash($_POST['password'],PASSWORD_DEFAULT);
$password2 = password_hash($_POST['password2'],PASSWORD_DEFAULT);
if (empty($_POST['username'])) {
$error = true;
$usernameError = "Please enter your username .";
} elseif (empty($_POST['password'])) {
$error = true;
$passwordError = "Please enter your password .";
} elseif (empty($_POST['password2'])) {
$error = true;
$password2Error = "Please confirm the password .";
} elseif ($_POST['password'] != $_POST['password2']) {
$error = true;
$passworddifferentError = "Passwords are not the same .";
} else {
$query = $pdo->prepare('SELECT * FROM `client` WHERE username = :username');
$query->execute(array(
'username' => $username
));
$reponse = ($query);
if ($reponse->fetchColumn() == 1) {
$_SESSION['username'] = $username;
header("location: accueil.php");
} else {
$error = true;
$noncorrespondError = "Username/Password do not match .";
}
}
}
Bonsoir,
Il serait peut-être bien de comprendre ce que vous faites et d'arrêter de faire du copier-coller.
if ($reponse = ($query)) {
A quoi correspond cette ligne et quelle est son role ?
Lartak vous demande pourquoi vous ne crypter pas les mdp et vous, vous contenter seulement de "crypter" le mot de pase reçu mais est-ce qu'il a été fait lors de l'insertion ?
De plus
$password = htmlentities($_POST['password']);
$password2 = htmlentities($_POST['password2']);
$password = password_hash($_POST['password'],PASSWORD_DEFAULT);
$password2 = password_hash($_POST['password2'],PASSWORD_DEFAULT);
A quoi servent les deux premières ligne ?
D'abord, merci pour votre réponse.
les 2 lignes été corrigées
$username = htmlentities($_POST['username']);
$password = password_hash($_POST['password'],PASSWORD_DEFAULT);
$password2 = password_hash($_POST['password2'],PASSWORD_DEFAULT);
D'abord j'ai fait une requete préparée pour vérifier si les variables username et mot de passe existent dans la base de donnée
$query = $pdo->prepare('SELECT * FROM `client` WHERE username = :username AND password = password_hash(:password, PASSWORD_DEFAULT)');
A la suite $query = $pdo->execute() . J'ai utilisé ensuite
if ($reponse = ($query))
si $reponse = ($query) , faut voir si $reponse->fetchColumn() == 1, si ces 2 conditions sont exsistent alors j'aimerais que la page s'affiche :
$_SESSION['username'] = $username;
header("location: accueil.php");
J'aimerais que juste que si username et mot de passe exsistent dans la base de donné, que la page s'affiche
$_SESSION['username'] = $username;
header("location: accueil.php");
sinon
$error = true;
$noncorrespondError = "Username/Password do not match .";
Avant de tester le mot de passe, vérifie déjà que l'utilisateur existe dans ta requête sql. Cela permettra de vérifier que cette dernière est correcte.
vérifie que l'utilisateur existe dans ta requête sql comme ceci?
$query = $pdo->prepare('SELECT * FROM `client6` WHERE username = :username AND password = :password');
Non juste l'utilisateur, comme je l'ai dit, cela permettra de vérifier que la requête s'exécute bien
Le mot "conditions" est faible :D
j'ai rarement un imbroglio de testssss aussi fournis :D :D
@pluche
Pierre
Salut,
Du code lisible, ce serai bien :D
trop de if imbriqués, c'est illisible.
pourtant, le traitement est simple.
Les 3 champs doivent être remplis, et correspondance des passwords donc :
$username = htmlentities($_POST['username']);
$password = $_POST['password'];
$password2 = $_POST['password2'];
$champsremplis = !empty($username) && !empty($password) && !empty($password2);
if(!$champremplis){$msgerr[] = "tous les champs sont obligatoires";}
$correspondancepasswords = ($password == $password) ;
if(!$correspondancepasswords){$msgerr[] = "Les mots de passes ne corespondent pas";}
if(empty($msgerr){
// ici, tout est OK
// je peux rechercher dans la base de données
}else{
// traitement des erreurs
foreach ($msgerr as $value){
echo $value."</br>";
}
}
il faut simplifier le code !! :D
@pluche
Pierre
J'avoue que votre code est très lisible mais là je n'arrive pas à rechercher les variables dans la base de donnée . Cela m'affiche Les mots de passes ne corespondent pas
if(isset($_POST['valider'])) {
$username = htmlentities($_POST['username']);
$password = password_hash($_POST['password'],PASSWORD_DEFAULT);
$password2 = password_hash($_POST['password2'],PASSWORD_DEFAULT);
$champsrempli = !empty($username) && !empty($password) && !empty($password2);
if(!$champsrempli){$msgerr[] = "tous les champs sont obligatoires";}
$correspondancepasswords = $password == $password2 ;
if(!$correspondancepasswords){$msgerr[] = "Les mots de passes ne corespondent pas";}
if(empty($msgerr)){
$query = $pdo->prepare('SELECT * FROM client WHERE username = :username');
$query->execute(array('username' => $username));
$query == 1;
$_SESSION['username'] = $username;
header("location: accueil.php");
} else {
foreach ($msgerr as $value){
echo $value."</br>";
}
}
}
Fatal error: Call to a member function rowCount() on a non-object in C:\wamp\www\On line\agency\authentification\login.php on line 16
if(isset($_POST['valider'])) {
$username = htmlentities($_POST['username']);
$password = $_POST['password'];
$password2 = $_POST['password2'];
$champsremplis = !empty($username) && !empty($password) && !empty($password2);
if(!$champsremplis){$msgerr[] = "Tous les champs sont obligatoires";}
$correspondancepasswords = ($password == $password2) ;
if(!$correspondancepasswords){$msgerr[] = "Les mots de passes ne corespondent pas";}
if(empty($msgerr)){
// ici, tout est OK
// je peux rechercher dans la base de données
$password = password_hash($password,PASSWORD_DEFAULT);
$query = $pdo->prepare('SELECT * FROM client WHERE username = :username and password = :password');
$result = $query->execute(array('username' => $username, 'password' => $password));
if($result->rowCount()>0){
$user = $result->fetch(PDO::FETCH_ASSOC);
$_SESSION['username'] =$user['username'];
header("location: accueil.php");
} else {
$msg[] = "Utilisateur/Mot de passe inexistant";
}
} else {
// traitement des erreurs
foreach ($msgerr as $value){
echo $value."</br>";
}
}
// retraitement des erreurs
D'abord merci Pierrot01 pour ce grand aide. la page ne retourne rien, ça reviens sur la meme page.