Visualizzazione risultati 1 fino 1 di 1
Like Tree1Likes
  • 1 Post By Leo91

Discussione: [php]Area riservata con files di testo

  1. #1
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

    Predefinito [php]Area riservata con files di testo

    Per avere un'area riservata nel proprio sito serve anche una registrazione per gli utenti.
    Per fare ciò dovreste, per maggior sicurezza, utilizzare un database sql, ma in questo tutorial useremo files di testo.
    -Costruiamo il form per la registrazione
    Codice HTML:
    <html>
    <title>Registrazione</title>
    <body>
    <form method="post" action="registrazione.php">
       <input type="text" name="nome" /> Nome utente
       <input type="password" name="pass" />Password
       <input type="submit" name="registrati" value="Registrati" /> - <input type="submit" name="login" value="Log-In" />
    </form>
    </body>
    </html>
    questo si chiamerà form.html

    -Analizziamo un pò il codice
    il tag form specifica l'inizio di un modulo contenente alcuni oggetti di input, come <input type="text" ... /> che è il codice per un campo di testo, o come <input type="password" ... />, che genera un campo di testo dove le parole sono mascherate da simboli.
    Infine c'è <input type="submit" name="registrati" value="Registrati" /> dove submit indica che questo input è un pulsante di invio, chiamato registrati e con una scritta Registrati .
    Alla pressione di quel pulsante si viene mandati all'action del form (... action="registrazione.php" ...) e tutti i dati del form vengono inviati a quella pagina tramite post ovvero il method del form.

    Avendo creato il form in HTML passiamo ora alla realizzazione del codice per registrare la propria identità o eseguire il log-in.
    -Controllo del pulsante premuto, controllo dei dati, inserimento o log-in
    Una volta inseriti il nickname e la password, questa pagina controlla quale pulsante è stato premuto, e se è stato premuto "Registrati" allora controlla che il nickname non sia già presente nel db, e in caso di successo, inserisce l'utente nel file di testo.
    Se invece viene premuto il pulsante di Log-In allora lo script controlla che la password associata al nickname sia corretta e se lo è logga l'utente.

    -Cominciamo con il codice
    Codice PHP:
    <?php
    function controlla_presenza($nick){
    $file = file("utenti.php");
    foreach(
    $file as $rigo) {
    $ex = explode("|",$rigo);
    if(
    $ex[1] == $nick) {
    return
    "presente";
    }
    }
    }
    function
    nick_pass_ok($nick,$pass) {
    $pass = md5($pass);
    $file = file("utenti.php");
    foreach(
    $file as $rigo) {
    $ex = explode("|",$rigo);
    if(
    $ex[1] == $nick && $ex[2] == $pass) { return "ok"; }
    }
    }
    $nick = $_POST['nome'];
    $nick = str_replace("|","",$nick);
    $nick = str_replace("\\","",$nick);
    $vpass = $_POST['pass'];
    $vpass = str_replace("|","",$vpass);
    $vpass = str_replace("\\","",$vpass);
    $pass = md5($vpass);
    if(
    $_POST['registrati'] || $_POST['login']){
    if(
    trim($nick) == "" || trim($pass) == "") {
    header("Location:form.html");
    }
    }
    if(
    $_POST['registrati']) {
    $check = controlla_presenza($nick);
    if(
    $check == "presente") { echo "Utente già presente!"; exit(); }
    $fp = fopen("utenti.php","a+");
    fwrite($fp,"<?|".$nick."|".$pass."|\n");
    fclose($fp);
    echo
    "$nick registrato! Password: $vpass";
    echo
    "<a href='form.html'>Torna alla pagina di login</a>";
    }else if(
    $_POST['login']) {
    $contr = nick_pass_ok($nick,$pass);
    if(
    $contr == "ok") { echo "$nick sei loggato!";
    echo
    "Visualizza l'area riservata!";
    }else{
    echo
    "Nickname o password errati!";
    }
    }
    ?>
    -Analizziamo bene il codice
    la funzione controlla_presenza() apre il file utenti.php e va alla ricerca, con un ciclo foreach del nickname dichiarato come termine della funzione (controlla_presenza($nick))

    la funzione nick_pass_ok() serve ad autenticare il nick e la pass dichiarati, cercando nel file utenti.php analogamente a controlla_presenza(), con l'unica differenza che questa funzione controlla sia il nick sia la password.

    Dichiariamo ora le variabili $nick e $pass contenenti i due input text della pagina form.html e rimpiazziamo il carattere |, perchè di vitale importanza nel file (serve a dividere i records) e il carattere di backslash.

    Con questa riga di codice:
    Codice PHP:
    if(trim($nick) == "" || trim($pass) == "") {
    header("Location:form.html");
    }
    controlliamo che le variabili $nick e $pass non siano vuote. Se lo sono si viene rispediti a form.html .

    Se è stato cliccato il pulsante Registrati, allora alla variabile $check viene assegnato il risultato della funzione controlla_presenza e se restituisce "presente" allora viene terminato il programma con un exit(); e un echo(); .
    Se non verrà eseguito l'exit(); si eseguirà la parte di codice inferiore. Cioè l'inserimento di dati nel file "utenti.php" .

    Si noti che in ogni riga del file utenti.php ho messo "<?" prima del resto. Questo perchè si vuole che venga generato un errore e di conseguenza non visualizzato ciò che il file contiene.
    Si noti anche che la password viene criptata in md5.

    Se viene premuto Log-In, allora si assegnerà alla variabile $contr la funzione nick_pass_ok(); e se essa restituirà "ok" allora verrà mandato all'utente un messaggio di conferma (con il primo echo) e poi verrà visualizzato il contenuto protetto (con il secondo echo).
    Naturalmente si possono fare molte altre cose, come l'assegnazione di un cookie.
    Vedi: php.net

    Risultato: FORM . HTML
    Ultima modifica di funcool : 24-11-2007 alle ore 09.59.52

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •