Visualizzazione risultati 1 fino 2 di 2

Discussione: Form recupero password tramite e-mail

  1. #1
    Guest

    Predefinito Form recupero password tramite e-mail

    Salve a tutti, sto cercando di fare uno script per recuperare la password smarrita tramite e-mail.
    Non capisco dove sia l'errore:

    Codice PHP:
    <?php

    require("assets/php/impostazioni.php");

    if(isset(
    $_POST['invia'])){


    $errore=0; //variabile di controllo errori (se rimane a 0 non ci sono errori)

    if($_POST['email']==""){
    $errore=1;
    exit(
    "Errore");
    }else{
    $result=mysql_query("SELECT DatabaseID, Password FROM accountmadre WHERE Email='".$_POST['email']."' limit 0,1", $db);
    if(
    mysql_num_rows($result)>0){
    $row=mysql_fetch_array($result);
    //l’hash ci servirà per recuperare i dati utente e confermare la richiesta
    //la password nel database si presume criptata, con md5 o altro algoritmo
    //al posto di questi due dati, se ne possono usare altri legati all’utente, purché univoci
    $hash=$row['Password']."".$row['DatabaseID'];
    }else
    $errore=1;
    exit(
    "Errore");

    }

    //se non ci sono stati errori, invio l’email all’utente con il link da confermare
    if($errore==0){

    $header= "From: sito.it <info@sito.it>\n";
    $header .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
    $header .= "Content-Transfer-Encoding: 7bit\n\n";

    $subject= "sito.it - Nuova password utente";

    $mess_invio="<html><body>";

    $mess_invio.="
    Clicca sul <a href=\"http://www.sito.it/nuova_password.php?hash="
    .$hash."\">link</a> per confermare la nuova password.<br />
    Se il link non è visibile, copia la riga qui sotto e incollala sul tuo browser: <br />
    http://www.sito.it/nuova_password.php?hash="
    .$hash."
    "
    ;

    $mess_invio.='</body><html>';

    //invio email
    if(@mail($_POST['email'], $subject, $mess_invio, $header)){
    echo
    "<div class=\"campo_contatti\" style=\"margin-left: 20px; height: 300px\">";
    echo
    "email inviata con successo. Controlla la tua email<br /><br />";
    echo
    "</div>
    <div class=\"clear\"></div>"
    ;
    unset(
    $_POST); //elimino le variabili post, in modo che non appaiano nel form
    }

    }


    }
    ?>
    Codice HTML:
    
    <!-- FORM BASE
    L'utente inserisce la sua email (che dovrà corrispondere a quella salvata nel database).
    -->
    
    
    <form action="" method="post" id="login">
    
    	<div class="campo_contatti">
    		<div class="voce_campo">Inserisci la tua email per ricevere la nuova password</div>
    		<input type="text" name="email" value="<?=@$_POST['email']?>" class="campo" />
    	</div>
    	
    	<div class="clear"></div>
    	
    	<div class="campo_contatti">
    		<input type="submit" value="invia" name="invia" />
    	</div>
    	
    	<div class="clear"></div>
    
    </form>
    Ultima modifica di medicaldepartment : 13-05-2016 alle ore 05.13.03

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Descrivi il comportamento osservato, ovvero cosa c'è che non funziona (messaggi d'errore? L'email non arriva? L'email arriva ma il collegamento è sbagliato?).
    Assicurati di aver abilitato gli errori con error_reporting(E_ALL).

    Poi, un paio di note, non direttamente collegate al problema:
    Codice PHP:
    $result=mysql_query("SELECT DatabaseID, Password FROM accountmadre WHERE Email='".$_POST['email']."' limit 0,1", $db);
    Le funzioni mysql_* sono deprecate, usa mysqli o PDO.
    Immagino che il campo Email sia univoco, dunque il limit 0, 1 è ridondante.
    Il nome del campo DatabaseID suggerisce che tu stia memorizzando l'identificatore di una base di dati mentre -presumibilmente- tu stai memorizzando l'identificatore di un utente: il nome è fuorviante.
    Usando $_POST['email'] nella query ti esponi a SQL Injection.

    Codice PHP:
    if($_POST['email']==""){
    $errore=1;
    exit(
    "Errore");
    }
    ...
    if(
    $errore==0){
    ....
    }
    Usando exit lo script termina, dunque non hai bisogno di controllare che $errore sia 0 (o, viceversa, se ne controlli il valore non hai bisogno di una exit).

    Codice PHP:
    if(@mail($_POST['email'], $subject, $mess_invio, $header)){
    Usando l'operatore @ nascondi eventuali messaggi di errore.
    In fase di sviluppo tali messaggi sono utili, quindi @ non serve.
    In fase di produzione, non ci devono essere errori, quindi @ non serve.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •