Page 1 sur 1

Un mot de passe correct... incorrect!

Posté : 01 avr. 2006, 17:44
par Victor BRITO
Salut à tous!

Soit une page index.php, où l'on inscrit un nouvel identifiant, avec mot de passe. Ce dernier est crypté dans la base de données. L'identifiant est bien enregistré dans la base de données et le mot de passe y est bien crypté.

Dans une autre page (verif.php), je souhaite vérifier l'identifiant et le mot de passe précédemment enregistrés. Même si le mot de passe est correct, tout se passe comme s'il ne l'était pas. :shock:

Voici le code des pages en question. Je tiens à préciser que je n'ai aucun message d'erreur.

index.php
<?php 
$connexion=mysql_connect("localhost", "root", "") || die("Impossible de se connecter au serveur de la base de donn&eacute;es.");
$base=mysql_select_db("babase") || die("Impossible de se connecter &agrave; la base de donn&eacute;es.");

if (isset($_POST["pseudo"])) $pseudo=$_POST["pseudo"]; else $pseudo="";
if (isset($_POST["motdepasse"])) $motdepasse=$_POST["motdepasse"]; else $motdepasse="";
if (isset($_POST["id"])) $id=$_POST["id"]; else $id="";
$cryptage=md5($motdepasse);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Index</title>
</head>

<body>
<?php if (!isset($_POST["pseudo"]) || !isset($_POST["motdepasse"])){?>
<form name="form1" method="post" action="">
  <input name="pseudo" type="text" id="pseudo">
  <input name="motdepasse" type="password" id="motdepasse">
  <input name="id" type="hidden" id="id">
  <input name="go" type="submit" id="go" value="Envoyer">
</form>
<?php }
else{
	$s="INSERT INTO admin (pseudo, motdepasse) VALUES ('$pseudo', '$cryptage')";
	$r=mysql_query($s);
	if (mysql_insert_id()==0) echo '&Eacute;chec';
	else{
		$id=mysql_insert_id();
		echo '<a href="verif.php">V&eacute;rifions</a>';
	}
}
?>
</body>
</html>
verif.php
<?php 
$connexion=mysql_connect("localhost", "root", "") || die("Impossible de se connecter au serveur de la base de donn&eacute;es.");
$base=mysql_select_db("babase") || die("Impossible de se connecter &agrave; la base de donn&eacute;es.");

if (!isset($_POST["pseudo"])) $pseudo=""; else $pseudo=$_POST["pseudo"];
if (!isset($_POST["motdepasse"])) $motdepasse=""; else $motdepasse=$_POST["motdepasse"];
$cryptage=md5($motdepasse);

if (!isset($_POST["pseudo"]) || !isset($_POST["motdepasse"])){
	$etape=1;
	$message='<p>&nbsp;</p>';
}
else{
	$s="SELECT * FROM admin WHERE pseudo='$pseudo' AND motdepasse='$cryptage'";
	$r=mysql_query($s);
	if (mysql_num_rows($r)!=0){
		$etape=2;
		$message='<p>Mot de passe bien d&eacute;crypt&eacute;.</p>';
	}
	else{
		$etape=3;
		$message='<p>PHPFrance, on a un probl&egrave;me.</p>';
	}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>V&eacute;rification</title>
</head>

<body>
<?php 
echo $message;
if ($etape!=2){
?>
<form name="form1" method="post" action="">
  <input name="pseudo" type="text" id="pseudo">
  <input name="motdepasse" type="password" id="motdepasse">
  <input name="go" type="submit" id="go" value="Envoyer">
</form>
<?php 
}
?>
</body>
</html>
Et si vous voulez bien essayer, voici les requêtes SQL nécessaires à la base de données.

Code : Tout sélectionner

CREATE DATABASE babase; CREATE TABLE admin ( id tinyint(4) NOT NULL auto_increment, motdepasse varchar(16) NOT NULL default '', pseudo varchar(5) NOT NULL default '', PRIMARY KEY (id) );

Posté : 01 avr. 2006, 17:53
par Truc
Salut,
Même si le mot de passe est correct, tout se passe comme s'il ne l'était pas
Mais encore... tu peux peut être nous aider en disant dans quel cas tu te retrouves :wink:
Quelle est la valeur de $message au final ?

Mais sinon j'aime bien ça:
$message='<p>[b]PHPFrance[/b], on a un probl&egrave;me.</p>'; 
:lol:

Posté : 01 avr. 2006, 17:56
par Victor BRITO
Salut!

Justement, la valeur de $message exécutée est: "PHPFrance, on a un problème".

Posté : 01 avr. 2006, 18:02
par Truc
affiche la requête généérée => echo $s;
et exécute directement dans phpmyadmin pour voir ce qu'il di lui :)

Posté : 01 avr. 2006, 18:18
par Victor BRITO
Salut!

echo $s m'affiche ceci:
SELECT * FROM admin WHERE pseudo='Admin' AND motdepasse='9e3e5fa2ff943ae5fae7f68016471864'
PHPMyAdmin me dit que la requête "SELECT * FROM admin WHERE pseudo='$pseudo' AND motdepasse='$cryptage'" a été exécutée avec succès et me réaffiche la requête telle quelle, sans message d'erreur.

Et ce pour le $s de verif.php.

Posté : 01 avr. 2006, 19:04
par Truc
La longueur du champ "motdepasse" n'est pas adaptée. Passe de 16 à 32

Posté : 01 avr. 2006, 20:42
par Victor BRITO
Salut!

Je suis passé à 32 et le mot de passe correct redevient correct. Merci beaucoup, Truc, pour ce truc. :wink:

Sujet résolu.