création mot de passe aléatoire
			
		
	
	
		le 30/06/2005 à 12:12
		Laddy
	 
	
		bonjour,
j'ai un problème avec mon script pour créer un mot de passe aléatoire, le membre entre son email et pseudo via un formulaire à la validation  il reçoit le nouveau mot de passe crée aléatoirement par email.
A l'origine le mot de passe est scripté en md5 dans la base de donnée.
d'après ce que je vois, le mot de passe ne change pas dans la base.
est ce quelqu'un pourrait me dire où ça cloche ?
je débute en php/mysql donc mon raisonnement n'est peut etre pas clair, j'ai oublié peut etre des choses.
D'avance merci aux membres qui m'aideront.
http://www.lephpfacile.com/wall/wall.php?id=2318	 
	
			
		
	
	
		le 30/06/2005 à 15:00
		Bzh
	 
	
		Cela ne viendrait-il pas de ta clause ???
Si sa ne retourne pas d' erreur sql et si ce n' est  pas modifié dans ta base c' est que tu as un problème avec la clause login.
Fais un echo $login afin d' être sur de la valeur de $login.
Ensuite, je n' ai pa tout saisi. Tu parle de md5() dans ta base OR je ne vois pas a quel moment tu passes ton mot de passe par la fonction md5(). Peut être un simple oublie...
Bye...	
			
				
		
			
		
	
	
		le 30/06/2005 à 15:07
		Laddy
	 
	
		le mot de passe est crypté à l'inscription pour le moment.
je ne peux donc pas extraire le mot de passe pour l'envoyer par email, la fonction est irreversible.
pour la clause peut etre tout les echo ne passent pas.	
	
			
		
	
	
		le 30/06/2005 à 15:15
		Laddy
	 
	
	
			
		
	
	
	
		Meme si tu crées un mot de passe aléatoire, il faut lui coller un md5 aux fesses avant de le mettre en base.
Sinon, la personne ne pourra pas se connecter.
Apres, pourquoi l'update ne se lance pas, j'en sais rien.
Fais un echo de ta requete SQL et colle la dans ton phpmyadmin pour voir.
PS : elle sert à quoi cette requete ? => $requete=mysql_db_query($base,"select login from adherent where login=\"$login\"",$db_link) or die(mysql_error());	
	
			
		
	
	
		le 30/06/2005 à 18:53
		Bzh
	 
	
		Ha mon avi sa viendrait de ta clause !!!
Si aucune modification n' est faite c' est tout simplement parce que ta clause (where) n' est jamais vrai...
S' il y avait une erreur dans ta requette il y a de grandes chances pour qu' un message d' erreur apparaisse...
Mais de toute façon il faut que tu modifie ton code comme cela pour le md5() =>
<?php
$requete=mysql_db_query($base,"update adherent set passwd=\"$passwd\" where  login=\"".md5($login)."\"",$db_link) or die(mysql_error());
 
?>
 	 
	
			
		
	
	
		le 01/07/2005 à 10:30
		Laddy
	 
	
		bonjour Bzh et ,
cette requette 
$requete=mysql_db_query($base,"select login from adherent where login=\"$login\"",$db_link) or die(mysql_error());
je pensai m'en servir pour verifier si le login est bien dans la base et si il n'y est pas alors il renvoie vers l'inscription.
pour le moment je ne vois pas comment m'y prendre.
pour la requete je pensai que le codage md5 n'etait pas obligatoire de suite hors il est logique que oui puisque à la connexion il passe à la mouillette md5.
je suis perdue....	
	
			
		
	
	
		le 01/07/2005 à 11:08
		Laddy
	 
	
		Bzh il y a une erreur dans ta requete c'est le mot de passe qui est crypté et non le login ;-)	
	
			
		
	
	
		le 01/07/2005 à 13:12
		Bzh
	 
	
		Oups !!!! Désolé !!! Oui !!!
<?php
$requete=mysql_db_query($base,"UPDATE adherent SET passwd=\"".md5($passwd)."\" WHERE  login=\"$login\"",$db_link) or die(mysql_error());
?>
 
Se sera beaoucp mieu en effet ... Je suis allé trop vite.
je pensai m'en servir pour verifier si le login est bien dans la base et si il n'y est pas alors il renvoie vers l'inscription.
pour le moment je ne vois pas comment m'y prendre.
 
Et bien peut être comme cela =>
<?php
//Notre requette ne ve retourner qu' un seul résultat qui sera le nombre de login trouvé qui est égal a la variable '$login'
$requete=mysql_db_query($base,"SELECT count(login) FROM adherent WHERE login=\"$login\"",$db_link) or die(mysql_error());
$resultat = mysql_fetch_row($requete);
if( $resultat[0] == 0 ){  
//Ton traitement si le login n' est pas dans la base
}
else{
//Ton traitement si le login est déja dans la base
}
?>
 
Voila la façon dont j' aurais fait mon code. Il peut y avoir des erreurs car je n' ai pas vérifié le code.
Si j' ai bien compris ton problème cela devrait marcher.
Bye...	
 
	
			
		
	
	
		le 01/07/2005 à 13:22
		Laddy
	 
	
		tu me soulages un peu, effectivement c'est comme ça que je prévoyais la chose.
J'ai ajouté ce que je pensai mettre dans ton code.
<?php
//Notre requette ne ve retourner qu' un seul résultat qui sera le nombre de login trouvé qui est égal a la variable '$login'
$requete=mysql_db_query($base,"SELECT count(login) FROM adherent WHERE login=\"$login\"",$db_link) or die(mysql_error());
$resultat = mysql_fetch_row($requete);
if( $resultat[0] == 0 ){  
//Ton traitement si le login n' est pas dans la base
header("Location:form_inscription.php");
}
else{
//Ton traitement si le login est déja dans la base
$taille = 20;
	$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
	srand(time());
	for ($i=0;$i<$taille;$i++)
		{
		$id.=substr($lettres,(rand()%(strlen($lettres))),1);
		}
$requete=mysql_db_query($base,"UPDATE adherent SET passwd=\"".md5($passwd)."\" WHERE  login=\"$login\"",$db_link) or die(mysql_error());
echo "votre nouveau mot de passe vous a été envoyé à votre adresse email.";
}
?>