Login - Password PHP
Résolu
M_Tufux
Messages postés
85
Statut
Membre
-
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
Hello,
Je n'arrive pas à faire correctement cette fonction de login. J'ai lié un fichier index.php dans lequel j'ai mis la session, vous le remarquerez avec le return true dans register.
Première question, pourquoi Est-ce que le password verify ne fonctionne pas?
Ensuite, je ne sais plus comment gérer l'erreur dans la fnc Register. L'erreur, c'est à dire si la BD ne répond pas ou qqch du genre.
J'accepterais avec plaisir de l'aide :)
Merci beaucoup!!
Je n'arrive pas à faire correctement cette fonction de login. J'ai lié un fichier index.php dans lequel j'ai mis la session, vous le remarquerez avec le return true dans register.
Première question, pourquoi Est-ce que le password verify ne fonctionne pas?
Ensuite, je ne sais plus comment gérer l'erreur dans la fnc Register. L'erreur, c'est à dire si la BD ne répond pas ou qqch du genre.
<?php
function Login($user, $pass){
$pass = password_hash($pass, PASSWORD_DEFAULT);
$userdb = 'root';
$passdb = '';
$cnn = new PDO('mysql:host=localhost;dbname=siteTest', $userdb, $passdb);
$stmt = $cnn->prepare('SELECT UserName, Password FROM login WHERE UserName = :user');
$stmt->bindParam(':user', $user);
$stmt -> execute();
$row = $stmt->fetch(PDO::FETCH_OBJ);
print $row->Password;
if(password_verify($pass, $row->Password)){
echo 'hellow';
}
}
function Register($user, $pass){
$pass = password_hash($pass, PASSWORD_DEFAULT);
$userdb = 'root';
$passdb = '';
$cnn = new PDO('mysql:host=localhost;dbname=siteTest', $userdb, $passdb);
$stmt = $cnn->prepare('INSERT INTO login (UserName, Password) VALUES (:user, :pass)');
$stmt->bindParam(':user', $user);
$stmt->bindParam(':pass', $pass);
$stmt -> execute();
return true;
}
?>
J'accepterais avec plaisir de l'aide :)
Merci beaucoup!!
2 réponses
-
Bonjour,
1 - Place le code de connexion à ta BDD à part ... pour ne pas avoir à la réécrire à chaque fois ...
2 - Active la gestion des erreurs PDO
voir ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
3 - Voici un petit exemple :<?php // fichier de connexion à la bdd : cnxBdd.php function get_cnx(){ $bdd = NULL; try{ $bdd = new PDO('mysql:host=localhost;dbname=siteTest', $userdb, $passdb); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } return $bdd; }
-
- https://www.php.net/manual/fr/function.password-verify.php
- As tu vérifié ce que contenait ta variable $row->Password ?
- Ton champ Password dans ta BDD est dimensionné à combien de caractères ?
- Tu as fais un echo du hash dans ta fonction register pour voir si la valeur en BDD est correctement stockée ?
- Tu as quelle version de php ?
-
Hello,
C'est bon j'ai trouvé. J'avais hashé le mot de passe avant de le mettre dans le verify.
Et il y a LARGEMENT moyen d'optimiser tout ça. Le but de ce test était justement de me remettre dans le bain. L'optimisation peut-être que je m'en occuperai plus tard.
Voici mon code en vrac:index.php <?php session_start(); include('head.php'); $error = ''; $userName = ''; $password = ''; $bLogin = false; $bRegister = false; //VERIFIE SI FORMULAIRE ENVOYÉ OU PAS if(isset($_POST['deco'])){ session_destroy(); } if(isset($_POST['userName']) && isset($_POST['pass'])){ if(!empty($_POST['userName']) && !empty($_POST['pass'])){ $userName = $_POST['userName']; $password = $_POST['pass']; if(isset($_POST['valider'])){ $bLogin = Login ($userName, $password); if($bLogin == true){ $_SESSION['user'] = $userName; } else{ echo "LOGIN OU MOT DE PASSE INVALIDE"; } } if(isset($_POST['register'])){ $bRegister = Register($userName, $password); if($bRegister == true){ $_SESSION['user'] = $userName; } } } else{ $error = 'Veuillez remplir tous le champs!'; } } ?> <!DOCTYPE HTML> <html> <body> <!-- FORMULAIRE AVEC LOGIN MDP --> <div id="divIndex1"> <form action="<?=$_SERVER['PHP_SELF']?>" method="POST"> <label class="login">Nom d'utilisateur</label><input class="inputLogin" type="text" name="userName" /><br/> <label class="login">Mot de passe</label><input class="inputLogin" type="password" name="pass"><br/> <label id="login-submit"><?php echo $error; ?></label><input class="inputLogin" type="submit" name="valider" value="valider"/> <input class="inputLogin" type="submit" name="register" value="s'enregistrer"/><br/> <?php if(isset($_SESSION['user'])){echo $_SESSION['user'];} ?> </form> <form action="<?=$_SERVER['PHP_SELF']?>" method="POST"> <input class="inputLogin" type="submit" name="deco" value="se déconnecter"/> </form> </div> </body> <?php include('footer.php'); ?> </html>
<?php
function Login($user, $pass){
$userdb = 'root';
$passdb = '';
$cnn = new PDO('mysql:host=localhost;dbname=siteTest', $userdb, $passdb);
$stmt = $cnn->prepare('SELECT UserName, Password FROM login WHERE UserName = :user');
$stmt->bindParam(':user', $user);
$stmt -> execute();
$row = $stmt->fetch(PDO::FETCH_OBJ);
print $row->Password;
if (password_verify($pass, $row->Password)) {
return true;
} else {
return false;
}
}
function Register($user, $pass){
$pass = password_hash($pass, PASSWORD_DEFAULT);
$userdb = 'root';
$passdb = '';
$cnn = new PDO('mysql:host=localhost;dbname=siteTest', $userdb, $passdb);
$stmt = $cnn->prepare('INSERT INTO login (UserName, Password) VALUES (:user, :pass)');
$stmt->bindParam(':user', $user);
$stmt->bindParam(':pass', $pass);
$stmt -> execute();
return true;
}
?>MySQL.php
Encore merci pour ton aide Jordane45
Bonne soirée!
-
-
Histoire d'améliorer un peu :
Index.php<?php session_start(); include('head.php'); $error = ''; $bLogin = false; $bRegister = false; //VERIFIE SI FORMULAIRE ENVOYÉ OU PAS if(isset($_POST['deco'])){ session_destroy(); } // Récupération PROPRE des variables AVANT de les utiliser : $userName = !empty($_POST['userName']) ? $_POST['userName'] : NULL; $password = !empty($_POST['pass']) ? $_POST['pass'] : NULL; $user = isset($_SESSION['user']) ? $_SESSION['user'] : ""; if($userName && $pass)){ if(isset($_POST['valider'])){ $bLogin = Login ($userName, $password); if($bLogin == true){ $_SESSION['user'] = $userName; } else { echo "LOGIN OU MOT DE PASSE INVALIDE"; } } if(isset($_POST['register'])){ $bRegister = Register($userName, $password); if($bRegister == true){ $_SESSION['user'] = $userName; } } } else{ $error = 'Veuillez remplir tous le champs!'; } ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf8"> <title></title> </head> <body> <!-- FORMULAIRE AVEC LOGIN MDP --> <div id="divIndex1"> <form action="" method="POST"> <label class="login">Nom d'utilisateur</label><input class="inputLogin" type="text" name="userName" /><br/> <label class="login">Mot de passe</label><input class="inputLogin" type="password" name="pass"><br/> <label id="login-submit"><?php echo $error; ?></label><input class="inputLogin" type="submit" name="valider" value="valider"/> <input class="inputLogin" type="submit" name="register" value="s'enregistrer"/><br/> <?php echo $user;} ?> </form> <?php if(!empty($user)){ ?> <form action="" method="POST"> <input class="inputLogin" type="submit" name="deco" value="se déconnecter"/> </form> <?php } ?> </div> </body> <?php include('footer.php'); ?> </html>
Fichier de connexion à la bdd<?php // fichier de connexion à la bdd : cnxBdd.php function get_cnx(){ $bdd = NULL; $userdb = 'root'; $passdb = ''; try{ $bdd = new PDO('mysql:host=localhost;dbname=siteTest', $userdb, $passdb); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } return $bdd; }
Tes autres codes :<?php //Import fichier de connexion à la bdd require_once "cnxBdd.php"; /** * Foncion LOGIN */ function Login($user, $pass){ $cnn = get_cnx(); try{ $stmt = $cnn->prepare('SELECT UserName, Password FROM login WHERE UserName = :user'); $stmt->bindParam(':user', $user); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_OBJ); }catch(Exception $e){ echo "Error !" .$e->getMessage(); } //print $row->Password; return password_verify($pass, $row->Password) ? true : false ; } /** * Foncion REGISTER */ function Register($user, $pass){ $pass = password_hash($pass, PASSWORD_DEFAULT); $cnn = $cnn = get_cnx(); try{ $stmt = $cnn->prepare('INSERT INTO login (UserName, Password) VALUES (:user, :pass)'); $stmt->bindParam(':user', $user); $stmt->bindParam(':pass', $pass); $result = $stmt->execute(); }catch(Exception $e){ echo "Error !" .$e->getMessage(); $result = false; } return $result; }