Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    157

    implementare e-mail di conferma registrazione

    salve ragazzi come da titolo, ho bisogno di implementare la famosa e-mail di conferma dopo la registrazione di un utente... possiedo già uno script php , non mio , che permette la registrazione di un utente e il login... non prevede però un e-mail di conferma, quindi chiunque può registrarsi , inserendo un indirizzo e-mail qualsiasi , inesistente, quindi ho pensato all e-mail di conferma, ma non essendo un campione con il php, chiedo aiuto a voi, spero qualcuno possa guidarmi passo per passo nella risoluzione del mio problema..

    inanzitutto questo è il database:

    codice:
    CREATE TABLE IF NOT EXISTS `users` (  
    
      `id` int(11) NOT NULL AUTO_INCREMENT,  
    
      `username` varchar(100) NOT NULL,  
    
      `pass` varchar(50) NOT NULL,  
    
      `email` varchar(255) NOT NULL,  
    
      `data_reg` datetime NOT NULL,  
    
      PRIMARY KEY (`id`)  
    
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1
    qui le funzioni che si occupano della registrazione e del login ( non metto tutti i controlli etc se no ci vorrebbero altri 2 post solo per il codice):

    registrazione:

    codice:
     /***************************** 
    
        ESECUZIONE DELLA REGISTRAZIONE 
    
        ******************************/  
    
    
    
        public function esegui_registrazione(){  
    
    // se il form e i suoi input sono stati inviati  
    
    
    
            if(isset($_POST['register']) AND   
    
                isset($_POST['username']) AND   
    
                isset($_POST['email']) AND   
    
                isset($_POST['pass1']) AND   
    
                isset($_POST['pass2'])){   
    
    //valorizziamo alcune variabili  
    
    
    
                $this->reg_username = trim($_POST['username']);  
    
                $this->reg_email = trim($_POST['email']);  
    
                $this->reg_pass = trim($_POST['pass1']);  
    
                $this->reg_confirm_pass = trim($_POST['pass2']);  
    
    // criptiamo la password  
    
    
                $this->reg_crypt_pass = $this->crypt_pass($this->reg_pass); 
    
    // eseguiamo la validazione degli input  
    
               
                $valid_input = $this->check_input_registrazione();  
    
    
    // se sono validi  
    
                
                if($valid_input===TRUE){  
     
    // inseriemo all'interno del database i dati  
    
                   
                $this->query_insert_registrazione();  
    
    
     // settiamo il messaggio di successo della registrazione  
    
                   
                $this->message_script = 10;  
    
                    return TRUE;  
    
                    }  
    
                }  
    
            return FALSE;  
    
            }  
    
          
    
    
    
        
    
    
    // esecuzione della query insert di registrazione 
     
    
        protected function query_insert_registrazione(){  
    
            $query = "  
    
                        INSERT INTO users   
    
                        SET   
    
                            username='".mysql_real_escape_string($this->reg_username)."',   
    
                            pass='".mysql_real_escape_string($this->reg_crypt_pass)."',   
    
                            email='".mysql_real_escape_string($this->reg_email)."',   
    
                            data_reg= NOW()";  
    
            $result = mysql_query($query) or die(mysql_error());  
    
            return mysql_insert_id();  
    
            }
    login:

    codice:
    /******************* 
    
        ESECUZIONE DEL LOGIN 
    
        ********************/  
    
    
    
        public function esegui_login(){  
    
    
    // se il form di login e i sui tutti input sono stati inviati   
    
            
                if(isset($_POST['login']) AND isset($_POST['username']) AND isset($_POST['pass'])){  
    
    
    // valorizziamo delle variabili  
    
               
                $this->login_username = trim($_POST['username']);  
    
                $this->login_password = trim($_POST['pass']);  
    
    
    // criptiamo la password  
    
                
                $this->login_cryptpass = $this->crypt_pass($this->login_password);  
    
    
    // validiamo i dati (non devono essere vuoti)  
    
               
                $not_empty_input = $this->check_input_login();  
    
    // se la validazione è andata a buon fine  
    
               
                  if($not_empty_input===TRUE){  
    
    // eseguiamo la query e verifichiamo se individua le credenziali  
    
                    
                 if($this->query_select_login()==TRUE){  
    
    
    // settiamo lo status di utente loggato  
    
                       
                  $this->set_logged($this->login_iduser);  
    
    
    // settiamo l'username  
    
                        
                 $this->set_username($this->login_username);  
    
    
    // settiamo il messaggio di successo del login  
    
                       
                  $this->message_script = 12;  
    
                        return TRUE;  
    
                        }  
    
    
    // se la query non ha trovat utenti con quelle credenziali  
    
                   
     else{  
    
    //  settiamo un messaggio di insuccesso dell'operazone  
    
                        
                 $this->message_script = 11;  
    
                        }  
    
                    }  
    
                }  
    
            return FALSE;  
    
            }  
    
          
    
        
    
    
    
    // esecuzione della qeury per verificare il login  
    
    
    
        protected function query_select_login(){  
    
            $query = "  
    
                        SELECT id FROM users   
    
                        WHERE   
    
                            username='".mysql_real_escape_string($this->login_username)."' AND   
    
                            pass='".mysql_real_escape_string($this->login_cryptpass)."'";  
    
            $result = mysql_query($query) or die(mysql_error());  
    
    
    // se individua l'utente  
    
    
    
            if(mysql_num_rows($result)==1){  
    
                $row = mysql_fetch_array($result);  
    
                $this->login_iduser = $row['id'];  
    
                return TRUE;  
    
                }  
    
            return FALSE;  
    
            }

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    157
    per prima cosa, corregetemi se sbaglio vorrei creare una colonna chiamata "attivato" nel database users già presente...

    codice:
    ALTER TABLE users ADD attivato INT NOT NULL;
    e settare con il valore 1 tutti gli utenti ormai registrati nel database...

    codice:
    update users set attivato = 1;
    per quelli che si registreranno in futuro aggiungo

    codice:
    attivato  = 0 ,
    data_reg= NOW()";
    nella query insert di registrazione

    codice:
       // esecuzione della query insert di registrazione  
    
    
    
        protected function query_insert_registrazione(){  
    
            $query = "  
    
                        INSERT INTO users   
    
                        SET   
    
                            username='".mysql_real_escape_string($this->reg_username)."',   
    
                            pass='".mysql_real_escape_string($this->reg_crypt_pass)."',   
    
                            email='".mysql_real_escape_string($this->reg_email)."',   
    
                            data_reg= NOW()";  
    
            $result = mysql_query($query) or die(mysql_error());  
    
            return mysql_insert_id();  
    
            }
    in modo tale che quando un utente viene registrato al database, nell apposita colonna attivato ha come valore 0...

    a questo vorrei inserire un controllo nella query di login, che controlla se il valore dell utente registrato nella colonna "attivato" è 0 o 1.... se è 0 mi da un messaggio d errore , se è 1 prosegue con il login...

    per quanto riguarda la funzione di registrazione

    codice:
    /***************************** 
    
        ESECUZIONE DELLA REGISTRAZIONE 
    
        ******************************/  
    
    
    
        public function esegui_registrazione(){  
    
    
    
            // se il form e i suoi input sono stati inviati  
    
    
    
            if(isset($_POST['register']) AND   
    
                isset($_POST['username']) AND   
    
                isset($_POST['email']) AND   
    
                isset($_POST['pass1']) AND   
    
                isset($_POST['pass2'])){   
    
    
    
                //valorizziamo alcune variabili  
    
    
    
                $this->reg_username = trim($_POST['username']);  
    
                $this->reg_email = trim($_POST['email']);  
    
                $this->reg_pass = trim($_POST['pass1']);  
    
                $this->reg_confirm_pass = trim($_POST['pass2']);  
    
               
                // criptiamo la password  
    
    
    
                $this->reg_crypt_pass = $this->crypt_pass($this->reg_pass);  
    
    
    
                // eseguiamo la validazione degli input 
     
    
                $valid_input = $this->check_input_registrazione(); 
     
    
                // se sono validi  
    
    
    
                if($valid_input===TRUE){  
    
    
    
                    // inseriemo all'interno del database i dati  
    
    
    
                    $this->query_insert_registrazione(); 
     
    
                    // settiamo il messaggio di successo della registrazione
      
    
                    $this->message_script = 10;  
    
                    return TRUE;  
    
                    }  
    
                }  
    
            return FALSE;  
    
            }
    dopo la validazione degli input, una volta che inserisce i dati dell utente nel database, vorrei a questo punto che spedisca un e-mail di registrazione e nel frattempo mi mandi ad una pagina, che poi posso creare tranquillamente io in html, dove mi dice tipo e-mail di conferma registrazione spedita etc... come posso implementare questa cosa?=)

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    157
    ovviamente dopo che l utente clicca su un link di registrazione , vorrei che venga rimandato ad una pagina che dice tipo e-mail confermata e nel frattempo il valore dell utente nella colonna attivato da 0 cambia in 1..

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    157
    ho provato a far cosi ma non funge ...dopo che individua l utente come faccio a controllare se il valore di questo utente nella colonna attivato è 0 o 1 !?!

    codice:
      // esecuzione della qeury per verificare il login  
            protected function query_select_login(){  
                $query = "  
                            SELECT id FROM users   
                            WHERE   
                                username='".mysql_real_escape_string($this->login_username)."' AND   
                                pass='".mysql_real_escape_string($this->login_cryptpass)."'";  
                $result = mysql_query($query) or die(mysql_error());  
                // se individua l'utente  
                if(mysql_num_rows($result)==1){ 
                
                 $query2 = "  
                            SELECT attivato FROM users
                                WHERE   
                                username='".mysql_real_escape_string($this->login_username)."' AND   
                                pass='".mysql_real_escape_string($this->login_cryptpass)."'";   
                 $result2 = mysql_query($query2) or die(mysql_error()); 
                 if($result2 == 1){
    
                    $row = mysql_fetch_array($result);  
                    $this->login_iduser = $row['id'];  
                    
                    return TRUE;  
                 }
                    else {
                header("Location: http://sitoprova.96.lt/e-mail_non_confermata.html");    
                }   
                return FALSE;  
                }

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Perché fai 2 query? Fanne solo una che recupera sia "id" che "attivato"

    Codice PHP:
    protected function query_select_login()
    {  
        
    $query "
                    SELECT id, attivato FROM users   
                    WHERE   
                        username='"
    .mysql_real_escape_string($this->login_username)."' AND   
                        pass='"
    .mysql_real_escape_string($this->login_cryptpass)."'";  
        
    $result mysql_query($query) or die(mysql_error());
        
        
    // se individua l'utente  
        
    if( mysql_num_rows($result) == )
        {
            if ( 
    $row['attivato'] == )
            {
                return 
    TRUE;
            }
            else 
            {
                
    header("Location: http://sitoprova.96.lt/e-mail_non_confermata.html");    
            }
        }
        
        return 
    FALSE;  

    P.S. NON usare mysql_ sono funzioni che da PHP 5.5 sono deprecate (funzionano ma danno warning) ed eliminate da PHP7.
    Usa mysqli_ o meglio PDO.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    157
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Perché fai 2 query? Fanne solo una che recupera sia "id" che "attivato"

    Codice PHP:
    protected function query_select_login()
    {  
        
    $query "
                    SELECT id, attivato FROM users   
                    WHERE   
                        username='"
    .mysql_real_escape_string($this->login_username)."' AND   
                        pass='"
    .mysql_real_escape_string($this->login_cryptpass)."'";  
        
    $result mysql_query($query) or die(mysql_error());
        
        
    // se individua l'utente  
        
    if( mysql_num_rows($result) == )
        {
            if ( 
    $row['attivato'] == )
            {
                return 
    TRUE;
            }
            else 
            {
                
    header("Location: http://sitoprova.96.lt/e-mail_non_confermata.html");    
            }
        }
        
        return 
    FALSE;  

    P.S. NON usare mysql_ sono funzioni che da PHP 5.5 sono deprecate (funzionano ma danno warning) ed eliminate da PHP7.
    Usa mysqli_ o meglio PDO.


    il problema è che cosi mi rimanda sempre alla pagina html anche per gli account che hanno in attivato il valore 1 ... non è che centrano queste due righe che lei ha omesso?=)

    codice:
                    $row = mysql_fetch_array($result);  
                    $this->login_iduser = $row['id'];
    la parte originale che mi permette di loggare tranquillamente è questa, volevo aggiungere questo controllo
    codice:
    // esecuzione della qeury per verificare il login  
            protected function query_select_login(){  
                $query = "  
                            SELECT id FROM users   
                            WHERE   
                                username='".mysql_real_escape_string($this->login_username)."' AND   
                                pass='".mysql_real_escape_string($this->login_cryptpass)."'";  
                $result = mysql_query($query) or die(mysql_error());  
                // se individua l'utente  
                if(mysql_num_rows($result)==1){  
                    $row = mysql_fetch_array($result);  
                    $this->login_iduser = $row['id'];  
                    return TRUE;  
                    }  
                return FALSE;  
                }
    Ultima modifica di Punix; 29-06-2017 a 16:49

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    157
    forse nel post ho omesso funzioni importanti, ho inserito tra gli allegati il file php completo e funzionante..se volete potete dargli un occhiata perchè c'è troppo codice e postarlo tutto qui mi risulta un po complicato
    File allegati File allegati

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Sì, il problema è che nell'editare il codice mi sono perso il fetch del resultset
    $row = mysql_fetch_array($result);

    mancando, chiaramente $row['attivato'] non esiste e si va nell'else.

    rimetti anche
    $this->login_iduser = $row['id'];
    non serve ai fini del riconoscimento attivo o no, ma evidentemente ti serve per riconoscere il login andato a buon fine.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    157
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Sì, il problema è che nell'editare il codice mi sono perso il fetch del resultset
    $row = mysql_fetch_array($result);

    mancando, chiaramente $row['attivato'] non esiste e si va nell'else.

    rimetti anche
    $this->login_iduser = $row['id'];
    non serve ai fini del riconoscimento attivo o no, ma evidentemente ti serve per riconoscere il login andato a buon fine.
    nulla...anche avendo aggiunto ste due righe sono punto e a capo...vengo rispedito alla pagina html sia con attivato a 0 che 1

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    157
    intanto sono riuscito a implementare l invio della e-mail di registrazione...soltanto che quando l utente clicca sul link di conferma salta fuori un messaggio del genere :


    Warning: mysql_query(): Access denied for user 'u686410779'@'10.1.2.59' (using password: NO) in /home/u686410779/public_html/conferma_reg.php on line 23

    Warning: mysql_query(): A link to the server could not be established in /home/u686410779/public_html/conferma_reg.php on line 23
    Errore nella query SELECT id,username FROM users: Access denied for user 'u686410779'@'10.1.2.59' (using password: NO)



    il codice del file conferma_reg.php è il seguente:
    codice:
    <?php
    // richiamo lo script responsabile della connessione a MySQL
    require 'Users.class.php';
    
    if($_POST && isset($_GET['id']))
    {
        aggiorna_record();
    }
    
    else
        mostra_lista();
    
    function mostra_lista()
    {
        // mostro un eventuale messaggio
        if(isset($_GET['msg']))
            echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
    
        // preparo la query
        $query = "SELECT id,username FROM users";
    
        // invio la query
        $result = mysql_query($query);
    
        // controllo l'esito
        if (!$result) {
            die("Errore nella query $query: " . mysql_error());
        }
    
        echo '
        <table border="1">
            <tr>
                <th>username</th>
                <th>&nbsp;</th>
            </tr>';
    
        while ($row = mysql_fetch_assoc($result))
        {
            $username = htmlspecialchars($row['username']);
    
            // preparo il link per la modifica dei dati del record
            $link = $_SERVER['PHP_SELF'] . '?id=' . $row['id'];
    
            echo "<tr>
                    <td>$username</td>
                    <td><a href=\"$link\">modifica</a></td>
                </tr>";
        }
    
        echo '</table>';
    
        // libero la memoria di PHP occupata dai record estratti con la SELECT
        mysql_free_result($result);
    
        // chiudo la connessione a MySQL
        mysql_close();
    }
    
    function aggiorna_record()
    {
        // recupero i campi di tipo "stringa"
        $username      = trim($_POST['username']);
        $email     = trim($_POST['email']);
        $messaggio = trim($_POST['messaggio']);
    
        // verifico se devo eliminare gli slash inseriti automaticamente da PHP
        if(get_magic_quotes_gpc())
        {
            $username     = stripslashes($username);
            $email     = stripslashes($email);
            $messaggio = stripslashes($messaggio);
        }
    
        // effettuo l'escape dei caratteri speciali per inserirli all'interno della query
        $username      = mysql_real_escape_string($username);
        $email     = mysql_real_escape_string($email);
        $messaggio = mysql_real_escape_string($messaggio);
    
    
        // preparo la query
        $query = "UPDATE users SET
                    attivato = 1 ,
                    WHERE id = $id";
    
        // invio la query
        $result = mysql_query($query);
    
        // controllo l'esito
        if (!$result) {
            die("Errore nella query $query: " . mysql_error());
        }
    
        // chiudo la connessione a MySQL
        mysql_close();
    
        $messaggio = urlencode('Registrazione avvenuta con successo');
        header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
    }
    ?>

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 © 2025 vBulletin Solutions, Inc. All rights reserved.