Visualizzazione dei risultati da 1 a 15 su 54

Hybrid View

  1. #1

    Registrazione tramite email valida e procedura di login e logout: parte I

    Ciao a tutti,
    posto un esempio semplice di come possiamo permettere l'accesso alle aree protette del nostro sito solo agli utenti che abbiano fornito un email valida in fase id registrazione.

    Sono richiesti l'utlizzo di MySql, e la configurazione per l'invio delle email in locale

    Sintetizzando possiamo dire che questo esempio si svolge nelle seguenti fasi:
    1. Realizzazione tabelle necessaire: creatab.php
    2. Elaboazione pagina di registrazione: registrazione.php
    3. Inserimento dati nel DB ed invio email per la conferma: data_insert.php
    4. Conferma della registrazione: confirm_reg.php
    5. Realizzazione pagina di login (sfruttando le sessioni): index.php
    6. Realizzazione pagina di logout: logout.php

    Tutti le spiegazioni del susseguirsi delle azioni sono state aggiunte sotto forma di commenti all'interno delle pagine stesse, per una maggiore chiarezza.

    1. Realizzazione tabelle necessaire: iniziamo creando le due tabelle che ci serviranno per il proseguo di questo esempio.

    Codice PHP:
    <?php
    require('connessionedb.php'); //o le vostre istruzioni per il collegaamento al db

    $query "CREATE TABLE user (
               user_id INT(11) NOT NULL AUTO_INCREMENT,
               user_firstname VARCHAR (50) NOT NULL,
               user_lastname VARCHAR (50) NOT NULL,
               user_username VARCHAR (11) NOT NULL,
               user_password VARCHAR (32) NOT NULL,
               user_email VARCHAR (50) NOT NULL,
               user_reg TINYINT (1) NOT NULL default 0,
               PRIMARY KEY (user_id))"
    ;
    $users mysql_query($query) or die(mysql_error());

    $qry "CREATE TABLE confirm (
               confirm_id INT(11) NOT NULL AUTO_INCREMENT,
               confirm_validator VARCHAR (32) NOT NULL,
               confirm_userid INT (11) NOT NULL default 0,
               PRIMARY KEY (confirm_id))"
    ;
    $confirm mysql_query($qry) or die(mysql_error());
    ?>
    2. Elaboazione pagina di registrazione: registrazione.php. Questa pagina permette all'utente di fornire i propri dati per l'iscrizione al sito.

    Codice PHP:
    <?php
    session_start
    (); /* session_start - Inizializza i dati di sessione 
    creando una sessione (o riprendendo quella corrente). 
    N.B. session_start() va messo all'inizio delle pagine php e prima del codice HTML*/
    /*$_SESSION['log'] è la prima variabile di sessione che utilizzeremo.
    In questo esempio $_SESSION['log'] contiene un valore asseganto nella pagina di login,
    che vedremo più avnti, che in pratica assume due valori (da noi stabiliti): 0 se
    l'utente non ha effettuato il login e 1 se l'utente ha effettuato il login.
    Nell'esempio concreto impediamo ad un utente logato di effettuare un'altra iscrizione*/
    if ($_SESSION['log'] == 1)
    {
     echo 
    "

    [b]Sei già registrato![/b]
    Per effettuare una nuova registrazione" 
    .
          
    "ritorna alla Home Page ed effettua il Logout.

    "
    ;
     echo 
    "<a href=\"index.php\"><<< Clicca qui per ritornare alla Home Page</a></p>";
     exit();
    }
    ?>
    <html>
    <head>
    <title>Registrazione</title>
    <!-- Per comodita e completezza, nello svolgimento degli script,
    utilizzeremo 2 javascript che ci permettono di contollare le seguenti azioni:
    1. function ver() - la quale controlla che tuttti i campi del nostro form
    di inserimento siano compilati.
    2. function ControllaMail() - la quale controlla che l'email inserita sia
    solo sintatticamente corretta (e non se realmente esistente).
    Possiamo dire che il loro utilizzo in questo caso risulta
    essere più adatto, rispetto a script equivalenti in php, in quanto gli javascript
    vengono eseguiti sul lato client, mentre quelle php
    passano al server (lato server) e poi restituite all'utente sotto forma di html. -->
    <SCRIPT LANGUAGE="JavaScript">
    function ver()
       {
       for (i=0; i<document.forms[0].elements.length; ++i)
          if(document.forms[0].elements[i].value == "")
             {
             alert("Riempire tutti i campi!");
             document.forms[0].elements[i].focus();
             return false;
             }
       return true; 
       }
    </SCRIPT>
    <SCRIPT>
    function ControllaMail()
       {
       EmailAddr = document.modulo.email.value;
       Filtro = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
       if (Filtro.test(EmailAddr))
          return true;
       else
          {
          alert("Controlla l'indirizzo e-mail inserito!");
          document.modulo.email.focus();
          return false;
          }
       }
    </SCRIPT>
    </head>
    <body>



    <!-- Procediamo costruendo il nostro form che passerà le informazioni inserite alla pagina data_insert.php. 
    Da notare: 
    1. action="data_insert.php?action=add&type=user" - che ci permette di passare le 2 variabili action e type, 
    con i loro rispettivi valori, add e user 
    2. il richiamo delle funzioni javascript al premere del pulsante "Conferma": onSubmit="return (ver() && ControllaMail());" -->
    <form name="modulo" action="data_insert.php?action=add&type=user" method="post" onSubmit="return (ver() && ControllaMail());">
    Nome

    <input name="firstname" type="text" size="25" maxlength="30">


    Cognome

    <input name="lastname" type="text" size="25" maxlength="30">


    Username

    <input name="user" type="text" size="20" maxlength="11">

     
    Password

    <input name="pass" type="password" maxlength="8">


    E-mail

    <input name="email" type="text" size="50" maxlength="50">


    <input type="submit" name="Submit" value="Conferma">
    </form>
    </p>
    </body>
    </html>
    3. Inserimento dati nel DB ed invio email per la conferma: data_insert.php. Questa pagina ci permette di inserire i dati del utente nel db e di inviare un'email contenente un link alla pagina confirm_reg.php per la conferma del iscrizione.

    Codice PHP:
    <?php
    require('connessionedb.php'); //o le vostre istruzioni per il collegamento al database
    /*La prima cosa da notere è l'utilizzo di mysql_real_escape_string():
     - questa funzione ci permette di inserire nel db (se utiliziamo mysql)
    il contenuto della variabile post esattamnete così com'è,
    senza creare problemi di sintassi durante l'inserimento.Si veda l'esempio sotto*/
    $user mysql_real_escape_string($_POST['user']); /* Se il valore contenuto in $_POST['user'] è: D'amico questo viene trasformato in: D\'amico*/
    $user_mail $_POST['user']; // Viceversa se usiamo il metodo tradizionale di assegnazione
    //rimane il valore originale assegnato: D'amico
    //quello che in questo esempio ci serve per inviare una mail all'utente,
    //contenente l'username originale (non trasformato).
    $pass mysql_real_escape_string(md5($_POST['pass']));
    //La funzione md5 ci permette di trasformare il contenuto di una stringa
    //in una sequenza di 32 simboli alfa nimerici detta hash.
    //Noi utiliziamo questa funzione per memorizzare nel db NON il valore originale della password,
    //ma il suo hash.
    //N.B. Questo significa che una volta persa (dimenticata) la password non è più possibile
    //risalire al suo valore originale.
    $pass_mail $_POST['pass']; 
    $firstname mysql_real_escape_string($_POST['firstname']);
    $lastname =  mysql_real_escape_string($_POST['lastname']);
    //Poi verifichiamo che l'username e l'email non siano gia presenti nel db
    $query "SELECT * FROM user " .
              
    "WHERE user_username = '$user' " .
              
    "OR user_email = '$pass' ";
    $result mysql_query($query) or die (mysql_error());
    if (
    mysql_num_rows($result) != 0)
    {
     while (
    $row mysql_fetch_array($result))
     {
      
    //username già presente nel db
      
    if ($row['user_username'] == $user)
      {
       echo 
    "

    "
    ;
       echo 
    "L'username, [b]" $row['user_username'] . "[/b] è già in uso da un altro utente, scegliere uno diverso";
       echo 
    "</p>";
      }
      
    //email già presente nel db
      
    if ($row['user_email'] == $_POST['email'])
      {
       echo 
    "

    "
    ;
       echo 
    "La casella E-mail, [b]" $row['user_email'] . "[/b] è già presente nel Data Base, scegliere una diversa";
       echo 
    "</p>";
      }
     }
     
    //rimandiamo l'utente alla pagina precedente
     
    echo "

    "
    ;
     echo 
    "<a href=\"registrazione.php\">";
     echo 
    "<<< Clicca qui per ritornare alla pagina precedente";
     echo 
    "</a>";
     echo 
    "</p>";
     exit();
    }
    //Se invece username e email non sono presenti nel db procediamo con l'inserimanto 
    else
    {
       switch (
    $_GET['action'])
       {
         case 
    "add":
         switch (
    $_GET['type'])
         {
          case 
    "user":
          
    $sql "INSERT INTO user
                   (user_firstname,
            user_lastname,
             user_username,
            user_password,
            user_email)
          VALUES
            ('
    $firstname',
            '
    $lastname',
            '
    $user',
            
    $pass',
            '" 
    $_POST['email'] . "')";
           
    $users mysql_query($sql) or die(mysql_error());
           
    $id mysql_insert_id(); // recuperiamo l'id (contenuto nel campo user_id) dell'utente appena inserito
           
    break;
         }
        break;
       }
    }

    //Andiamo avanti assegnando un valore casuale alla variabile $msgid:
    //un valore identificativo che verrà inserito nella tabella confirm e permetterà la conclusione dell'iscirzione.
    //Anche in questo caso utilizziamo la funzione md5, generando però un hash casuale, perchè l'hash generato sia diverso per ogni iscrizione.
    $temp gettimeofday(); 
    $msec = (int) $temp["usec"]; 
    $msgid md5(time() . $msec);
    $ins "INSERT INTO confirm
           (confirm_validator,
        confirm_userid)
         VALUES
       ('
    $msgid',
        '
    $id')";
    $res mysql_query($ins) or die(mysql_error());
    ?>
    <html>
    <head>
    <title>Inserimento dati</title>
    </head>
    <body>
    <?php
    /*Arrivati a questo punto non ci resta che spedire un'email all'utente (all'indirizzo fornito
    in fase di registrazione) che contiene:la sua password in chiaro,il suo username ed un link
    alla pagina confirm_reg.php.*/
    //Vediamo come funziona
    $to $_POST["email"];
    $toname $_POST["firstname"];
    $subject "Completa la tua registrazione";

    /* Prima di continuare apriamo una piccola parentesi, chiarendo un concetto molto semplice:
    - Se vogliamo inviare un email che contiene formattazioni html, bisogna ricorrere all'utilizzo di una classe.
    - Se si vuol mandare un'email semplice che non contiene formattazioni html, non è necessario usare una classe
    Nel nostro esempio, abbiamo scelto di inviare un'eamil, utlizzando una classe che definisce
    il corpo del messaggio e le intestazione del messaggio.
    Forniamo un link ad una classe mail completa e performante
    [url]http://phpmailer.sourceforge.net[/url] */

    //Definiamo la classe che definisce il corpo del messaggio ($message) e le intestazione del messaggio ($headers)
    $boundary "==MP_Bound_xyccr948x==";
    $headers "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n";
    $headers .= "From: [email]quellochevuoi@tuoserver.it[/email]\r\n"//inseriamo l'indirizzo email del mittente, cioè il nostro
    $html_msg "<center>";
    $html_msg .= "<table width=\"500\" border=0 cellpadding=\"4\">";
    $html_msg .= "<tr><td align=\"center\">";
    $html_msg .= "</td></tr>";
    $html_msg .= "<tr><td>Questi sono i dati della tua registrazione:";
    $html_msg .= "</td></tr><tr><td>Username: <font color=\"red\">" $user_mail "</font>";
    $html_msg .= "</td></tr><tr><td>Password: <font color=\"red\">" $pass_mail "</font>";
    $html_msg .= "</td></tr><tr><td align=\"center\">";
    $html_msg .= "</td></tr></table></center>";
    $confirmmessage "Salve " $toname ",\n\n";
    $confirmmessage .= "per completare la tua registrazione devi cliccare sul link sottostante:\n\n";
    $confirmmessage .= $html_msg "\n\n";
    // Attenzione! Qui sotto dobbiamo inserire il percorso esatto che porta alla nostra pagina confirm_reg.php
    $confirmmessage .= "<a href=\"http://localhost/percorso pagina confirm_reg.php" .
      
    "?id=$msgid\">Clicca qui per confermare la tua registrazione</a>";
    $message "This is a Multipart Message in MIME format\n";
    $message .= "--$boundary\n";
    $message .= "Content-type: text/html; charset=iso-8859-1\n";
    $message .= "Content-Transfer-Encoding: 7bit\n\n";
    $message .= $confirmmessage "\n";
    $message .= "--$boundary--";
    $mailsent mail($to$subject$message$headers);
    if (
    $mailsent)
    {
      echo 
    "Salve" .  $toname ",
    "
    ;
      echo 
    "Un messaggio è stato inviato all'indirizzo [b]" $to "[/b] da te fornito.

    "
    ;
      echo 
    "IMPORTANTE:
    "
    ;
      echo 
    "Per completare la registrazione al sito devi aprire la tua casella e-mail, leggere il messaggio di conferma e cliccare sul link che troverai all'interno.

    "
    ;
    } else {
      echo 
    "Errore durante l'invio dell'e-mail.";
    }
    ?>
    </body>
    </html>

  2. #2
    Dove intervenire nel file data_insert.php e quale l'istruzione
    per far memorizzare nel database i caratteri del tipo tedesco se una persona si registra utilizzando questi caratteri ?
    Ultima modifica di lupusonline; 21-02-2015 a 20:03

  3. #3
    Quote Originariamente inviata da lupusonline Visualizza il messaggio
    Dove intervenire nel file data_insert.php e quale l'istruzione
    per far memorizzare nel database i caratteri del tipo tedesco se una persona si registra utilizzando questi caratteri ?
    Il mio problema è di far memorizzare nel DB un nominativo inserito da persone straniere quali ad esempi i tedeschi, gli olandesi, i danesi, i cecosclovacchi i cui cognomi o nomi facilmente contengono dei caratteri che noi in Italia non usiamo come ä ö ü Ä Ö Ü ß eccetera.
    Da quanto ho potuto valutare i files che sono interessati sono registrazione.php e data_insert.php nei cui codici prima si fa l'IMPUT nella form per poi passare con POST i dati al DB.
    Allego due immagini che contrengono il tracciato del codice sperandi di far capire dove si deve intevenire affinchè i caratteri stranieri possano poi essere memorizzati nel DB.
    Grazie in anticipo per chi dovesse rispondere.Codice-registrazione.phpA.jpgCodice-data_insert.phpA.jpg

  4. #4
    Quote Originariamente inviata da lupusonline Visualizza il messaggio
    Il mio problema è di far memorizzare nel DB un nominativo inserito da persone straniere quali ad esempi i tedeschi, gli olandesi, i danesi, i cecosclovacchi i cui cognomi o nomi facilmente contengono dei caratteri che noi in Italia non usiamo come ä ö ü Ä Ö Ü ß eccetera.
    Da quanto ho potuto valutare i files che sono interessati sono registrazione.php e data_insert.php nei cui codici prima si fa l'IMPUT nella form per poi passare con POST i dati al DB.
    Allego due immagini che contrengono il tracciato del codice sperandi di far capire dove si deve intevenire affinchè i caratteri stranieri possano poi essere memorizzati nel DB.
    Grazie in anticipo per chi dovesse rispondere.Codice-registrazione.phpA.jpgCodice-data_insert.phpA.jpg
    codice:
     //Ho provato a modificare alcune istruzioni  in registrazione.php nella parte della form
     //dove vengono digitati da remoto il nome, il cognome, lo email, la password 
       
     <input name="firstname" type="text" size="25" maxlength="30">
     //con 
     <input name="firstnameXXX" type="text" size="25" maxlength="30">
    
    //Il file data_insert.php esegue quanto segue (dove ovviamente è presente quanto io ho modificato ):
    $firstname = htmlspecialchars(utf8_decode(trim($firstnameXXX)));
    
    $firstname = mysql_real_escape_string($_POST['firstname']);
       
      //Qui il dato dovrebbe inserirsi nel DB
       
         case "user": $sql = "INSERT INTO user (user_firstname, user_lastname, user_username,
    user_password, user_verapassword, user_email, user_nation, user_giornoregistrazione)
     VALUES ('$firstname', '$lastname', '$user', '$pass', '$verapassword', '".$_POST['email']."', 
    '$nation', '$giornoregistrazione')";
    
    //Dopo un'iscrizione di una persona che ha usato i caratteri del tipo tedesco
    //se controllo il DB il campo risulta vuoto
    //Dove ho errato o come gestire  charset=utf-8 che deve essere inserito da qualche parte 
    //nei seguenti files: registrazione.php, data_insert.php, confirm_reg.php ?
    Ultima modifica di lupusonline; 01-03-2015 a 13:05

  5. #5
    In data_insert.php
    ho provato ad inserire e modificare alcune istruzioni per vedere se così facendo vengono memorizzati nel database i caratteri stranieri come vengono digitati.
    Queste qui sotto le due prove fatte (prima una e dopo l'altra e quindi non in contemporanea), ma il risultato non cambia, cioè nel database ci sono caratteri strani che non corrispondono alle lettere digitate ö ä ß ÜÄ Ö ü ...

    codice:
    $firstname = mysql_real_escape_string($_POST['firstname']);
    $lastname = mysql_real_escape_string($_POST['lastname']);
    ....
    $firstname = htmlspecialchars(utf8_encode(trim($_POST['firstname'])),ENT_QUOTES);
    $lastname = htmlspecialchars(utf8_encode(trim($_POST['lastname'])),ENT_QUOTES);

    Immagini allegate Immagini allegate
    Ultima modifica di lupusonline; 03-03-2015 a 19:03

  6. #6
    Quote Originariamente inviata da lupusonline Visualizza il messaggio
    In data_insert.php
    ho provato ad inserire e modificare alcune istruzioni per vedere se così facendo vengono memorizzati nel database i caratteri stranieri come vengono digitati.
    Queste qui sotto le due prove fatte (prima una e dopo l'altra e quindi non in contemporanea), ma il risultato non cambia, cioè nel database ci sono caratteri strani che non corrispondono alle lettere digitate ö ä ß ÜÄ Ö ü ...

    codice:
    $firstname = mysql_real_escape_string($_POST['firstname']);
    $lastname = mysql_real_escape_string($_POST['lastname']);
    ....
    $firstname = htmlspecialchars(utf8_encode(trim($_POST['firstname'])),ENT_QUOTES);
    $lastname = htmlspecialchars(utf8_encode(trim($_POST['lastname'])),ENT_QUOTES);
    Mi sono documentato un po' di qua e di, là e sembra che
    l'estensione mysql_real_escape_string
    sia sconsigliata dal PHP 5.5.0, e che venga rimossa in futuro.

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.