Récupération de mot de passe php

jordxn Messages postés 356 Date d'inscription   Statut Membre Dernière intervention   -  
jordxn Messages postés 356 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai commencé un moyen de récupération de mot de passe via mon site en entrant son mail , cela renvoie le pseudo et un mot de passe aléatoire( car le mdp est crypté dès l'inscription) mais il me manque plein de chose...


<?php

if (!empty($_POST['email']))
{
mysql_connect("localhost", "*******", "*******");
mysql_select_db("********");

$reponse = mysql_query("SELECT username, password FROM users WHERE email='". $_POST['email'] ."'") or die (mysql_error());
$donnees = mysql_fetch_array($reponse);

mail($donnees['email'], "Vos identifiants ", identifiant : $donnees['username'] mot de passe : $donnees['password']);

mysql_close();
}

?>



sauf que je sais pas ou mettre le nouveau mot de passe générer aléatoirement a envoyé ...
<?php
//Générer une chaine de caractère unique et aléatoire

function random($car) {
$string = "";
$chaine = "abcdefghijklmnpqrstuvwxy0123456789";
srand((double)microtime()*1000000);
for($i=0; $i<$car; $i++) {
$string .= $chaine[rand()%strlen($chaine)];
}
return $string;
}

// APPEL
// Génère une chaine de longueur 20
$chaine = random(20);

?>


Merci bcp de m'aider
A voir également:

3 réponses

Atropa Messages postés 1940 Date d'inscription   Statut Membre Dernière intervention   274
 
bonjour,

ce serait mieux je pense d'envoyer un liens pour redéfinir le mot de passe plutôt que d'en attribuer un aléatoire

et d'utiliser pdo... c'est fou que ce ne soit pas encore utilisé par tout le monde ça
0
jordxn Messages postés 356 Date d'inscription   Statut Membre Dernière intervention   1
 
Et comment je peux faire s'il vous plait ?
0
jordxn Messages postés 356 Date d'inscription   Statut Membre Dernière intervention   1
 
J'ai trouvé cela mais je sais pas si c'est possible...



<?php



include("connect/fc-phpconnect_tvc.php");





/*generation du nv pass.*/

function gen_reg_key()

{



$key = ""; /*on initialise la variable $key à "vide" */

$max_length_reg_key = 10; /*on définit la taille de la chaine (10 caractères ca suffit <img src="https://forum.phpfrance.com/images/smilies/icon_wink.gif" alt=";)" title="Wink" />)*/



/*on définit le type de caractères ascii de la chaine */

$chars = 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","1","2","3","4","5","6","7","8","9","0");





$count = count($chars) - 1; /*on comptabilise le nombre total de caractères possibles (36 <img src="https://forum.phpfrance.com/images/smilies/icon_smile.gif" alt=":-)" title="Smile" /> pour l'alphabet) */

srand((double)microtime()*1000000); /*on initialise la fonction rand pour le tirage aléatoire*/

for($i = 0; $i < $max_length_reg_key; $i++) $key .= $chars[rand(0, $count)]; /*on tire aléatoirement les $max_length_reg_key carac de la chaine*/

return($key); /*on renvois la clé générée */

}

/*Fin de le génération de clé*/



$loginnewpass = $_POST['passeperdu'];

if (isset($loginnewpass)) {



$sql = mysql_query ("SELECT

*

FROM

membre

WHERE

login='".$loginnewpass."'") ;



$rep = mysql_fetch_object($sql) ;

if ($rep->id == "" || $rep->pass2!="") { //Si le login n'existe pas

if ($rep->id == "")



{

echo "<BR><center>Aucun membre avec ce login !<BR><BR><a href=perdu.php>Retour</a><BR><BR>" ;

}



}else{ //SI LE login EXISTE DANS LA BDD



$nom = $rep->name ;

$to = 'dunbar@dunbar.be';

$new_pass = gen_reg_key();

$destinataire = $loginnewpass ;

$email_dest = $rep->email ;

$new_pass_md5 = md5($new_pass);





$sql = "UPDATE

membre

SET

pass_md5='".$new_pass_md5."'

WHERE

login='".$loginnewpass."'" ;

if(false ===($result = mysql_query($sql))) {

die("Erreur MySQL :<br />" . $sql . "<br />" . "Impossible de sauvegarder la/les modification/s");

}



header('location:index.php');





function MySendMail($to='',$objet='',$contenu=''){

$header ='From: laurentgillet@vd-cabling.com'."\n".

'Bcc: laurentgillet@skynet.be'."\n".

'Content-type: text/plain; charset=iso-8859-1'."\n".

'Content-transfer-encoding: base64'."\n".

'X-Priority: 3'."\n".

'X-MSMail-Priority: Normal'."\n".

'X-Unsent: 1'."\n".

'X-Originating-IP: [0.0.0.0]'."\n";



return @mail($to,$objet,@chunk_split(@base64_encode($contenu)),$header);

}









$objet = 'Votre nouveau mot de passe sur Cabling';

$contenu = 'Bonjour '.$nom."\n\n".

'Vous recevez cet e-mail parce que vous (ou quelqu\'un qui prétend être vous) '.

'avez demandé à ce qu\'un nouveau mot de passe vous soit envoyé pour votre '.

'compte.'.

'Si vous continuez à le recevoir, veuillez contacter l\'administrateur. '.

'Vous êtes priés de conserver cet e-mail dans vos archives. Voici les '.

'informations concernant votre compte : '."\n\n".

'++++++++++++++++++++++++++++++++++++++++++++++++++++++'."\n".

'Votre pseudo: '.$loginnewpass."\n".

'Votre nouveau mot de passe: '.$new_pass."\n".

'++++++++++++++++++++++++++++++++++++++++++++++++++++++'."\n\n".

'Si vous rencontrez des difficultés, veuillez contacter l\'administrateur.'."\n\n".

'Vous pouvez vous rendre dans votre profil pour modifier le mot de passe.'."\n\n".

'Cordialement laurent Gillet.'."\n";



return MySendMail($email_dest,$objet,$contenu);





}







} else {

}



?>

<html>



<head>

<title></title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body>

<body background="img/grd-4px.gif">



<form method="post" action="perdu.php">

<fieldset style="width: 259; height: 43"><legend>Demande d'un nouveau mot de

passe.</legend>

<label for="pseudo"><font size="2" color="#000000">Votre login svp:</font></label>

<input name="passeperdu" type ="text"id="passeperdu"/><p align="center">

<input type="submit" value="Connexion" style="border: 1px solid #6699CC; padding-left: 4px; padding-right: 4px;

padding-top: 1px; padding-bottom: 1px; background-image: url('style/imgs/fd_bt_1.gif')"/><br />

</p>

</fieldset>

<br />

 </form>

</html>

<?php

?>
0
jordxn Messages postés 356 Date d'inscription   Statut Membre Dernière intervention   1
 
Comment faire un lien unique pour redéfinir le pseudo et mot de passe d'une personne qui rentre son email svp ... ?
0
Atropa Messages postés 1940 Date d'inscription   Statut Membre Dernière intervention   274
 
il y a différentes façon de faire.

tu peux par exemple créer une table 'passlost' avec 2 champs userId | key

à la demande de récupération de mot de passe

<?php
	
	define('SQL_DB','mysql:dbname=testdb;host=127.0.0.1');
	define('SQL_USER','root');
	define('SQL_PASS','');
	
	
	function keyPass($userId) {
		$pdo = new PDO(SQL_DB,SQL_USER,SQL_PASS);
		$reqT = $pdo->prepare('SELECT count(passlost.*) as nb FROM passLost WHERE userId = :userId LIMIT 1');
		$reqS = $pdo->prepare('SELECT count(passlost.*) as nb FROM passLost WHERE key = :key LIMIT 1');
		$reqI = $pdo->prepare('INSERT INTO passlost(userId,key) VALUES(:userId,:key)');

		$reqT->execute(array('userId' => $userId)); /* test si un mail a déjà été envoyé */
		$dataT = $reqT->fetch(PDO::FETCH_OBJ);
		$reqT->closeCursor();
		
		if($dataT->nb < 1) return false; /* un mail a déjà été envoyé */

		do {
			$key = substr(md5(uniqid(mt_rand())),0,20); /* crée une clé unique */
			$reqS->execute(array('key' => $key)); /* test si la clé n'existe pas déjà */
			$dataS = $reqS->fetch(PDO::FETCH_OBJ);
			$reqS->closeCursor();
		};
		while($dataS->nb > 0);

		$reqI->execute(array('userId' => $userId , 'key' => $key)); /* insert la clé dans la table */
		$reqI->closeCursor();

		return $key;
	}

	$userId = '' /* Id de l'utilisateur récupéré en même temps que l'adresse mail */
	
	$key = keyPass($userId);
	
	if(!$key) exit('un mail a déjà été envoyé');

	$url = DOMAINE.'?passlost='.$key;

	$messageMail = '<a href="'.$url.'">'.$url.'</a>'; 

?>


et ensuite tu n'as plus qu'a vérifié que la valeur de GET['passlost'] est dans la table dans cette variable existe

si elle est dans la table tu affiche le formulaire
0
jordxn Messages postés 356 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci
0