Page 1 sur 1

Erreur systématique dans formulaire login

Posté : 05 sept. 2008, 12:04
par Stef
Bonjour chers phpiens et phpiennes (y en a?)!!

J'ai un fichier php de traitement de formulaire de login qui ne fonctionne pas, j'ai essayé plein de truc différent, rien à faire:
<?php
session_start();

// Message

if (empty($_POST['nom']) || empty($_POST['mdp']) ) //Oublie d'un champ
{
        $message = '<h3>Erreur</h3>
		<p>Une erreur s\'est produite pendant ton authentification.
        Tous les champs doivent être rempli!<br />
        <a href="connect.php">Retourner</a> au formulaire</p>';
}
else
{
        //Acces interdit : le membre est déjà connecté
        if (isset($_SESSION['nom']))
        {
                $message ='<p>Tu es déjà connecté...</p>';
        }
        else // Autorisation ok : il reste à voir le mot de passe
        {
        include("includes/db.php");
        mysql_connect($host, $root, $mdp);
        mysql_select_db($db);


        //On protège les données
        $pseudo = mysql_real_escape_string($_POST['nom']);
        $password = mysql_real_escape_string($_POST['mdp']);

        $requete = mysql_query('SELECT mdp
        FROM mb_users WHERE nom = "'.$pseudo.'"')
        or die (mysql_error());
        $data = mysql_fetch_assoc($requete);

        if ($data['mdp'] == md5($password)) // Acces OK !
        {

                $_SESSION['nom'] = $pseudo;

                $message = '<h3>Bienvenue '.stripslashes(htmlspecialchars($_SESSION['nom'])).'</h3>
                <p>Tu es maintenant connecté!</p>';

         }
         else // Acces pas OK !
         {
                $message = '<h3>Erreur<h3><p>Une erreur s est produite
                pendant ton authentification.
                Le mot de passe ou le pseudo entré n\'est pas correcte.</p>
                <p>Revenir au <a href="connect.php">formulaire d\'identification</a>.</p>';
          }
       }
}

$titre = "Music*boX v.3 :: connection +";
include ('includes/top.php');
?>
Il passe systématiquement sur le dernier else bien que le pseudo et le mdp soit correct... Je ne comprends vraiment pas pourquoi!
Que faire?

Posté : 05 sept. 2008, 12:16
par guilt92
Question stupide : tes mots de passe ont bien été entrés en md5 dans la base ? :)

Aussi tu pourrais te passer du mysql_fetch_assoc et faire directement :
$pseudo = mysql_real_escape_string($_POST['nom']); 
        $password = mysql_real_escape_string($_POST['mdp']); 

        $requete = mysql_query('SELECT nom
        FROM mb_users WHERE nom = "'.$pseudo.'" AND mdp = "'.md5($password).'"'); 
        or die (mysql_error()); 
        if (mysql_num_rows($requete)) // Acces OK ! 
Ca change pas grand chose mais ca évite une opération de traitement ;)

Posté : 05 sept. 2008, 12:19
par @rthur
Bonjour,

Fait un echo de $data['mdp'], $password et md5($password) pour t'assurer que tes conditions soient bien validées

Posté : 05 sept. 2008, 12:26
par Stef
Pour:
echo $data['mdp']; echo '<br />';
				echo $password;   echo '<br />';
				echo md5($password); echo '<br />';
voilà les réponses:

81dc9bdb52d04dc20036dbd8313ed0
1234
81dc9bdb52d04dc20036dbd8313ed055

Et voilà le mdp tel qu'encodé dans la table:

81dc9bdb52d04dc20036dbd8313ed0

Je suis très désappointé... pourquoi l'ajout de ces 2 caractères sur le md5($passowrd)?

Posté : 05 sept. 2008, 12:50
par guilt92
C'est pas plutot ton insertion en base qui est erronée ? tu as pas un nombre limite de caractère dans ton champ mot de passe qui aurait coupé le mdp ?

Comment as tu fait l insertion des mdp en base ?

Posté : 05 sept. 2008, 12:56
par Stef
Je pense que ça doit être ça... j'avais mis un varchar 30 pour le champ mdp.

Posté : 05 sept. 2008, 13:49
par doctorrock
32 le md5, 32 8-)

Posté : 05 sept. 2008, 14:43
par Stef
Merci à tous!! c'est cool :wink: