Récupération de mot de passe php

jordxn Messages postés 375 Statut Membre -  
jordxn Messages postés 375 Statut Membre -
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

3 réponses

  1. Atropa Messages postés 2051 Statut Membre 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
    1. jordxn Messages postés 375 Statut Membre 1
       
      Et comment je peux faire s'il vous plait ?
      0
  2. jordxn Messages postés 375 Statut Membre 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
  3. jordxn Messages postés 375 Statut Membre 1
     
    Comment faire un lien unique pour redéfinir le pseudo et mot de passe d'une personne qui rentre son email svp ... ?
    0
    1. Atropa Messages postés 2051 Statut Membre 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
    2. jordxn Messages postés 375 Statut Membre 1
       
      Merci
      0