Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2008, 23h26   #1
Futur Membre du Club
 
Inscription : août 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 31
Points : 15
Points : 15
Par défaut [SQL] Comparaison de mots de passe

Bonjour à tous.

Pour la création d'un site, j'ai une base de donnée mysql dans laquelle des utilisateurs s'inscrivent en choisissant un mot de passe.
Celui-ci est stocké après l'avoir codé par la fonction password.

Quand mon utilisateur revient sur le site, je voudrais qu'il puisse se connecter. Je teste donc l'égalité entre le password qu'il rentre, une fois encodé, et le password encodé contenu dans la base. Mais ça ne marche pas....

Quand je fais mes tests :
Code :
1
2
3
4
5
if(PASSWORD($password)=password){
echo "1";
} else{
echo "2";
}
(où $password est la valeur rentrée dans le formulaire, et password est obtenu depuis la table),
j'obtiens toujours la valeur 1.

Alors que si je fais un code similaire avec le nom d'utilisateur, j'obtiens bien 1 si le nom est dans la base et 2 sinon...

Merci de me venir en aide, je tourne en rond !!
Simpom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 08h16   #2
Membre du Club
 
Ingénieur d'études et développement
Inscription : décembre 2005
Messages : 109
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études et développement

Informations forums :
Inscription : décembre 2005
Messages : 109
Points : 55
Points : 55
Envoyer un message via MSN à estacado
heu je dis peut-être des bétieses mais tu n'es pas censé comparé deux variables ?

et avoir quelque chose de ce type
Code :
PASSWORD($password_saisie)==$password_table
De plus un seul = dans un if c'est une affectation. Il faut == pour faire une comparaison en php.
estacado est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 09h39   #3
Futur Membre du Club
 
Inscription : août 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 31
Points : 15
Points : 15
En fait le password sans $ c'est le nom de mon champ dans ma base sql. D'où l'abscence de $ !

Ensuite j'ai voulu faire un pseudo-code pour expliquer mon problème... et j'ai mis un = là où il fallait un ==.

Pour être précis sur mon problème, ma page contient un formulaire, qui exécute la fonction suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
function formFunction( $nom, $prenom, $password ){
 
$dq = mysql_connect('monhote', 'user', 'password');
mysql_select_db('nomdelabase',$db);
 
$sql = "SELECT * from nomTable WHERE prenom=$prenom AND nom=$nom";
$req = mysql_query( $sql ) or die([...]);
 
// traitement des données avec une boucle while et un mysql_fetch_assoc($req)
 
mysql_close($db);
}
Ca ça tourne. Seulement si je demande à ma ligne sql la commande :
Code :
1
2
 
$sql = "SELECT * from nomTable WHERE prenom=$prenom AND nom=$nom AND PASSWORD($password)=password";
dans ce cas la variable data ne contient plus rien...
Simpom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 12h09   #4
Invité de passage
 
Inscription : octobre 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 10
Points : 3
Points : 3
Par défaut une version simpa

voila se que j'utilise et je n'est pas de problèmes mais j'utilise SHA1 pour crypter le mot de pass

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
<?PHP
function displayLogin() {
header("WWW-Authenticate: Basic realm=\"My Website\"");
header("HTTP/1.0 401 Unauthorized");
echo "<h2>Authentication Failure</h2>";
echo "The username and password provided did not work. Please reload this page and try again.";
exit;
}
 
include("../_connect.php");
 
if (!isset($PHP_AUTH_USER) || !isset($PHP_AUTH_PW)) {
displayLogin();
} else {
$PHP_AUTH_USER = addslashes($PHP_AUTH_USER);
$PHP_AUTH_PW = sha1($PHP_AUTH_PW);
 
$result = mysql_query("SELECT count(userID) FROM users WHERE upass='$PHP_AUTH_PW' AND uname='$PHP_AUTH_USER'") or die("Couldn't query the user-database.");
	$num = mysql_result($result, 0);
 
	if (!$num) {
		displayLogin();
	}
}
 
if ($_REQUEST['logout'] == true) {
displayLogin();
} 
?>
wzcocoon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 12h13   #5
Futur Membre du Club
 
Inscription : août 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 31
Points : 15
Points : 15
C'est là où je suis malin : je viens de me rendre compte du problème alors que j'ai déjà des utilisateurs qui se sont inscrits sur ma base

Donc si je change la fonction de codage du password, ils n'auront plus accès à la base de données...

Oui je sais, je cumule...
Simpom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 13h16   #6
Membre régulier
 
Inscription : octobre 2007
Messages : 286
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 286
Points : 96
Points : 96
Tiens si cela peut t'aider j'utilise ceci pour me connecter :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$pseudo="'".mysql_escape_string($_REQUEST['pseudo'])."'"; 
$mdp=mysql_escape_string($_REQUEST['mdp']); 
 
$resultat=mysql_query("SELECT * FROM formulaire WHERE login=$pseudo",$connexion); 
echo mysql_error();
if (empty($pseudo) || empty($mdp)){
  header('Location: authentification.html');
}
else{
if ($resultat) {
  $users=mysql_fetch_array($resultat);
  if ($users["pwd"] == $mdp)
    {
    $_SESSION["valid_user"]=1;
    header('Location: index1.php');
    }
  else {
  header('Location: authentification.html');
  }
}
else {
  header('Location: authentification.html');
}
}
kev484 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 17h15   #7
Membre régulier
 
Inscription : octobre 2007
Messages : 286
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 286
Points : 96
Points : 96
Alors est-ce que cela vous a servi?
kev484 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2008, 17h42   #8
Futur Membre du Club
 
Inscription : août 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 31
Points : 15
Points : 15
Je suis en train de me rendre compte que je suis un des plus gros boulets de ma génération...
Je stocke mon password sur 15 caractères dans ma base. Or la fonction password($pwd) sql retourne un mot de passe stocké sur... 16 !!!!

Donc je vais aller me flageller et demander aux personnes de ma base de se réinscrire !

Merci quand même de m'avoir répondu aussi rapidement.
Simpom est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h55.


 
 
 
 
Partenaires

Hébergement Web