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 -
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
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:
- Récupération de mot de passe php
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Mot de passe bios perdu - Guide
- Voir mot de passe wifi android - Guide
3 réponses
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
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
jordxn
Messages postés
356
Date d'inscription
Statut
Membre
Dernière intervention
1
Et comment je peux faire s'il vous plait ?
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
?>
<?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
?>
Comment faire un lien unique pour redéfinir le pseudo et mot de passe d'une personne qui rentre son email svp ... ?
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
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
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