Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555

    Password temporanea casuale

    Salve ragazzi,
    il problema è questo. Ho creato un form che serve qualora un utente perda i dati in fase di registrazione. In particolare la password. Ho pensato ad un form di recupero nel quale inserire l'indirizzo email ove mandare la password temporanea.

    Il form rimanda ad un file php che ho chiamato recuperodati. Ecco il codice:

    Codice PHP:
    <?php
    if(!isset($_POST['submit']))
    {
        
    header("Location: [url]http://www.listafacile.com[/url]");
        die;
        exit;
    }
    //varie info per email
    $oggi date("j F Y G:i");
    $sito "http://www.listafacile.com";
    $ip "$_SERVER[REMOTE_ADDR]";
    $browser "$_SERVER[HTTP_USER_AGENT]";
    $soggetto "Modulo da $sito";

    if(
    trim($_POST['mail']) == "")
    {
    print 
    "La mail è obbligatoria
    <a href=\"formregistraz.php\">indietro</a>
    "
    ;
    }
    else
    {
    $mail htmlentities(strip_tags($_POST['mail']));

    // Imposto la lunghezza della password a 10 caratteri
    $lung_pass 10;

    // Creo un ciclo for che si ripete per il valore di $lung_pass
    for ($x=1$x<=$lung_pass$x++)
    {
      
    // Se $x è multiplo di 2...
      
    if ($x 2){

        
    // Aggiungo una lettera casuale usando chr() in combinazione
        // con rand() che genera un valore numerico compreso tra 97
        // e 122, numeri che corrispondono alle lettere dell'alfabeto
        // nella tabella dei caratteri ASCII
        
    $mypass $mypass chr(rand(97,122));

      
    // Se $x non è multiplo di 2...
      
    }else{

        
    // Aggiungo alla password un numero compreso tra 0 e 9
        
    $mypass $mypass rand(0,9);

      }
    }
                
                                                    
    // settare qui quello che apparirà nel campo from della email
                                    
    $from_mail "info@iso-consulenze.info";
                                    
    // invio della mail contenente la passwd e gli altri dati
                                         
    $To="$mail";
                                         
    $Headers ="From: $from_mail";
                                         
    $Soggetto="[[url]www.iso-consulenze.info[/url]] I tuoi dati di accesso";
                                         
    $Corpo.="Ciao!\n\n";
                                         
    $Corpo.="     Sono il programma Sendmail di [url]http://www.iso-consulenze.info[/url]";
                                         
    $Corpo.="     Questa è la tua nuova password:\n\n";
                                         
    $Corpo.="     La tua password: $mypass\n\n";
                                         
    $Corpo.="     A presto!\n\n";
                                         
    $Corpo.="--------------------------------------------\n";
                                         
    $Corpo.="$from_mail\n";
                                         
    $Corpo.="http://www.iso-consulenze.info\n";
                                         
    $Corpo.="--------------------------------------------\n";
                                         
    mail($To$Soggetto$Corpo$Headers);

                                        echo 
    "ti è stata inviata una mail all'indirizzo $mail con i tuoi dati";


    }
    mysql_close();
    ?>
    Lo script funziona, la password viene creata ed inviata. Il problema qual'è? Che tale password temporanea dovrebbe andare a sostituirsi, nel database, a quella originaria inserita dall'utente in fase di registrazione.

    La tabella che immagazzina i dati in fase di registrazione è la seguente:

    CREATE TABLE `utenti` (
    `id` int(3) NOT NULL auto_increment,
    `username` varchar(30) NOT NULL default '',
    `password` varchar(34) NOT NULL,
    `confermapassword` varchar(34) NOT NULL,
    `nome` varchar(30) NOT NULL default '',
    `cognome` varchar(30) NOT NULL default '',
    `mail` char(255) NOT NULL default '',
    `quesito` varchar(255) NOT NULL default '',
    `risposta` varchar(255) NOT NULL default '',
    `data` char(255) NOT NULL default '',
    `ip` char(15) NOT NULL default '',
    PRIMARY KEY (`id`),
    UNIQUE KEY `id` (`id`),
    KEY `id_2` (`id`)
    )

    Come posso integrare il file php che ho postato sopra in modo che la password temporanea e casuale sostituisca quella impostata in origine? (poi chiaramente l'utente avrà la possibilità di immettere una nuova password).

    Pensavo ad un UPDATE, ma come posso associare la password temporanea all'utente specificato? Insomma, come posso pescare l'username dell'utente che chiede la nuova password e poi associargli quella temporanea?

    Grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Stavo pensando di fare in questo modo. Verificare che la mail inserita corrisponda a quella immessa in fase di registrazione. Se la condizione è vera allora faccio pescare dal database l'username relativo a quella mail e faccio un UPDATE della password. E' una soluzione percorribile?

  3. #3
    Di solito si fa cosi'

    Gli fai inserire solo il nome utente

    in base a quello recuperi la vecchia email e spedisci a quella, e fai l'update del caso

  4. #4
    Mah, io dicevo in modo diverso.

    L'email NON la chiedi proprio. Chiedi solo lo username

    e da quello ricavi tutto.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Io pensavo alla mail perchè è un dato che si ricorda più facilmente. Nel senso che solitamente chi si registra in un sito usa solitamente quella mail. Perchè poi potrebbe succedere anche che l'utente si scordi l'username. Allora in quel caso si dovrebbe utilizzare un altro campo per richiamare anche l'user. E credo che il più facile ed indicato sia proprio la mail.

    Ora provo ad implementare il codice, testarne il funzionamento e poi lo posto. Speriamo non vi siano problemi!

  6. #6
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da raven74
    Mah, io dicevo in modo diverso.

    L'email NON la chiedi proprio. Chiedi solo lo username

    e da quello ricavi tutto.
    cosi se io conosco il tuo username posso cambiarti la pass.
    E' vero che la nuova pass verrà spedita all'intestatario dello username, però non è il massimo.

    Secondo me l'ideale è:

    1. chiedi la mail, verifichi che esista uno username associato e mandi una mail in cui chiedi se vuole cambiare la pass, dando un codice univoco di autorizzazione al cambiamento (ad esempio l'md5 di time()+username).

    2. L'utente clicca sull'indirizzo che gli arriva via mail, che può conoscere solo lui, tu verifichi che il codice sia quello che ti aspetti e cambi la pass, mandando una seconda mail in cui la comunichi.

    In questo modo anche se conosco la tua mail di riferimento posso inserirla, tu riceverai la mail di richiesta di conferma, se la ignori la pass non verrà cambiata, se invece clicchi sul link si.
    Inoltre in questo modo non ricadi nel problema in cui l'utente si sia dimenticato la username.

    Ovviamente perchè funzioni devi evitare che un utente si possa registrare 2 volte con lo stesso indirizzo email.

    ciao

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Grazie Gianaz dei suggerimenti.
    Attualmente col mio livello php dovrei ragionarci un p0' su su quello che mi hai detto. E lo farò.
    Per ora avevo implementato il codice php che avevo postato prima, solo che mi viene fuori un errore (e sinceramente credo che forse non sia tanto corretto il codice che ho usato):

    Codice PHP:
    <?php
    if(!isset($_POST['submit']))
    {
        
    header("Location: [url]http://www.listafacile.com[/url]");
        die;
        exit;
    }
    //varie info per email
    $oggi date("j F Y G:i");
    $sito "http://www.listafacile.com";
    $ip "$_SERVER[REMOTE_ADDR]";
    $browser "$_SERVER[HTTP_USER_AGENT]";
    $soggetto "Modulo da $sito";
    $mail htmlentities(strip_tags($_POST['mail']));


    if(
    trim($_POST['mail']) == "")
    {
    print 
    "La mail è obbligatoria
    <a href=\"formregistraz.php\">indietro</a>
    "
    ;
    }
    else 


    include(
    "config.php"); 
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("non riesco a connettermi"); 
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");

    $sql "SELECT * FROM utenti WHERE mail = '$mail'"
    $result mysql_query ($sql) or die (mysql_error()); 
    $n mysql_num_rows($result); 

    if (
    $n != 0

    echo 
    "L'email inserita non è corretta
    "

    echo 
    "<a href=\"java-script:history.back()\">ritenta</a> con un'altra mail"


    // Imposto la lunghezza della password a 10 caratteri
    $lung_pass 10;

    // Creo un ciclo for che si ripete per il valore di $lung_pass
    for ($x=1$x<=$lung_pass$x++)
    {
      
    // Se $x è multiplo di 2...
      
    if ($x 2){

        
    // Aggiungo una lettera casuale usando chr() in combinazione
        // con rand() che genera un valore numerico compreso tra 97
        // e 122, numeri che corrispondono alle lettere dell'alfabeto
        // nella tabella dei caratteri ASCII
        
    $mypass $mypass chr(rand(97,122));

      
    // Se $x non è multiplo di 2...
      
    }else{

        
    // Aggiungo alla password un numero compreso tra 0 e 9
        
    $mypass $mypass rand(0,9);

      }
    }

    //imposto la seconda query che aggiorna il database con la password temporanea
    include("config.php"); 
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("non riesco a connettermi"); 
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");

    mysql_query("UPDATE utenti SET password = '".$mypass."' WHERE password = '".$password."'") or die(mysql_error());


                
                                                    
    // settare qui quello che apparirà nel campo from della email
                                    
    $from_mail "info@iso-consulenze.info";
                                    
    // invio della mail contenente la passwd e gli altri dati
                                         
    $To="$mail";
                                         
    $Headers ="From: $from_mail";
                                         
    $Soggetto="[[url]www.iso-consulenze.info[/url]] I tuoi dati di accesso";
                                         
    $Corpo.="Ciao!\n\n";
                                         
    $Corpo.="     Sono il programma Sendmail di [url]http://www.iso-consulenze.info[/url]";
                                         
    $Corpo.="     Questa è la tua nuova password:\n\n";
                                         
    $Corpo.="     La tua password: $mypass\n\n";
                                         
    $Corpo.="     A presto!\n\n";
                                         
    $Corpo.="--------------------------------------------\n";
                                         
    $Corpo.="$from_mail\n";
                                         
    $Corpo.="http://www.iso-consulenze.info\n";
                                         
    $Corpo.="--------------------------------------------\n";
                                         
    mail($To$Soggetto$Corpo$Headers);

                                        echo 
    "ti è stata inviata una mail all'indirizzo $mail con i tuoi dati";



    mysql_close();
    ?>
    Praticamente mi dice che la "mail inserita non è corretta". Ritenta con un'altra mail.
    Dove sta l'errore? (non lapidatemi se ci sono errori marchiani di codice, sono in fase di apprendimento)

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Ho capito che l'errore sta nella riga di controllo della mail che non andrebbe fatto con il conteggio delle righe (n !=0). Ma come posso controllare che la mail inserita inserisca realmente all'interno del database?

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Diciamo che lo script sembra non contenere errori di codice ma non funziona!! La password non viene aggiornata!!

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Come non detto. Questo codice funziona:

    Codice PHP:
    <?php
    if(!isset($_POST['submit']))
    {
        
    header("Location: [url]http://www.listafacile.com[/url]");
        die;
        exit;
    }
    //varie info per email
    $oggi date("j F Y G:i");
    $sito "http://www.listafacile.com";
    $ip "$_SERVER[REMOTE_ADDR]";
    $browser "$_SERVER[HTTP_USER_AGENT]";
    $soggetto "Modulo da $sito";
    $mail htmlentities(strip_tags($_POST['mail']));


    if(
    trim($_POST['mail']) == "")
    {
    print 
    "La mail è obbligatoria
    <a href=\"formregistraz.php\">indietro</a>
    "
    ;
    }
    else 


    include(
    "config.php"); 
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("non riesco a connettermi"); 
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");

    $sql "SELECT * FROM utenti WHERE mail = '$mail'"
    $result mysql_query ($sql) or die (mysql_error()); 
    $n mysql_num_rows($result); 

    if (
    $n != 0

    echo 
    "L'email inserita è corretta
    "



    // Imposto la lunghezza della password a 10 caratteri
    $lung_pass 10;

    // Creo un ciclo for che si ripete per il valore di $lung_pass
    for ($x=1$x<=$lung_pass$x++)
    {
      
    // Se $x è multiplo di 2...
      
    if ($x 2){

        
    // Aggiungo una lettera casuale usando chr() in combinazione
        // con rand() che genera un valore numerico compreso tra 97
        // e 122, numeri che corrispondono alle lettere dell'alfabeto
        // nella tabella dei caratteri ASCII
        
    $mypass $mypass chr(rand(97,122));

      
    // Se $x non è multiplo di 2...
      
    }else{

        
    // Aggiungo alla password un numero compreso tra 0 e 9
        
    $mypass $mypass rand(0,9);

      }
    }

    //imposto la seconda query che aggiorna il database con la password temporanea
    include("config.php"); 
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("non riesco a connettermi"); 
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");

    mysql_query("UPDATE utenti SET password = '".$mypass."' WHERE mail = '".$mail."'") or die(mysql_error());


                
                                                    
    // settare qui quello che apparirà nel campo from della email
                                    
    $from_mail "info@iso-consulenze.info";
                                    
    // invio della mail contenente la passwd e gli altri dati
                                         
    $To="$mail";
                                         
    $Headers ="From: $from_mail";
                                         
    $Soggetto="[[url]www.iso-consulenze.info[/url]] I tuoi dati di accesso";
                                         
    $Corpo.="Ciao!\n\n";
                                         
    $Corpo.="     Sono il programma Sendmail di [url]http://www.iso-consulenze.info[/url]";
                                         
    $Corpo.="     Questa è la tua nuova password:\n\n";
                                         
    $Corpo.="     La tua password: $mypass\n\n";
                                         
    $Corpo.="     A presto!\n\n";
                                         
    $Corpo.="--------------------------------------------\n";
                                         
    $Corpo.="$from_mail\n";
                                         
    $Corpo.="http://www.iso-consulenze.info\n";
                                         
    $Corpo.="--------------------------------------------\n";
                                         
    mail($To$Soggetto$Corpo$Headers);

                                        echo 
    "ti è stata inviata una mail all'indirizzo $mail con i tuoi dati";



    mysql_close();
    ?>
    La passowrd viene cambiata. Mi resta il dubbio del controllo sulla correttezza della mail. Il tipo di controllo che effettuo sulla mail è giusto?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.