• User

    Aiuto per invio email di conferma registrazione

    Ciao raga, ho un problemino, non sono ancora molto bravo in php, non so che fare per inviare una mail all'indirizzo inserito da un utente nel form di registrazione per verificare se l'email è reale e procedere poi con l'inserimento del db UTENTI se ci clicca sopra. I campi inizialmente li controllo per verificarne la validità, poi mi connetto al db e se sono tutti ok mi effettua la registrazione, se l'username già esiste(è primary key) non effettua la registrazione.
    Fin qui va bene ma, ora dovrei apportare delle modifiche, prima di completare la registrazione vorrei inserire la parte dell'invio email e se l'email esiste avvisa l'utente che l'indirizzo già risulta altrimenti se non risulta procede con l'invio e quando l'utente clicca su quel link allora completa la registrazione ma non so il da farsi. Questo lo script:

    <html>
    <head><title>PROCESSO DI REGISTRAZIONE </title></head>
    <body>
    <?php
    $host='localhost';
    $user='root';
    $password='xxxxxxx';
    $database='utenti';

    $pulito=array();

    ... controlli campo nome, campo email, username e password....

    if (ctype_alpha($_POST['username']) ....... )
    {
    ....
    }
    if (ctype_alnum($_POST['password']) ........ )
    {
    .....
    }

    $connect=mysql_connect($host,$user,$password)
    or die("Impossibile connettersi al server $host");
    mysql_select_db($database,$connect)
    or die("Impossibile connettersi al database $database");
    $query="INSERT INTO utenti" ."(nome,email,username,password) " . "VALUES(
    '" .$_POST['nome']
    ."','" .$_POST['email']
    ."','" .$pulito['username']
    ."','" .md5($pulito['password'])."')";

    $verifica=mysql_query($query,$connect);

    if ($verifica==false)
    {
    print(" ATTENZIONE! IMPOSSIBILE EFFETTUARE LA REGISTRAZIONE!");
    }
    else
    {
    print("Registrazione completata!");
    print"Torna al<a href="login.php"> Login </a>";
    }

    mysql_close($connect);
    ?>
    </body>
    </html>

    I campi del db UTENTI: nome, email, username(primari key), password.

    Grazie a quanti mi aiuteranno. :ciauz:


  • Bannato User Attivo

    Devi aggiungere un campo (confermato) nella tua tabella utenti, alla registrazione di default lo setti a 0 (da confermare) quando l'utente cliccherà sul link che gli hai inviato via email lo setti a 1 (confermato).
    Al login devi considerare validi solo gli utenti che hanno confermato=1.
    La pagina di conferma riceverà in ingresso (in GET) un parametro che sarà l'md5 dell'email concatenata ad una stringa (token) che solo tu conosci, questo perchè se fai solo l'md5 chiunque mette una mail finta e conoscendo la pagina di conferma gli passa l'md5 della mail finta per confermarla.
    Quando ricevi il parametro fai l'update della tua tabella set confermato=1 where md5(concat(email,'stringacheconoscisolotu'))=$parametroricevuto.


  • User

    Ciao e grazie della risposta.
    Sto implementando qualche frammento di codice in più nello script che ho inviato, un'altra domanda, lo script che ho inviato prima è il file di registrazione nel db di nome registrazione.php, ma per attivare poi l'utente cioè facendo l'UPDATE della tabella per settare il campo confermato da 0 a 1 devo creare una pagina a parte di nome attivazione.php giusto? Ma il campo confermato che mi dicevi non è un campo nel db registrazione tipo ad esempio CONFERMATO enum(0,1) NOT NULL default 0? ...e con l'UPDATE faccio UPDATE registro_utenti SET confermato=1 WHERE username=$username? o è qualcos'altro? Ci devo passare anche la sessione?
    Per favore mi spieghi meglio con un esempio quella cosa del $GET, dell'md5 per la mail e il token? non ho afferrato bene il concetto, sono principiante in queste cose, :).
    E per dare un certo limite di tempo all'utente per registrarsi superato il quale vorrà dire che l'indirizzo è fasullo che devo fare? Ciao e grazie. :ciauz:


  • Bannato User Attivo

    Cerco di andare per ordine, non è facile spiegarsi...:)

    ma per attivare poi l'utente cioè facendo l'UPDATE della tabella per settare il campo confermato da 0 a 1 devo creare una pagina a parte di nome attivazione.php giusto?
    SI, è giusto
    Ma il campo confermato che mi dicevi non è un campo nel db registrazione tipo ad esempio CONFERMATO enum(0,1) NOT NULL default 0?
    SI, proprio un campo così; però se vuoi seguire un altro consiglio, fallo di tipo integer, questo perchè domani gli puoi assegnare più stati oltre a 0 e 1, non si sa mai l'evoluzione che posso subire applicazioni 😉
    Per esempio:
    0: registrato da confermare
    1: confermato
    2: bannato
    3: cancellato
    4: premium
    5: abbonato
    ect.ect
    e con l'UPDATE faccio UPDATE registro_utenti SET confermato=1 WHERE username=$username? o è qualcos'altro? Ci devo passare anche la sessione?
    NI, mi sembra di capire che la tua tabella utenti si chiamasse 'utenti', non devi creare una tabella apposta, aggiungi un campo a quella stessa tabella. La sessione non serve.

    Veniamo alla parte più complicata:

    Per favore mi spieghi meglio con un esempio quella cosa del $GET, dell'md5 per la mail e il token?
    fatto quanto già risposto sopra, avrai:
    registrazione.php
    attivazione.php
    la tabella utenti (nome,email,username,password, stato)

    registrazione.php rimane così com'è con l'aggiunta del campo stato = 0 e con l'aggiunta dell'invio email per l'attivazione dell'account.

    Nell'email che invii ci sarà un link alla pagina:
    attivazione.php?user=b4dd7f0b0ca6c25dd46cc096e45158eb

    dove user non sarà altro che:
    md5($_POST['email'].$token)

    $token è una stringa qualsiasi conosciuta solo da te (es."sjoercfdsanf")
    questo perchè se mandi un link dove user è solamente md5($_POST['email']) io cosa faccio? vengo sul tuo sito, mi registro con la mail [email protected] poi so che il mio amico si è registrato e tu gli hai mandato il link alla pagina attivazione.php, quindi mi faccio l'md5("[email protected]") vado su attivazione.php?user=b4db0c2dj438jk93l046cc096e45158eb è attivo il mio account con email fasulla.
    chiaro fin qui?

    nella pagina attivazione.php fai l'update a così:
    $query = "UPDATE utenti
    SET stato=1
    WHERE md5(concat(email,$token))=".$_GET['user'];

    dove $token è lo stesso di registrazione.php

    E per dare un certo limite di tempo all'utente per registrarsi superato il quale vorrà dire che l'indirizzo è fasullo che devo fare? Ciao e grazie.
    aggiungi alla tua tabella utenti il campo datadiregistrazione (timestamp) così sai quando si è registrato, ogni tanto puoi cancellare tutti quelli che si sono registrati da più di un TOT e hanno stato = 0.


  • User

    Ciao r, 🙂 , grazie davvero grande, ora comincio a capirci qualcosa, dunque non mi serve fare tutto quel casotto che stavo per fare con le sessioni.... che bello :D!!!! Mi stavo impelagando in qualcosa di così astruso... allora provo a fare tutto quello che mi hai detto, spero di riuscirci.

    Due altre cose, **1: **ma se l'indirizzo email lo passo in md5($_POST['email']), quando faccio il controllo per verificare che l'indirizzo email sia già presente o no nel db per avvisarlo che l'indirizzo risulta già attivo mi funzionerà ugualmente?Prima era così il controllo:

    $query="SELECT email from utenti where email=$email";

    if($email>0){
    print"L'indirizzo email risulta già attivo";
    }

    Ora passando l'email in md5 dovrò fare così?

    $query="SELECT email from utenti where email=md5($_POST['email'])";

    if($email>0){
    ...........
    }.
    E' probabile che stia dimenticato qualche pezzetto di codice.

    **2: **Ma il $token può essere anche un numero generato casualmente ad ogni utente che si iscrive oppure deve essere una stringa che io debbo conoscere sempre e comunque?

    P.S.: Hai ragione scusa, la tabella è utenti, mi sono confuso e ho scritto registro_utenti :rollo:.


  • Bannato User Attivo
    1. L'email la devi salvare sempre come email nel db e NON come MD5(email) altrimenti non riesci più a sapere l'email dell'utente nel caso ti serva per contattarlo.

    2. è una stringa unica "per sempre", se la cambi tutte le volte devi salvarla da qualche parte (un campo in più sulla tabella) per poi poterla controllare al momento dell'attivazione di un account