vérification d'un mot de passe

Eléphanteau du PHP | 38 Messages

22 mai 2015, 11:36

bonjour :) ,
j'ai un problème de versification de mot de passe d'un utilisateur mais j'arrive pas faire
voici mon programme et aidez moi a corriger merci
<?php

try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=projets;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}


$nom=$_POST['textfield'];
$pass=$_POST['textfield2'];
if(empty($nom)||empty($pass)){
echo"Veuillez saisir tous les Champs"; }
else {

$reponse = $bdd->query('SELECT * FROM password where nomp = $nom AND passwd= $pass ');
$req->execute(array($_POST['textfield'], $_POST['textfield2']));


$donnees = $reponse->fetch() ;

if(!$donnees)
die (" Le nom d'Utilisateur $nom n'existe pas !!");
$pw=$donnees['passwd'];
if(trim($pw)==trim($pass)){
echo "le nom est <br>";
echo $pw ;
include('sarah.html');
}
else {
echo" mot de passe erronner";}


}
$reponse->closeCursor();









?>

Avatar du membre
Mammouth du PHP | 1609 Messages

22 mai 2015, 13:00

Salut, ce serait plus lisible indenté et avec la balise d'affichage de code PHP.

J'ai repris ton code en corrigeant 2, 3 choses et y ai glissé quelques remarques :
<?php

try {
  /* On se connecte à MySQL */
  $bdd = new PDO('mysql:host=localhost;dbname=projets;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch(Exception $e) {
  die('Erreur : '.$e->getMessage());
}

$nom  = $_POST['textfield'];
$pass = $_POST['textfield2'];

if(empty($nom) || empty($pass)) {
  echo "Veuillez saisir tous les Champs"; 
} else {
  $reponse = $bdd->query("SELECT * FROM password WHERE nomp = '$nom' AND passwd = '$pass'");/* avec des apostrophes autour des champs textes */
  /* pourquoi cette ligne ? la requête est exécutée juste au dessus. $req->execute(array($nom, $pass)); */

  $donnees = $reponse->fetch();

  if(!$donnees)
    die ("Le nom d'Utilisateur $nom n'existe pas !!");
	
  $pw = $donnees['passwd'];
  if(trim($pw) == trim($pass)) {/* pourquoi ce test étant donnée que dans la requête on a passwd = '$pass', si une ligne est retournée c'est forcément le bon mot de passe... */
    echo "le nom est <br>";
    echo $pw ;/* nom n'est pas égal à $pw, ça c'est passwd */
    include('sarah.html');
  } else {
    echo "mot de passe erronner";
  }
	
  $reponse->closeCursor();
}
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 38 Messages

22 mai 2015, 14:39

merci beaucoup pour votre aide

ViPHP
AB
ViPHP | 5818 Messages

29 mai 2015, 22:38

Salut,

Attention !

Il y a un trou de sécurité majeur dans le code ci-dessus : avec la méthode "query" il faut impérativement utiliser la fonction "quote" pour protéger les variables, les guillemets évitent une erreur mais ne protègent rien.

Et particulièrement pour des données utilisateur on préfère faire des requêtes préparées pour assurer une meilleure protection.

Il y a un tuto ici (script d'inscription + script de connexion).