• ModSenior

    dovresti creare dei cookie con user e pass. e all'accesso dovresti vedere se sono settati i cookie e in quel caso mandarlo ad una pagina di login che prenda i valori dai cookie invece che dal form


  • User

    scusate ho sbagliato ho risposto ad un altro post !!!!!!!!!perdonatemi


  • ModSenior

    nel database manca una virgola nel codice sql
    il file corretto è il seguente:
    [php]
    CREATE TABLE utenti (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    user TEXT NOT NULL ,
    pass TEXT NOT NULL ,
    mail TEXT NOT NULL
    ) ENGINE = MYISAM ;
    [/php]


  • User Newbie

    Mi chiedo come mai l'ho installato ma non mi fa il redirect quando mi registro e quando mi loggo.

    Lo script aggiunge correttamente i dati sul database.

    Dove sto sbagliando?


  • ModSenior

    Cosa vedi invece di essere reindirizzato?

    dopo la funzione header() hai messo exit; perchè con internet explorer senza quello da qualche problemino...


  • User Attivo

    ma dopo questa istruzione
    [PHP] if(mysql_num_rows($query) == 1){
    [/PHP]

    non ci va un
    [PHP]session_start()[/PHP]
    ?
    a me senza quello non funzionava....


  • ModSenior

    è nel config session_start... se lo rimetti genera errore...


  • User Attivo

    ok però ho un altro problema.
    se accedo all'area privata da un server win 2003, salta la pagina di login ed entra direttamente.
    come si può risolvere questo preblema??


  • ModSenior

    Cioè?


  • User Attivo

    allora i miei siti hanno una pagina admin/index.php che, se non si è loggati, reindirizza su admin/login.php
    Invio il form a admin/verifica.php che decide se autenticarmi o meno...come nel tutorial
    ma se sto usando una macchina con Win2003 e vado per esempio su admin/index.php, ci accede tranquillamente senza reindirizzarmi su login.php
    come mai?


  • ModSenior

    Allora se hai fatto precedentemente il login è normale fin quando non elimini i cookie o la sessione.
    Se invece lo fa anche non facendo il login precedentemente, manca il controllo sulla pagina di amministrazione che ti reindirizzi al login


  • User Attivo

    ripeto....sugli altri computer funziona alla perfezione. Solo da server Win2003

    se hai la possibilità prova tu stesso....
    è un grosso bug!


  • ModSenior

    Non ho la possibilità di provare, comunque il codice per me è scritto in modo corretto, forse hai sbagliato tu a implementare il codice nelle tue pagine...


  • User Attivo

    l'ho provato anche creando nuove pagine interamente con i costri codici......
    la cosa mi spaventa molto....


  • User Attivo

    Salve!
    Sto impazzendo per riuscire ad aggiungere allo script un attivazione tramite link inviata per email dopo la registrazione.
    Sono partito aggiungendo alla tabella utenti un campo "attivazione" con VARCHAR(1), con questo appena si invia il modulo di registrazione il valore rimane 0, e nella email segnalata nell'iscrizionein automatico dovrebbe arrivare un messaggio con un lnk per l'attivazione, e magari anche un riepilogo dei dati inviati..

    Nel file registrati.php ho aggunto questo pezzo (quelli in neretto):

        $strSQL = "INSERT INTO utenti (user,pass,mail,**attivazione**)";
        $strSQL .= "VALUES('$user', '$pass', '$mail', **'0'**)";
    

    Non riesco a trovare i modo per creare la mail che crea un link di attivazione che cambia il valore su attivazione da 0 ad 1.


  • ModSenior

    Ciao Gigi991,

    Benvenuto nel forum GT 😉
    Allora per far invaire un link di attivazione agiremo nel seguente modo: Creiamo un campo attivazione di tipo varchar come hai fatto tu, ma di lunghezza imposteremo 32 caratteri, in modo da generare un codice casuale che impsoteremo come valore del campo.
    Nella pagina che avrà il compito di attivazione imposteremo il campo con valore "", quindi al login ci basterà controllare che il valore del campo sia uguale a "" se l'utente è stato attivato oppure no.

    Registrati.php
    [php]
    <?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['registra']))
    {

    // Dati Inviati dal modulo
    $user = (isset($_POST['user'])) ? trim($_POST['user']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : '';    // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''
    $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : '';    // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default ''
    
    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
        $user = addslashes($user);
        $pass = addslashes($pass);
        $mail = addslashes($mail);
    }
    
    
    // Controllo il Nome Utente
    if(strlen($user) < 4 || strlen($user) > 12)
        die('Nome Utente troppo corto, o troppo lungo');
    // Controllo la Password
    elseif(strlen($pass) < 4 || strlen($pass) > 12)
        die('Password troppo corta, o troppo lunga');
    // Controllo l'email
    elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail))
        die('Email non valida');
    // Controllo il nome utente non sia già occupato
    elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1)
        die('Nome Utente non disponibile');
    // Controllo l'indirizzo email non sia già registrato
    elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1)
        die('Questo indirizzo email risulta gi&agrave; registrato ad un altro utente');
    // Registrazione dell'utente nel database
    else
    {
        
        // Crypt della password per garantire una miglior sicurezza
        $pass = md5($pass);
        
        
        // Genero una stringa casuale di Attivazione
        $attivazione = '';
        for($x=1; $x<=32; $x++)
        $attivazione.=rand(0,9);
        $attivazione = md5($attivazione);
        $message = 'Per attivare il Suo account deve visitare il seguente link:<br><a href="http://www.sito.ext/attivazione.php?code='.$attivazione.'">Attiva account</a>';
        // Header dell'email, per madnarla in formato html
        $headers = "From: NomeSito <[email protected]>\r\n";
        $headers .= "Reply-To: [email protected]\r\n";
        $headers .= "Return-Path: [email protected]\r\n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    
        // Invio L'email
        mail($mail, 'Registrazione Tutorial TheDarkITA', $message, $headers);
        
        // Query per l'inserimento dell'utente nel database
        $strSQL = "INSERT INTO utenti (user,pass,mail,attivazione)";
        $strSQL .= "VALUES('$user', '$pass', '$mail', '$attivazione')";
        mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error());
        
    
        // Reindirizzo l'utente ad una pagina di conferma della registrazione
        header('Location: registrato.php');
        exit;
    }
    

    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Registrazione</title>
    </head>

    <body>
    <form action="" method="post">
    <input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
    <input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
    <input name="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
    <input name="registra" type="submit" value="Registrati" /><br />
    </form>
    </body>
    </html>
    [/php]
    Attivazione.php
    [php]
    <?php
    // Includo la connessione al database
    require('config.php');

    // Dati Inviati dal modulo
    $code = (isset($_GET['code'])) ? trim($_GET['code']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
        $code = addslashes($code);
    }
    

    // Controllo la validità del link
    if(strlen($code) != 32)
    die('Codice non valido');
    // Aggiorno il record
    $update = mysql_query("UPDATE utenti SET attivazione = '' WHERE attivazione = '$code' LIMIT 1");
    // Quanti record ha aggiornato la query
    $attivato = mysql_affected_rows($update);
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Area privata</title>
    </head>

    <body>
    <?=($attivato == 1) ? 'Account Attivato' : 'Errore, link non valido' ?><br />
    <br />
    <br />
    <a href="index.php">Homepage</a><br />
    </body>
    </html>
    [/php]Login.php
    [php]
    <?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['login']))
    {

    // Dati Inviati dal modulo
    $user = (isset($_POST['user'])) ? trim($_POST['user']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : '';    // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''
    
    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
        $user = addslashes($user);
        $pass = addslashes($pass);
    }
    
    // Crypto la password e la confronto con quella nel database
    $pass = md5($pass);
    
    // Controllo l'utente esiste
    $query = mysql_query("SELECT id,attivazione FROM utenti WHERE user = '$user' AND pass = '$pass' LIMIT 1");
    
    // Se ha trovato un record
    if(mysql_num_rows($query) == 1)
    {
        // prelevo l'id dal database
        $login = mysql_fetch_array($query);
        // L'account è attivo?
        if($login['attivazione'] == '')
        {
        // Creo una variabile di sessione
        $_SESSION['login'] = $login['id'];
        
        // reindirizzo l'utente
        header('Location: privata.php');
        exit;
        }
        else
        {
        die('Attiva il tuo account!!!');
        }
    }
    // se non esiste da l'errore
    else
        die('Nome Utente o Password errati');
    

    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Login</title>
    </head>

    <body>
    <form action="" method="post">
    <input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
    <input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
    <input name="login" type="submit" value="Login" /><br />
    </form>
    </body>
    </html>
    [/php]

    Non ho testato, facci sapere se funziona correttamente 😉


  • User Attivo

    Ho provato ora, mi inserisce l'utente nel database, blocca l'accesso alla pagina privata se l'account non è attivato però non invia la mail e quindi è impossibile attivarsi..
    Ci sarà un prolema nel codice di invio mail.. :mmm:


  • ModSenior

    Il codice di invio mi sembra corretto, non stampa alcun errore?
    Hai controllato la posta indesiderata?


  • User Attivo

    Ho ricontrolato ora in posta, non c'è manco tra le indesiderate..
    Non da errori, finita la registrazione reindirizza in registrato.php, ma la mail non arriva, mentre al login funziona perchè mi dice che l'account non è stato ancora attivato..


  • ModSenior

    Devi sostituire gli header, mettendo un email valida, altrimenti vengono cestinate automaticamente dalla maggior delle società...
    Hai inserito un indirizzo email valido?