Mot de passe oublié, envois par mail nouveau automatiquement

Ziwa
Invité n'ayant pas de compte PHPfrance

14 avr. 2006, 10:04

Le but étant que si la personne a oublié leur mot de passe, un nouveau généré automatiquement est envoyé à l'adresse email qu'il a fourni lors de l'inscription

Je boucle, mes messages d'erreur s'affichent autant de fois qu'il y a d'enregistrements.

J'ai pas du tout la bonne logique de raisonnement au secours
<? 
$pseudo=$_POST['pseudo']; 
$mail=$_POST['mail']; 

$ident="select * from dh_users"; 
$identification= mysql_query($ident); 
$nb=mysql_num_rows($identification); 

$i=0; 

while ($i<$nb) 
{ 


$utilisateur=mysql_result($identification,$i,'pseudo'); 
$password =mysql_result($identification,$i,'password'); 


// ------------------TEST SI L ADRESSE EMAIL A UN FORMAT VALABLE ------------------------ 


$atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]'; // caractères autorisés avant l'arobase 
$domain = '([a-z]([-a-z0-9]*[a-z0-9]+)?)'; // caractères autorisés après l'arobase (nom de domaine) 

$regex = '^' . $atom . '+' . // Une ou plusieurs fois les caractères autorisés avant l'arobase 
'(\.' . $atom . '+)*' . // Suivis par zéro point ou plus 
// séparés par des caractères autorisés avant l'arobase 
'@' . // Suivis d'un arobase 
'(' . $domain . '{1,63}\.)+' . // Suivis par 1 à 63 caractères autorisés pour le nom de domaine 
// séparés par des points 
$domain . '{2,63}$'; // Suivi de 2 à 63 caractères autorisés pour le nom de domaine 

// test de l'adresse e-mail 
if (eregi($regex, $email)) 
{ 

if (($utilisateur==$pseudo)||($password==$mail)) 
{ 
echo "Un Email va vous être envoyé avec un nouveau mot de passe, veuillez consulter vos mails à l'adresse que vous avez fourni lors de votre inscription"; 
//--------------------------------------------- GENERE UN NOUVEAU MOT DE PASSE --------------------------------- 


// La fonction 'srand' initialise le générateur de nombres aléatoires 
srand ((double) microtime() * 1000000); 
// initialise avec les microsecondes depuis la dernière seconde entière 

$nb_car_pass = rand(6, 8); 
// ici on fait un randomize pour choisir aléatoirement le nombre de caractère du mot de passe 

$tableau_car = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", 1, 2, 3, 4, 5, 6, 7, 8, 9); 
// On crée un tableau contenant les lettres et chiffres que l'on souhaite intégrer dans le mot de passe...plus on en met, plus la protection sera efficace et la génération plus diversifiées. 


for ($i = 0; $i< $nb_car_pass; $i++){ //une petite boucle pour concaténer les caractères entre eux... 
$password .= $tableau_car[rand(0, count($tableau_car) - 1)];} 
// on fait un autre random pour choisir au hasard le caractère dans le tableau 







// ----------------------------------------- ENVOIS DU NOUVEAU MOT DE PASSE PAR EMAIL ------------------------------------ 


$destinataire='$mail'; 


$from = "From: www.biofinesse.com\n"; 
$from .= "MIME-version: 1.0\n"; 
$from .= "Content-type: text/html; charset= iso-8859-1\n"; 


$titre= 'Votre nouveau mot de passe'; 

$contenu= ' 
<html><head></head><body> 
Vous recevez cet e-mail parce que vous avez demandé à ce qu\'un nouveau mot de passe vous soit envoyé pour votre compte sur www.biofinesse.com . 
<br><br>Votre nouveau mot de passe :<b>'.$password.'</b> 
<br><br>Si vous désirez changer de mot de passe, ou choisir votre mot de passe vous même, merci de nous contacter à travers le site, ou à l\'adresse suivante info@biofinesse .com 
</body> 
</html>'; 

mail($destinataire,$titre,$contenu,$from); 



} 
else 
{ 
echo "Mot de passe incorrect"; 
} 
} 
else 
{ 
echo "L'adresse e-mail $email n'est pas valide"; 
} 
$i++; 
} 

?> 

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 avr. 2006, 10:46

Pourquoi ramener tous les utilisateurs et boucler pour comparer leurs email et pseudo, au lieu de juste ramener l'enregistrement qui t'interesse ???
$ident="select * from dh_users where pseudo = '$pseudo' and email='$email'"; 
$identification= mysql_query($ident); 
...
Tu ne devrais ainsi avoir qu'un seul résultat, donc pas besoin de boucle... il ne te reste plus qu'à modifier son mot de passe et lui envoyer le résultat par mail :)

fds
Invité n'ayant pas de compte PHPfrance

14 avr. 2006, 12:08

Ouais mais non (je même plus sur de comprendre la logique que j'ai utilisé)

J'ai aucun raisonnement en prog -_-

La, j'arrive directement sur la page avec les bons mot de passe et pseudo, quoiqu'il arrive avec n'importe quel couple pseudo mot de passe ça passe.

Comment je test si cette requete existe effectivement? Isset? Je veux dire qu'ils sont effectivement bon

Ziwa
Invité n'ayant pas de compte PHPfrance

18 avr. 2006, 08:29

=)