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