Problème avec le mot de passe dans mon script de connexion

Eléphanteau du PHP | 29 Messages

03 juin 2009, 13:44

Bonjour tout le monde !

J'ai créé un formulaire d'inscription (formulaire.php) qui grâce à une page d'envoi (envoi.php) envoie des infos à propos de l'utilisateur dans une BDD (PHPMyAdmin). J'ai ensuite créé un formulaire de connexion (connexion.php) afin de permettre à l'utilisateur de se connecter au site. S'il est reconnu comme inscrit il est envoyé sur une nouvelle page (externalisation.php). Le problème c'est que peu importe le mot de passe j'arrive à accèder à la page suivante (externalisation.php). Que le mot de passe soit correct ou incorrect, ça marche. Donc effectivement ça me pose problème :P

Voici ma page de code :
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("externalisation");


if (!empty($_POST['nom']) && !empty($_POST['mot_de_passe']))

{
$nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
$mot_de_passe = mysql_real_escape_string(htmlspecialchars($_POST['mot_de_passe']));
//Cryptage $passe avec la fonction "sha1"
$mot_de_passe = sha1($mot_de_passe);
$nbre = mysql_query("SELECT COUNT(*) AS exist FROM connexion WHERE pseudo='$nom'");
$donnees = mysql_fetch_array($nbre);
if($donnees['exist'] != 0) //Si le pseudo existe
{
$quete = mysql_query("SELECT * FROM connexion WHERE pseudo='$nom'");
$infos = mysql_fetch_array($quete);
if($passe == $infos['mot_de_passe'])
{
//Code servant à effectuer la connexion, car le mot de passe est bon
}
else //Si ce n'est pas le bon couple pseudo/mdp
{
echo 'Vous n\'avez pas rentré les bons identifiants';
}
mysql_close(); // On ferme la connexion
}
}

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >


<head>

<title>Connexion</title>

<link href="../style/style.css" rel="stylesheet" type="text/css" />
<link href="../style/layout.css" rel="stylesheet" type="text/css" />

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>


<body id="page1">
<div class="min_width">
<div id="site_center">
<div id="main">

	<!-- Contenu -->
	<div id="content">
    <div class="line_1"></div>
        <p align="center" class="sstitre">Connexion </p>
        <div class="line_1"></div>
        <div class="indent">
        <p align="center">&nbsp;</p>
        
        <form action="externalisation.php" method="post">
			
	 		<label for="nom">Nom d'utilisateur :</label> <input type="text" name="nom" id="nom" /> <br>
			<label for="mot_de_passe">Mot de passe :</label> <input type="password" name="mot_de_passe" id="mot_de_passe" /> <br>
<br>
<br>
			<p align="left"> <input type="submit" value="se connecter" /> </p>
	   
		</form>	  
        </div>

        
	<div id="Layer1" style="position:absolute; left:381px; top:26px; width:48px; height:37px; z-index:1"><a href="./../index.php"><img src="../images/retour.jpg" alt="" width="19" height="23" /></a></div>
	</div>
	
	<!-- footer -->
</div>	
</div>
</div>
</body>
</html>
Quelqu'un pourrait-il m'aider SVP ? :D

Eléphant du PHP | 94 Messages

03 juin 2009, 14:00

Je pense que ton erreur vient du fait que tu utilises la variable $passe alors que tu as définie plus tôt la variable $mot_de_passe.
$mot_de_passe = sha1($mot_de_passe); 
[...]
if($passe == $infos['mot_de_passe']) 

Tu peux aussi t'épargner une requête.
Tu peux compter directement le nombre d'entrées comportant le même mot de passe, en plus du pseudo.
Exemple :
$nbre = mysql_query("SELECT COUNT(*) AS exist FROM connexion WHERE pseudo='$nom' AND mot_de_passe='$mot_de_passe'");
$donnees = mysql_fetch_array($nbre);
if($donnees['exist'] != 0) //Si le pseudo existe
{
//Code servant à effectuer la connexion, car le mot de passe est bon
}
else //Si ce n'est pas le bon couple pseudo/mdp
{
echo 'Vous n\'avez pas rentré les bons identifiants';
} 

ViPHP
AB
ViPHP | 5818 Messages

03 juin 2009, 14:06

Il y a beaucoup de fautes dans ton script.
Un tuto détaillé avec code fonctionnel ici

Eléphanteau du PHP | 29 Messages

03 juin 2009, 14:14

Geoffroy : J'ai changé la variable $mot_de_passe mais le problème reste le même :(

AB : A quel niveau y a t-il des fautes STP ? Mon code n'est pas entièrementfaux quand même :shock:

ViPHP
AB
ViPHP | 5818 Messages

03 juin 2009, 14:34

Oui quand j'ai dit qu'il y avait beaucoup de fautes, je voulais dire qu'il y en avait plus que celle indiquée par geoffroy.

Notamment tu ne devrais pas avoir à utiliser htmlspecialchars() et puis le sha1 devrait être utilisé avant la fonction mysql_real_escape_string(). Bref beaucoup de fautes qui me font penser qu'il doit y en avoir d'autres par ailleurs, et que le tuto que j'ai mentionné plus haut devrait t'être très profitable http://www.phpfrance.com/forums/voir_sujet-242539.php (d'autant plus que le code étant fonctionnel tu peux tester très facilement).

Eléphanteau du PHP | 29 Messages

03 juin 2009, 17:55

Oulala ça me semble bien compliqué ça :?

ViPHP
AB
ViPHP | 5818 Messages

03 juin 2009, 20:07

Nan, c'est pas compliqué sauf si tu veux aller trop vite.

Bon il y a juste les lignes mentionnant l'utf-8 qui pourraient être oubliées si tu souhaite travailler uniquement pour les langues latines (iso 8859-1 ou iso 8859-15) mais à part ça c'est le minimum syndical pour un code portable (qui passe partout). A y regarder de plus près tu verras qu'il y a des similitudes avec ton code.