Problème PHP (LOGIN)

ffx
Eléphanteau du PHP | 10 Messages

05 mars 2009, 13:04

Bonjour à tous,
Voici le script que j'utilise pour me loger et je ne trouve pas l'erreur. il me dit chaque fois mot de passe incorrect. j'ai tout retourner et je ne vois vraiment pas.

Merci à vous.
<?
    require("include/config.php");
    $message ="<strong><font size='1'><center>Entrez votre identifiant et votre mot de passe</strong></font></center>";
    if(isset($_COOKIE["ID_UTILISATEUR"]))
{
     header("Location: index.php?p=myaccount");
}
else
{
     
     // Formulaire visible par défaut
     $masquer_formulaire = false;
     
     // Une fois le formulaire envoyé
     if(isset($_POST["bt_envoyer"]))
     {
         
          // Vérification de la validité des champs
          if(!ereg("^[A-Za-z0-9_]{3,20}$", $_POST["bt_identifiant"]))
          {
            $message = "<strong><font size='1'><center>Votre nom d'utilisateur doit comporter entre 3 et 20 caractères</strong></font></center><br />\n";
          }
          elseif(!ereg("^[A-Za-z0-9]{4,}$", $_POST["bt_mdp"]))
          {
               $message = "<strong><font size='1'><center>Votre mot de passe doit comporter au moins 4 caractères</strong></font></center>";
          }
          else
          {
               
               // Connexion à la base de données
               // Valeurs à modifier selon vos paramètres configuration
                        $ouvre=mysql_connect($adresse,$login,$pass);
                        mysql_select_db($nom_db);
               
               // Sélection de l'utilisateur concerné
               $result = mysql_query("
                    SELECT id, identifiant, mdp, compte_active
                    FROM membres
                    WHERE identifiant = '" . $_POST["bt_identifiant"] . "'
               ");
               
               // Si une erreur survient
               if(!$result)
               {
                    $message = "<strong><font size='1'><center>Une erreur est survenue lors de la tentative de connexion</font></strong></center>";
               }
               else
               {
                   
                    // Si aucun utilisateur n'a été trouvé
                    if(mysql_num_rows($result) == 0)
                    {
                         $message = "<strong><font size='1'><center>Le nom d'utilisateur <font color='red'>" . $_POST["bt_identifiant"] . "</font> n'existe pas</font></strong></center>";
                    }
                    else
                    {
                         
                         // Récupération des données
                         $row = mysql_fetch_array($result);
                         
                         // Si le compte n'a pas été activé
                         if($row["compte_active"] == 0)
                         {
                              $message = "<strong><font size='1'><center>Votre compte utilisateur n'a pas été activé</font></strong></center>";
                         }
                         else
                         {
                             
                              // Vérification du mot de passe
                              if(md5($_POST["bt_mdp"]) != $row["mdp"])
                              {
                                   $message = "<strong><font size='1'><center>Votre mot de passe est incorrect</font></strong></center>";
                              }
                              else
                              {
                                   
                                   // Définition du temps d'expiration des cookies
                                   $expiration =
                                        empty($_POST["bt_connect"]) ? 0 : time() + 90 * 24 * 60 * 60;
                                   
                                   // Création des cookies
                                   setcookie("ID_UTILISATEUR", $row["id"], $expiration, "/");
                                   setcookie("NOM_UTILISATEUR", $row["identifiant"], $expiration, "/");
                                   
                                   // Fermeture de la connexion à la base de données
                                   mysql_close();
                                   
                                   // Redirection de l'utilisateur
                                   header("Location: index.php?p=myaccount");
                                   
                              }
                             
                         }
                         
                    }
                   
               }
               
               // Fermeture de la connexion à la base de données
               mysql_close();
               
          }
         
     }
     
}
?>[php]
[/php]
Modifié en dernier par ffx le 05 mars 2009, 15:47, modifié 1 fois.

Eléphant du PHP | 70 Messages

05 mars 2009, 13:47

Je suppose que le mot de passe avec lequel tu tentes de te connecté est crypté avec md5 aussi dans mysql

ffx
Eléphanteau du PHP | 10 Messages

05 mars 2009, 14:05

mais encore?

Eléphant du PHP | 70 Messages

05 mars 2009, 14:09

Ce que je voulais te dire c'était de vérifier que ton mot de passe est bien enregistré en crypter dans la base de donnée. Ca peut paraitre con, mais ca arrive d'oublier.

ffx
Eléphanteau du PHP | 10 Messages

05 mars 2009, 14:10

Ce que je voulais te dire c'était de vérifier que ton mot de passe est bien enregistré en crypter dans la base de donnée. Ca peut paraitre con, mais ca arrive d'oublier.
je suppose que c'est crypté dans la db sa me met des caractère de se style( c5470237f9a2f04f64ac ) rien avoir avec le mdp que je rentre. du moins si c'est sa le md5 (jamais test)

Eléphant du PHP | 70 Messages

05 mars 2009, 14:18

Oui c'est bien ça.
Pour debbuger, afficher ton mot de passe et celui de ta base de donnée.
echo md5($_POST["bt_mdp"]);
echo row["mdp"]);
// Vérification du mot de passe 
if(md5($_POST["bt_mdp"]) != $row["mdp"]) 
{ 
$message = "<strong><font size='1'><center>Votre mot de passe est incorrect</font></strong></center>"; 
} 
Tu pourras ainsi déjà vérifier si les deux mots de passes sont identiques ou pas.
Celà t'aidera à identifier l'erreur.

