Verification de mot de passe [Résolu]

chasseur2 34 Messages postés vendredi 3 mars 2006Date d'inscription 10 mai 2009 Dernière intervention - 1 mars 2009 à 13:48 - Dernière réponse : chasseur2 34 Messages postés vendredi 3 mars 2006Date d'inscription 10 mai 2009 Dernière intervention
- 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" /??>
Afficher la suite 

18 réponses

Répondre au sujet
chasseur2 34 Messages postés vendredi 3 mars 2006Date d'inscription 10 mai 2009 Dernière intervention - 2 mars 2009 à 12:57
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de chasseur2
chasseur2 34 Messages postés vendredi 3 mars 2006Date d'inscription 10 mai 2009 Dernière intervention - 4 mars 2009 à 11:27
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de chasseur2
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 1 mars 2009 à 14:21
0
Utile
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.)
Commenter la réponse de coucou747
chasseur2 34 Messages postés vendredi 3 mars 2006Date d'inscription 10 mai 2009 Dernière intervention - 1 mars 2009 à 14:39
0
Utile
 


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>
Commenter la réponse de chasseur2
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 1 mars 2009 à 14:48
0
Utile
en sql, la comparaison c'est : = et pas ==
Commenter la réponse de coucou747
chasseur2 34 Messages postés vendredi 3 mars 2006Date d'inscription 10 mai 2009 Dernière intervention - 1 mars 2009 à 15:07
0
Utile
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
Commenter la réponse de chasseur2
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 1 mars 2009 à 15:19
0
Utile
bah ca

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

ca ne sert a rien...

faut faire la verification en SQL
Commenter la réponse de coucou747
chasseur2 34 Messages postés vendredi 3 mars 2006Date d'inscription 10 mai 2009 Dernière intervention - 1 mars 2009 à 15:40
0
Utile
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 "

";











}
Commenter la réponse de chasseur2
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 1 mars 2009 à 16:09
0
Utile
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...
Commenter la réponse de coucou747
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 2 mars 2009 à 16:20
0
Utile
... 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.
Commenter la réponse de coucou747
chasseur2 34 Messages postés vendredi 3 mars 2006Date d'inscription 10 mai 2009 Dernière intervention - 3 mars 2009 à 11:50
0
Utile
mais je l'ai tester et ça fonction correctement
 
Commenter la réponse de chasseur2
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 3 mars 2009 à 11:56
0
Utile
$qy = "SELECT * FROM user WHERE pseudo LIKE '$nom' OR pass LIKE '$pas3'";

non...
Commenter la réponse de coucou747
chasseur2 34 Messages postés vendredi 3 mars 2006Date d'inscription 10 mai 2009 Dernière intervention - 3 mars 2009 à 12:26
0
Utile
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
Commenter la réponse de chasseur2
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 3 mars 2009 à 16:12
0
Utile
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...
Commenter la réponse de coucou747
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 4 mars 2009 à 13:37
0
Utile
alors ton code pue la merde et peut planter.
Commenter la réponse de coucou747
chasseur2 34 Messages postés vendredi 3 mars 2006Date d'inscription 10 mai 2009 Dernière intervention - 4 mars 2009 à 13:50
0
Utile
comment coucou747
Commenter la réponse de chasseur2
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 4 mars 2009 à 14:01
0
Utile
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 ?
Commenter la réponse de coucou747
chasseur2 34 Messages postés vendredi 3 mars 2006Date d'inscription 10 mai 2009 Dernière intervention - 5 mars 2009 à 11:14
0
Utile
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 
Commenter la réponse de chasseur2

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.