Condition IF ne fonctionne pas.

Condition IF ne fonctionne pas. - PHP - Programmation

Marsh Posté le 21-03-2010 à 14:15:41    

Bonjour.  
 
Pour un projet de GSI je suis en train de codé un site.
 
Je bloque sur une condition IF qui ne fonctionne pas. En effet je voudrais verifier si le login et le mot de passe entrés dans le formulaire correspondent au login / mot de passe dans la base de données.
 
Voici mon script :
 

Code :
  1. <?php
  2. //Protection anti XSS
  3. $login = htmlspecialchars($_POST['login']);
  4. $password = htmlspecialchars($_POST['password']);
  5. $login_bdd="";
  6. $password_bdd="";
  7. $id_bdd="";
  8. //Si on a le login ET le mot de passe ne sont pas vide on continue d'execute le script
  9. if (!empty($login) && !empty($password))
  10. {
  11.  // Recherhce dans la table du login et du mot de passe.
  12.  $db=mysql_connect("127.0.0.1","root","" ) or die ("Erreur de connection." );
  13. mysql_select_db("projet",$db) or die ("Erreur de table." );
  14. $sql = "SELECT `utilisateur`.`login_utilisateur`, `utilisateur`.`password_utilisateur`,`id`\n"
  15.  . "FROM `utilisateur`\n"
  16.  . "WHERE (`utilisateur`.`login_utilisateur` = \"$login\" )\n"
  17.  . " ";
  18. $resultat_sql=mysql_query($sql);
  19.  while ($données = mysql_fetch_assoc($resultat_sql))
  20. {
  21.  $login_bdd = $données['login_utilisateur'];
  22.  $password_bdd = $données['password_utilisateur'];
  23.  }
  24.   if (($password_bdd != $password) && ($login_bdd != $login))     {
  25.      echo "Le login ou le mot de passe est incorect.";
  26.     }
  27.      else
  28.      //Une fois que le couple login formulaire et login BDD (+ mot de passe) sont correcte on peut
  29.      //attribué l'id de l'utilisateur a une varibale pour en faire une variable de SESSION qui nous
  30.      // sert a authentifier l'utlisateur dans tout le site.
  31.       {
  32.        while ($données = mysql_fetch_assoc($resultat_sql))
  33.         {
  34.         $id_bdd = $données['id'];
  35.         }
  36.       // Variable de sessions.
  37.       $_SESSION['login_utilisateur']= $login_bdd;
  38.       $_SESSION['password_utilisateur'] = $password_bdd;
  39.       $_SESSION['id_bdd'] = $id_bdd;
  40.       echo "MA FUTURE PAGE D'ADMINISTRATION";
  41.       }
  42.  }
  43. else
  44.  {
  45.   echo "Vous devez remplir tout les champ du formulaire.";
  46.  }
  47. ?>


 
Si je met un bon login mais un mauvais mot de passe j'ai acces a la futur page d'admin. Par contre si je me trompe de login j'ai bien le message d'erreur attendu.
 
J'ai l'impresion que le script verifie l'exactitude uniquement sur le login et non le mot de passe.
 
Quand je fait par exemple  
 

Code :
  1. if ($password == $password_bdd)
  2. {
  3. echo "Les mot de passe sont identique";
  4. }
  5. else
  6. {
  7. echo "Les mot de passe sont differants";
  8. }


 
J'ai bien la reponse : Les mot de passe sont identique ...  
 
 
Je ne comprend pas mon erreur.
 
 
Merci

Reply

Marsh Posté le 21-03-2010 à 14:15:41   

Reply

Marsh Posté le 21-03-2010 à 14:28:12    

ligne 40, remplace && par ||
 
Tu testes sur login incorrect et mot de passe incorrect. Tu dois tester sur login incorrect ou mot de passe incorrect.

Reply

Marsh Posté le 21-03-2010 à 14:58:51    

Non justement :)
 
Je veux que le login  ET  le mot de passe soit valide.
 
Si je met un OU l'utlisateur peut rentre un login valide et un mot de passe bidon et il rentrera dans la page d'administration


Message édité par Jordan_67 le 21-03-2010 à 14:59:24
Reply

Marsh Posté le 21-03-2010 à 15:23:48    

C'est toi qui a tort.
Relis ton test : actuellement tu ne passes dans le echo "Le login ou le mot de passe est incorect."; que si le mdp ET le login sont incorrects.
Tu veux n'y passer que si l'un OU l'autre est incorrect.

 

Et réciproquement tu ne veux pas y passer si l'un ET l'autre sont corrects, ce qui t'a induit en erreur. Je te suggère de lire un petit cours sur les opérateurs booléens, et éventuellement le theoreme de morgan qui a plus ou moins trait à ce genre de choses.


Message édité par TotalRecall le 21-03-2010 à 15:23:58

---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 21-03-2010 à 15:26:48    

Autre chose : ton script est vulnérable à l'injection SQL, on peut très très facilement contourner ton authentification. Tu dois protéger tes chaînes de caractères avant de les passer aux requêtes (mets injection sql php dans google pr en savoir +).


---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 21-03-2010 à 15:32:26    

Autant pour moi.
 
Un grand merci a vous ça fonctionne.
 
Je vais me renseigné pour l'injection sql

Reply

Marsh Posté le 21-03-2010 à 16:22:14    

En faisant ça suis-je protegé des injections SQL ?
 

Code :
  1. $login = htmlspecialchars($_POST['login']);
  2. $login = mysql_real_escape_string($login);
  3. $password = htmlspecialchars($_POST['password']);
  4. $password = mysql_real_escape_string($password);

Reply

Marsh Posté le 21-03-2010 à 16:58:30    

Non pas bon je continue mes recherches

Reply

Marsh Posté le 21-03-2010 à 17:52:59    

Pourquoi pas bon ? Utiliser mysql_real_escape_string est bien la chose à faire (l'une des nombreuses possibilités en tout cas)


---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 21-03-2010 à 18:58:41    

Parce que j'ai des message d'erreur
 

Code :
  1. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'Jordan'@'@localhost' (mot de passe: NON) in C:\Program Files\EasyPHP5.3.0\www\projet\authentification.php on line 6
  2. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files\EasyPHP5.3.0\www\projet\authentification.php on line 6
  3. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Accès refusé pour l'utilisateur: 'Jordan'@'@localhost' (mot de passe: NON) in C:\Program Files\EasyPHP5.3.0\www\projet\authentification.php on line 9
  4. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\Program Files\EasyPHP5.3.0\www\projet\authentification.php on line 9

Reply

Marsh Posté le 21-03-2010 à 18:58:41   

Reply

Marsh Posté le 21-03-2010 à 19:12:07    

La connexion à la bdd doit avoir été ouverte avant de pouvoir appeler mysql_real_escape_string. En mettant tes messages d'erreur dans google tu l'aurais vu très vite !


---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 21-03-2010 à 20:15:23    

Exact.
 
Un grand merci a vous tous :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed