• User Attivo

    Script cambio password - bug

    Ciao ragazzi, premetto che questo codice l'ho trovato in rete e riadattato alle mie esigenze, funziona correttamente solo che la scritta "password cambiata con succeso -login-" appare sempre invece di verificare l'istruzione if (mail && $result). Come mai? Incollo tutto il codice, l'errore è nelle ultime righe

    (l'inizio della sessione e la connessione al db sono antecedenti la form e li ho omessi per comodità)

    [php]<?php
    // genera una stringa casuale della lunghezza desiderata
    function rand_string($len, $chars = 'Labcdefghijklmnopqrstuvwxyz0123456789')
    {
    $string = '';
    for ($i = 0; $i < $len; $i++)
    {
    $pos = rand(0, strlen($chars)-1);
    $string .= $chars{$pos};
    }
    return $string;
    }
    //se il modulo non è stato inviato non fare nulla
    if(!isset($_POST['submit']))
    {}
    else
    {
    //campo username vuoto
    if(!$_POST['username']) die("Errore: Devi inserire il tuo username");
    //campo password vuoto
    if(!$_POST['email']) die("Errore: Devi inserire l'indirizzo mail dove inviare la nuova password");
    $query = "SELECT * FROM mhp_user WHERE uname = '".$_POST['username']."'";
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    $user_id = $row['uid'];
    $user_mail = $row['uemail'];
    if($row < 1) die("nessuna corrispondenza trovata nel database");
    if($row['uemail'] != $_POST['email']) die("Il nome utente non è associato all'indirizzo mail specificato");
    else
    {
    $random_string = rand_string(10);
    $invio_password = $random_string;
    $sql = "UPDATE mhc_user SET upass = '".md5($random_string)."' WHERE uid ='".$user_id."' LIMIT 1";
    $result = mysql_query($sql);
    $headers ="From:Hosting per Tutti";
    $subject ="aggiornamento password";
    $message ="La tua nuova password e': $invio_password";
    mail($user_mail, $subject, $message, $headers);
    if (mail && $result)
    {echo "Password cambiata con successo: <a href='.?action=login'>login</a>";}
    }
    }

    ?>[/php]


  • Consiglio Direttivo

    Ciao totemx e benvenuto nel Forum GT.

    Credo che dovresti salvare il risultato della funzione mail in una variabile e quindi verificare quella o mettere direttamente la funzione mail dentro la condizione:
    Opzione 1
    [php]$mail=@mail($user_mail, $subject, $message, $headers);
    if ($mail && $result)[/php]Opzione 2
    [php]if ((mail($user_mail, $subject, $message, $headers)) && $result)[/php]Vedi se va in uno dei due modi. 🙂


  • User Attivo

    Ciao ho provato, nada... 😞


  • Consiglio Direttivo

    Tu dici che funziona tutto, ovvero manda la mail ed aggiorna il valore del campo nella tabella. Quindi, giustamente, deve dare quel messaggio che tutto è andato a buon fine.
    Mi sa che mi sono confuso, mi puoi rispiegare il problema.? 🙂


  • User Attivo

    Esatto, funziona tutto, la mail viene inviata, la tabella aggiornata ma il messaggio non ne vuole sapere di mandarmelo ! Comunque ho trovato un altro script che invece funziona nel frattempo, però mi piacerebbe capire perchè questo rogna...


  • Consiglio Direttivo

    Scusa tu sopra scrivi:

    ...funziona correttamente solo che la scritta "password cambiata con succeso -login-" appare sempre..
    Il che è normale dato che lo script fa il suo dovere, ma...forse intendevi dire che non ti appare la scritta?? 🙂

    P.S. Sei invitato a non usare le abbreviazioni, siamo in un Forum non su un telefonino. 😉


  • User Attivo

    Ciao si ho sbagliato a scrivere, di solito tendo a non abbreviare ma l'ho fatto dato che era un messaggio inutile e frettoloso (vedi il primo che era giusto), comunque al massimo mi limito ai "cmq, xò e xè" per il resto scrivo per intero 😉