Verification de mot de passe

Résolu
chasseur2 Messages postés 33 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 10 mai 2009 - 1 mars 2009 à 13:48
chasseur2 Messages postés 33 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 10 mai 2009 - 5 mars 2009 à 11:14
SALUT LES PRO:
 j'ai un problème avec la fonction MD5( ) car lorsque j'ai inscrit et que les données sont enregistrer dans ma base de données le temps ou  je veux comparer avec le mot  de passe stocké dans ma base de données et le mot de passe saisie par l'user je trouve un concordance avec les deux mot de passe pour être claire voila le lien de ma scripte il contient un fichier login.php et enregistrer.php et un fichier pour crée la base de données et un photos montre la concordance entre les deux mots de passe et merci
le lien<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>

18 réponses

chasseur2 Messages postés 33 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 10 mai 2009
2 mars 2009 à 12:57
merci pour votre patience j'ai resulu le probleme et voilà le scripte login.php

<html>
<head><title>Login</title></head>

<?php


  $con = mysql_connect('localhost','root','');
  $db = mysql_select_db('MA_BASE_DE_DONNEES',$con);




  if (!empty($_POST['nom']) and ($_POST['pass1'] )) {
   
   $passs = md5($_POST['pass1']);
   
   $nom = $_POST['nom'];
 
  $pas = substr($passs,-2);
 
  $pas3 = rtrim(md5($_POST[pass1]),$pas);
 
  $qy = "SELECT * FROM user WHERE pseudo LIKE '$nom' OR pass LIKE '$pas3'";
 
  $requete = mysql_query($qy);
 
  $result = mysql_fetch_array($requete);
 
  $passd = $result[pass];
   
      if ($pas3 $passd and  $nom $result[pseudo]) {
   
   
   
   echo "Bienvenue "." ".$_POST['nom']." "." vous étes dejà enregister chez nous";
   
  }
  else {  
   echo $qy ;
      echo "
" ;
   echo "S'il vous plais enregistrer d'abord";
   echo "
" ;
   echo "Enregistrer
"."
";
   echo "Pass de la base de donnée est :". $passd ."
";
   echo "Pass de ma form Login est &nbsp;&nbsp;&nbsp;&nbsp; :". $passs ."
";
   echo "";
   print_r($result);
   echo "

";
   
     
   
   }
  }else{
   
  echo <<<HTML
   

  <form action ="login.php" method= "POST">
    Entrer votre Nom :
    Entrer votre Mot de passe :
  
  
  </form>
 
 

HTML;
  }
 


?>

</html>

aussi j'ai tester votre suggestion coucour747 avec un amelioration il me donne même resultat

<html>
<head><title>Login</title></head>

<?php


  $con = mysql_connect('localhost','root','');
  $db = mysql_select_db('MA_BASE_DE_DONNEES',$con);




  if (!empty($_POST['nom']) and ($_POST['pass1'] )) {
   
   $passs = md5($_POST['pass1']);
   
   $nom = $_POST['nom'];
 
 $pas = substr($passs,-2);
 
 $pas3 = rtrim(md5($_POST[pass1]),$pas);
 
  $qy = "SELECT * FROM user WHERE pseudo LIKE '$nom' AND pass LIKE '$pas3'";
 
  $requete = mysql_query($qy);
   
   if ($result = mysql_fetch_array($requete)) {
   
   
   
   echo "Bienvenue "." ".$_POST['nom']." "." vous étes dejà enregister chez nous";
   
  }
  else {  
   echo $qy ;
      echo "
" ;
   echo "S'il vous plais enregistrer d'abord";
   echo "
" ;
   echo "Enregistrer
"."
";
   echo "Pass de la base de donnée est :". $passd ."
";
   echo "Pass de ma form Login est &nbsp;&nbsp;&nbsp;&nbsp; :". $passs ."
";
   echo "";
   print_r($result);
   echo "

";
   
     
   
   }
  }else{
   
  echo <<<HTML
   

  <form action ="login.php" method="POST">
    Entrer votre Nom :
    Entrer votre Mot de passe :
  
  
  </form>
 
 

HTML;
  }
 


?>

</html>

essai de le tester chez vous peut etre il devien utile pour vous
3
chasseur2 Messages postés 33 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 10 mai 2009
4 mars 2009 à 11:27
merci coucou encor une fois pour votre patience et vraiment si je veux une verification exacte je doit utiliser l'operateur = a la palce de LIKE
mais tu sais ou se trouve la source de ce probleme c'est la :

