Signaler

Login - Password PHP [Résolu]

Posez votre question M_Tufux 65Messages postés dimanche 11 octobre 2015Date d'inscription 12 mars 2017 Dernière intervention - Dernière réponse le 7 févr. 2017 à 18:33 par jordane45
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.

<?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!!
Afficher la suite 
Utile
+0
plus moins
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 : http://www.commentcamarche.net/faq/46512-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;
}




jordane45 16501Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 mars 2017 Dernière intervention - 6 févr. 2017 à 17:01
Et pour l'utiliser, il te suffit de faire :
$cnn = get_cnx();
Répondre
M_Tufux 65Messages postés dimanche 11 octobre 2015Date d'inscription 12 mars 2017 Dernière intervention - 7 févr. 2017 à 09:39
Yeep merci pour ta réponse, mais ça ne répond pas à ma première question qui était "pourquoi Est-ce que le password_verify ne fonctionne pas"
Répondre
jordane45 16501Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 mars 2017 Dernière intervention - 7 févr. 2017 à 10:17
http://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 ?
Répondre
M_Tufux 65Messages postés dimanche 11 octobre 2015Date d'inscription 12 mars 2017 Dernière intervention - 7 févr. 2017 à 16:44
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!
Répondre
Donnez votre avis
Utile
+0
plus moins
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;
} 
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !