• ModSenior

    [Tutorial] Area privata

    Ho scritto un piccolo tutorial, una basilare area privata, con ovviamente registrazione e login.
    Manca la grafica visto che l'obiettivo era solo quello di dare le basi a chi si avvicina da poco al php.

    database
    [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]config.php
    [php]<?php
    // avvio la sessione
    session_start();

    // Dati connessione al database
    $db_host = 'localhost'; // Host - solitamente localhost
    $db_utente = 'root'; // Nome utente del Database
    $db_password = 'pass'; // Password del Database
    $db_nomedb = 'thedarkita'; // Nome del Database

    // Effettua la connessione al database
    $dbh=mysql_connect ($db_host, $db_utente, $db_password) or die ('Errore nella stringa di connessione al database: '.mysql_error());
    mysql_select_db($db_nomedb);
    ?>[/php]index.php
    [php]<?php
    // Includo la connessione al database
    require('config.php');
    ?>
    <!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>Tutorial by TheDarkITA</title>
    </head>

    <body>
    Menu:<br />
    <br />
    <br />
    <?php
    if(isset($_SESSION['login']))
    echo '<a href="privata.php">Area privata</a><br /><a href="logout.php">Logout</a><br />';
    else
    echo '<a href="registrati.php">Registrazione</a><br /><a href="login.php">Login</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 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);
        
        // Creo una variabile di sessione
        $_SESSION['login'] = $login['id'];
        
        // reindirizzo l'utente
        header('Location: privata.php');
        exit;
    }
    // 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]logout.php
    [php]<?php
    // Includo la connessione al database
    require('config.php');

    // Esegue il logout cancellando la sessione
    session_destroy();
    ?>
    <!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>Logout</title>
    </head>

    <body>
    Logout eseguito<br />
    <a href="index.php">Vai all'index</a><br />
    </body>
    </html>[/php]privata.php
    [php]<?php
    // Includo la connessione al database
    require('config.php');

    // Se non è stata definita la variabile manda l'utente alla homepage
    if(!isset($_SESSION['login']))
    {
    header('Location: index.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>Area privata</title>
    </head>

    <body>
    Pagina privata!<br />
    <br />
    <br />
    <a href="logout.php">Logout</a><br />
    </body>
    </html>[/php]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);
        
        // Query per l'inserimento dell'utente nel database
        $strSQL = "INSERT INTO utenti (user,pass,mail)";
        $strSQL .= "VALUES('$user', '$pass', '$mail')";
        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]registrato.php
    [php]<!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 Completa</title>
    </head>

    <body>
    Registrazione completa!<br />
    <br />
    <br />
    <a href="index.php">Vai all'index</a><br />
    </body>
    </html>[/php]Per i più pigri è possibile scaricare lo script completo a questo indirizzo scarica i file 😄


  • User Attivo

    Grazie Thedarkita,
    un ottimo tutorial.
    :ciauz:


  • User Attivo

    Veramente ben fatto... e ben commentato soprattutto 😄

    keiske


  • User

    Ho utilizzato i tuoi script per creare la pagina di log in e registrazione ma ottengo sempre degli errori.

    Ci sono delle parti da cambiare negli script?


  • User Attivo

    image


  • ModSenior

    Grazie 😉
    devi modificare solo il file config.php mettendo i dati di accesso al database...


  • User

    ciao ragazzi,
    davvero un utile tutorial!!!

    ma... in questo modo tutti gli utenti potranno vedere la stessa pagina???
    quindi sia l'utente cia che l'utente tantisaluti vedranno la pag. privata???


  • User Attivo

    image


  • ModSenior

    @Motherboard said:

    ciao ragazzi,
    davvero un utile tutorial!!!

    ma... in questo modo tutti gli utenti potranno vedere la stessa pagina???
    quindi sia l'utente cia che l'utente tantisaluti vedranno la pag. privata???
    Si


  • User Attivo

    Ovviamente sarai tu poi a diversificare i contenuti a seconda dell'utente...

    se si logga l'utente PIPPO e vuoi fargli vedere cose solo sue e queste cose le estrai da un database farai una query al database chiedendo tutti i dati necessari che coincidono con PIPPO o che coincidono col numero utente di PIPPO e siccome PIPPO deve loggarsi, salvando nelle variabili di sessione il suo nome o il suo numero lo puoi ricavare da $_SESSION['nome'] o $_SESSION['id'] precedentemente salvate

    keiske


  • User Attivo

    salve a tutti, la mia domandina è :
    come integrare l'autologin, il "ricordami" sul file login e credo poi su tutti gli altri file qui in questione ?


  • 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è?