Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1304 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Condition IF ne fonctionne pas.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Condition IF ne fonctionne pas.

n°1975666
Jordan_67
Posté le 21-03-2010 à 14:15:41  profilanswer
 

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

mood
Publicité
Posté le 21-03-2010 à 14:15:41  profilanswer
 

n°1975672
jeff@be
Posté le 21-03-2010 à 14:28:12  profilanswer
 

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.

n°1975678
Jordan_67
Posté le 21-03-2010 à 14:58:51  profilanswer
 

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
n°1975690
TotalRecal​l
Posté le 21-03-2010 à 15:23:48  profilanswer
 

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

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°1975691
TotalRecal​l
Posté le 21-03-2010 à 15:26:48  profilanswer
 

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 +).


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°1975692
Jordan_67
Posté le 21-03-2010 à 15:32:26  profilanswer
 

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

n°1975713
Jordan_67
Posté le 21-03-2010 à 16:22:14  profilanswer
 

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);

n°1975725
Jordan_67
Posté le 21-03-2010 à 16:58:30  profilanswer
 

Non pas bon je continue mes recherches

n°1975733
TotalRecal​l
Posté le 21-03-2010 à 17:52:59  profilanswer
 

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


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°1975749
Jordan_67
Posté le 21-03-2010 à 18:58:41  profilanswer
 

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

mood
Publicité
Posté le 21-03-2010 à 18:58:41  profilanswer
 

n°1975752
TotalRecal​l
Posté le 21-03-2010 à 19:12:07  profilanswer
 

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 !


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°1975766
Jordan_67
Posté le 21-03-2010 à 20:15:23  profilanswer
 

Exact.
 
Un grand merci a vous tous :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Condition IF ne fonctionne pas.

 

Sujets relatifs
Structure conditionnelle avec ELSE IF Javascript[resolut]ma page ne fonctionne plus sous un include??
Condition non null pour rentrer dasn ma boucleSous-menu déroulant CSS ne fonctionne pas sous IE
$_SERVER['HTTP_REFERER'] ne fonctionne pas toujoursVariable / Comparaison / Condition
Access 2007 left join qui fonctionne comme inner join ???[AJAX] Ne fonctionne pas sous IE ...
Générateur qui ne fonctionne pasmatlab, tracé d'un cercle avec condition
Plus de sujets relatifs à : Condition IF ne fonctionne pas.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR