Nume si site in mesaj recuperare parola

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
cadou
Mesaje:328

Nume si site in mesaj recuperare parola

Am acest cod de recuperare parola. functioneaza dar trimite doar mesajul asta :
"Primiti acest mesaj in urma solicitarii dumneavoastra de a va recupera parola
Noua parola este : 7pzlokxbfqm
"
Ok e bine, parola primita pe email functioneaza, dar doresc sa imi trimita pe email si numele de utilizator plus adresa site-ului. Adica mesajul sa fie asa:
"Primiti acest mesaj in urma solicitarii dumneavoastra de a va recupera parola
Acum te poti loga pe scapadeplictiseala.tk cu
Numele de utilizator : Scapadeplictiseala
Noua parola : 123456789
"

Am incercat sa modific dar nu am reusit, imi trimitea pe email ba doar numele de utilizator fara alt mesaj, ba parola fara alt mesaj.

Cod: Selectaţi tot

<?php include('meniu-sus.php');
include('conectare.php');

 $salt   = 'qwertyAF347658@$%AdfSV045*&erTyUsdfYtrLmncBGhu';
 $rand   = 'abcdefghijklmnoqprstuvxwz0123456789';
 $sufix = '@yahoo.com';
//mesaj
 $mesaj = "<html><head><title>Resetare parola</title></head><body>
            <p>Primiti acest mesaj in urma solicitarii dumneavoastra de a va recupera parola</p>
            <p>Noua parola este : %p</body></html>";



 $table  =  'membri';//tabelul unde avem datele utilizatorilor parola email ne intereseaza in special
 $coloana = 'idm';//numele coloanei unde este salvat emailul utilizatorului
 $nume_coloana = 'nume';//numele coloanei care contine numele utilizatorului
 /**
 * functii folosite
 **/
 //functie hash

function user_hash($str){
 $hash = md5($str);
 return $hash;
}
 //generare parola aleatoare
 function rand_pass($rand, $lenght = 10){
    for($i = 0; $i <= $lenght; $i++){
        $tmp[] =  $rand[rand(0, strlen($rand)-1)];
    }
    return implode('',$tmp);
 }
 //minimum de securitate, cel putin in cazul de fata nu prea e necesar
 function clean($str){
    return htmlentities(trim(strip_tags($str)), ENT_QUOTES, 'utf-8');
 }
 //verificam lungimea maxima si minima a inputului venit de la utilizator
 function valid($str){
    $range = range(5, 25);
    if(!in_array(strlen($str), $range)){
        return false;
    }
    return true;
 }
 //conectare la baza de date folosim pdo totusi e 2012 functiile  mysql din php se apropie de sfarsit
$dsn = 'mysql:dbname='.$database.';host='.$server.';charset=utf8';
$dbh = new PDO($dsn, $database, $pass);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
/**      script
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 **/
 //verificam daca formularul a fost postat
if(isset($_POST['recuperare'])){
    // verificam si curatam id-ul trimis prin post
    $id = (isset($_POST['id']) && !empty($_POST['id']) && valid($_POST['id'])) ? clean($_POST['id']) : false;
    //incercam o interogare cu id-ul trimis dupa ce am verificat ca a fost trimis prin formular si este intre 5si 32 caractere
    if($id){
        $prep = $dbh->prepare('SELECT * FROM '.$table.' WHERE '.$coloana.' = ? LIMIT 1');
        $prep->bindParam(1, $id, PDO::PARAM_STR, 32);
        $prep->execute();
        $row = $prep->fetch();
        //daca interogarea a reusit continuam
        if($prep->rowCount()){
            //preluam numele
            $nume = $row[$coloana];$idsuf = $id.$sufix;//concatenam id-ul cu prefixul @yahoo.com pt a obtine o adresa valida de email
            //generam parola aleatoare si hash-ul ei
            $ress_pass = rand_pass($rand);
$hash_pass = user_hash($ress_pass);
//incercam update la parola
            $sql = 'UPDATE '.$table.' SET parola = ? WHERE '.$coloana.' = ? LIMIT 1';
            $prep = $dbh->prepare($sql);
            $prep->bindParam(1, $hash_pass);
            $prep->bindParam(2, $id, PDO::PARAM_STR, 32);
            //daca update-ul a reusit incercam sa trimitem un email
            if($prep->execute()){
                $subiect = 'Resetare parola';
                $headers = 'From: scapadeplictiseala@yahoo.com' . "\r\n";
                $headers  .= 'MIME-Version: 1.0' . "\r\n";
                $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
                if(mail($idsuf, $subiect,$msg = str_replace('%p', $ress_pass, $mesaj), $headers)){
                    die('<h4>'.$nume.' parola ta a fost resetata cu succes. Un email a fost trimis pe adresa '.$idsuf.' cu o noua parola</h4>');
                }else{
                    die('<h4>Parola a fost resetata, dar nu am putut trimite emailul. Va rugam sa resetati iar mai tarziu pentru a primi un email cu noua parola</h4>');
                }
            }else{
                die('<h4>O eroare a aparut nu putem reseta parola.</h4>');
            }           
        }else{
            die('ID-ul specificat nu exista.');
        }
    }else{
        echo '<h3>Va rugam introduceti un id de messanger</h3>';
    }
}
// este gandit pt topicul de fata dar se poate modifica usor
?>

MarPlo Mesaje:4343
Incearca asa. Variabila cu mesaj sa fie de forma asta:

Cod: Selectaţi tot

$mesaj = "<html><head><title>Resetare parola</title></head><body>
            <p>Primiti acest mesaj in urma solicitarii dumneavoastra de a va recupera parola</p>
            <p>Acum te poti loga pe scapadeplictiseala.tk cu</p>
            <p>Numele de utilizator : %n</p>
            <p>Noua parola: %p</body></html>";
 
Iar mai departe in cod, inlocuieste:

Cod: Selectaţi tot

if(mail($idsuf, $subiect,$msg = str_replace('%p', $ress_pass, $mesaj), $headers))
Cu asta:

Cod: Selectaţi tot

if(mail($idsuf, $subiect,$msg = str_replace(array('%n', '%p'), array($nume, $ress_pass), $mesaj), $headers))
 
- Trebuie sa ai definite numele si parola in $nume, respectiv $ress_pass .

cadou Mesaje:328
Nu am incercat ceea ce mi-ai dat mai sus, dar e o problema aici. Pentru ca in codu asta $nume = id de messenger, ceea ce inseamna ca trimite id-ul de messenger pe email.
Cum definesc ca $utilizator = nume de utilizator?

Subiecte similare