CREATE TABLE `user` (
 `id` int(11) NOT NULL auto_increment,
 `pseudo` varchar(30) collate utf8_unicode_ci NOT NULL,
 `pass` varchar(30) collate utf8_unicode_ci NOT NULL,  // varchar(32)
 `email` varchar(50) collate utf8_unicode_ci NOT NULL,
 `date_enregi` date NOT NULL,
 `photos` varchar(50) collate utf8_unicode_ci NOT NULL,
 PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

parceque moi j'ai mis un champs varchar de 30 carractere et la fonction MD5 nous donne un cryptage de 32 bit c'est pourquoi je trouve toujours un manque de deux chiffre lorsque je compare entre le mot de passe stocké dans la BDD et le mot de passe de ma formule alors c'est inutile d' utiliser le rtrim() et le substr()
je fais des test et sa marche bien
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 mars 2009 à 14:21
salut
like n'est pas une verification d'egalite, remplace like par =.

if ($passs $passd and $nom $result[pseudo]) {

elle sert a quoi cette condition ?

tu l'as deja faite dans la requete SQL...

ensuite, met TOUJOURS une verification d'erreur quand tu fais une requete sql (comme ca tu seras averti si elle plante.)
0
chasseur2 Messages postés 33 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 10 mai 2009
1 mars 2009 à 14:39
 


Salut coucou747<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>


merci beaucoup pour votre réponse mais j'ai déjà essais de mettre l'opérateur =  et aucune résultat , et le rôle de condition if ($passs == $passd and  $nom == $result[pseudo]) {  c'est lorsqu la requête $qy trouve une pseudo ou un mot de passe identique  déjà stocké dans ma BDD elle vérifie si le pseudo et le mot de passe sont de la même personne mais la requête juste nous cherche s'il existe un pseudo ou un mot de passe et merci +++<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /??><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 11.25pt; HEIGHT: 11.25pt" alt="" type="#_x0000_t75"><v:imagedata o:href="http://www.phpcs.com/imgs2/smile_question.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></v:imagedata></v:shape>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 mars 2009 à 14:48
en sql, la comparaison c'est : = et pas ==
0
chasseur2 Messages postés 33 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 10 mai 2009
1 mars 2009 à 15:07
Merci coucou747
 mais ou j'ai utiliser la comparaison avec l'opérateur = = dans mysql si tu parle sur la condition <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>




if ($passs $passd and $nom $result[pseudo]) {








je te dis que ça n'appartient pas la requête $qy si tu parle d'autre chose aller montrer le à moi  j'ai le pas vu et merci infiniment
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 mars 2009 à 15:19
bah ca

if ($passs $passd and $nom $result[pseudo]) {

ca ne sert a rien...

faut faire la verification en SQL
0
chasseur2 Messages postés 33 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 10 mai 2009
1 mars 2009 à 15:40
merci coucou747 à nouveau et je te dis que tu ne copmrend pas mon scripte et la comparaisi se fait comme suit si il existe une resultat dans ma BDD equivalane a celui qui transfere par l'user la requete $qy nous la monter et si nous avons fait comme vous dit if ($passs <gras>$passd and $nom $result[pseudo]) {</gras>

cela signifie que nous avons affecter la resultat a la variable $pass et ça ce n'est pas notre but alors
il  nous faut comparer le resultat qui est stocké dans le tableau $result[] avec la varible



$passs = md5($_POST['pass1']);    =
 






$nom = $_POST['nom'];                    = 

et si la condition est reel la condition va  montrer a l'user le




else {


echo $qy ;


echo "
" ;


echo "S'il vous plais enregistrer d'abord";


echo "
" ;


echo "Enregistrer
"."
";


echo "Pass de la base de donnée est :". $passd ."
";


echo "Pass de ma form Login est &nbsp;&nbsp;&nbsp;&nbsp; :". $passs ."
";


echo "";


print_r($result);


echo "

";











}
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 mars 2009 à 16:09
mais .... je t'ai dit de le faire en SQL pas en php...
en SQL tu fous un LIKE a la place d'un =.

c'est pas toi qui va m'apprendre le php hein...
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
2 mars 2009 à 16:20
... t'as rien compris

je parlais de ca :




$qy = "SELECT * FROM user WHERE pseudo LIKE '$nom' OR pass LIKE '$pas3'";

que tu dois remplacer par :




$qy "SELECT * FROM user WHERE pseudo '$nom' AND pass = '$pas3'";


ton script ne fonctionne pas si deux personnes ont le meme password.
0
chasseur2 Messages postés 33 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 10 mai 2009
3 mars 2009 à 11:50
mais je l'ai tester et ça fonction correctement
 
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
3 mars 2009 à 11:56
$qy = "SELECT * FROM user WHERE pseudo LIKE '$nom' OR pass LIKE '$pas3'";

non...
0
chasseur2 Messages postés 33 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 10 mai 2009
3 mars 2009 à 12:26
si nous avons mettre l'operateur OR ça donnes le chois entre le pseudo ou le mot de passe alors pour annuler tous ça en impose avec AND de chercher s'il y  qulelqu'un qui possede un pseudo et un mot de passe
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
3 mars 2009 à 16:12
ouais mais dans ton code, t'avais mis OR.

et de toute facon, tu devrais virer ton like parce-que la, pseudo et pseud% sont la meme personne.

tu ne veux pas vrifier si pseudo est comme '$pseudo' mais si pseudo est EGAL a $pseudo.

mais bon, je vais arreter d'ecrire ici puisque tu ne lis pas ce que j'ecris...
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
4 mars 2009 à 13:37
alors ton code pue la merde et peut planter.
0
chasseur2 Messages postés 33 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 10 mai 2009
4 mars 2009 à 13:50
comment coucou747
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
4 mars 2009 à 14:01
suffit d'avoir deux debuts de md5 identiques pour deux passwords differents et deux logins differents, vu ton OR et ton LIKE, ca va planter.

mais pourquoi tu ne veux pas agrandir ton champ et faire les choses correctement ?
0
chasseur2 Messages postés 33 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 10 mai 2009
5 mars 2009 à 11:14
merci coucou747 j'ai dejà rectifier les erreurs et aussi j'ai aggrendi la taille des champs merci
moi lorsque tu me dis que mon scripte il peut plater j'ai refflichi sur l'injection 'or''=' mais chez moi j'ai fais la foction mysql_real_escape_string() et merci beaucoup 
0
Rejoignez-nous