ffx
Eléphanteau du PHP | 10 Messages

05 mars 2009, 14:23

Oui c'est bien ça.
Pour debbuger, afficher ton mot de passe et celui de ta base de donnée.
echo md5($_POST["bt_mdp"]);
echo row["mdp"]);
// Vérification du mot de passe 
if(md5($_POST["bt_mdp"]) != $row["mdp"]) 
{ 
$message = "<strong><font size='1'><center>Votre mot de passe est incorrect</font></strong></center>"; 
} 
Tu pourras ainsi déjà vérifier si les deux mots de passes sont identiques ou pas.
Celà t'aidera à identifier l'erreur.
Chaque fois que je veut verifier l'erreur j'ai cette erreur.

Parse error: parse error, expecting `','' or `';'' in c:\program files\easyphp\www\snl\login.php on line 71

mais je vois pas le probleme des ; ou ' , "

Eléphant du PHP | 70 Messages

05 mars 2009, 14:25

echo row["mdp"]; au lieu de echo row["mdp"]);
Autant pour moi :-)

ffx
Eléphanteau du PHP | 10 Messages

05 mars 2009, 14:29

echo row["mdp"]; au lieu de echo row["mdp"]);
Autant pour moi :-)
Oui j'ai vu aussi juste après avoir poster. donc:

fb5c45bf34c0a9a937163899dec330e1 = echo md5($_POST["bt_mdp"])
c5470237f9a2f04f64ac = echo $row["mdp"]

apparament sa rentre pas le bon mdp de celui de la db

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 mars 2009, 15:12

Modération :
ffx, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Peux-tu éditer ton premier message afin de les y ajouter et rendre ton code lisible ?

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
AB
ViPHP | 5818 Messages

05 mars 2009, 15:47

Evidemment si tu ne connais pas l'encryptage utilisé pour tes mdp enregistrés dans la bdd ça va être difficile. En tous cas cela ne génère pas du hash md5 puisque ce sont des chaines de 32 caractères (et 40 pour le sha1).
Pourtant dans ton script tu as
if(md5($_POST["bt_mdp"]) != $row["mdp"]) 
ce qui laisse à penser que tes mdp devraient être enregistrés dans ta bdd avec md5.

Donc soit tu as un un pb avec ton script d'inscription, soit ton champ mdp est de type varchar 20 ce qui tronque l'enregistrement md5 et cause le pb.

ffx
Eléphanteau du PHP | 10 Messages

05 mars 2009, 15:52

Evidemment si tu ne connais pas l'encryptage utilisé pour tes mdp enregistrés dans la bdd ça va être difficile. En tous cas cela ne génère pas du hash md5 puisque ce sont des chaines de 32 caractères (et 40 pour le sha1).
Pourtant dans ton script tu as
if(md5($_POST["bt_mdp"]) != $row["mdp"]) 
ce qui laisse à penser que tes mdp devraient être enregistrés dans ta bdd avec md5.

Donc soit tu as un un pb avec ton script d'inscription, soit ton champ mdp est de type varchar 20 ce qui tronque l'enregistrement md5 et cause le pb.
et comment je pourrais le voir? (varchar(20) pour le mdp)

Eléphant du PHP | 70 Messages

05 mars 2009, 16:11

Regarde au niveau de ta base de donnée.
PHPMyAdmin surement.

ffx
Eléphanteau du PHP | 10 Messages

05 mars 2009, 16:33

Regarde au niveau de ta base de donnée.
PHPMyAdmin surement.
voir quoi? la j'ai mon mdp(20) je doit le changer en quoi?

Eléphant du PHP | 70 Messages

05 mars 2009, 16:57