Login - Password PHP
Résolu
M_Tufux
Messages postés
85
Statut
Membre
-
jordane45 Messages postés 40051 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 40051 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!!
A voir également:
- Password_verify
- Vu password - Télécharger - Confidentialité
- On me demande mon login ✓ - Forum Webmastering
- Mon pc me demande mon login é mon mo de passe - Forum Windows
- Easy php - Télécharger - Divers Web & Internet
- Portail mpsa login ✓ - Forum Réseau
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 :
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;
}
Histoire d'améliorer un peu :
Index.php
Fichier de connexion à la bdd
Tes autres codes :
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;
}
- 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 ?
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;
}
?>
Encore merci pour ton aide Jordane45
Bonne soirée!