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.";
}
?>