Page 1 sur 2

Problème PHP (LOGIN)

Posté : 05 mars 2009, 13:04
par ffx
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]

Posté : 05 mars 2009, 13:47
par Sodams
Je suppose que le mot de passe avec lequel tu tentes de te connecté est crypté avec md5 aussi dans mysql

Posté : 05 mars 2009, 14:05
par ffx
mais encore?

Posté : 05 mars 2009, 14:09
par Sodams
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.

Posté : 05 mars 2009, 14:10
par ffx
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)

Posté : 05 mars 2009, 14:18
par Sodams
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.

Posté : 05 mars 2009, 14:23
par ffx
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 ' , "

Posté : 05 mars 2009, 14:25
par Sodams
echo row["mdp"]; au lieu de echo row["mdp"]);
Autant pour moi :-)

Posté : 05 mars 2009, 14:29
par ffx
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

Posté : 05 mars 2009, 15:12
par Ryle
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

Posté : 05 mars 2009, 15:47
par AB
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.

Posté : 05 mars 2009, 15:52
par ffx
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)

Posté : 05 mars 2009, 16:11
par Sodams
Regarde au niveau de ta base de donnée.
PHPMyAdmin surement.

Posté : 05 mars 2009, 16:33
par ffx
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?

Posté : 05 mars 2009, 16:57
par Sodams