• ModSenior

    Direi sia meglio aprire una discussione apposita per ciò, con questo tutorial centrerebbe ben poco, e quindi finiremmo offtopic.


  • User Attivo

    Va bene,allora provo a riportare la risposta su un nuovo topic sempre in area php..

    Discussione: [Area privata senza database]


  • User Newbie

    Ciao a tutti,
    dopo mesi di girovagare ho trovato questo forum e grazie a Thedarkita sono riuscito a farmi la mia bella area riservata, scaricato il codice, modificato e implementato secondo le mie esigenze funziona tutto correttamente.
    Però anche io ho la mia bella gatta da pelare, ossia il recupero dei dati; scaricato e studiato il tutorial (che mi funziona correttamente), invece di far reimpostare la password, vorrei che inserendo la mail, mi arrivassero i miei dati, quelli con cui mi sono iscritto, ossia nome utente e password.
    Praticamente ho modificato la pagina "recupero.php" ed eliminato la pagina "reset.php" di modo che mi arrivi solo una mail con dentro user e pass; la mail ariva, ma senza i dati.

    Questo è il codice da me modificato:

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

    // Se il modulo viene inviato...
    if(isset($_POST['recupera']))
    {
    // Dati Inviati dal modulo
    $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())
    $mail = addslashes($mail);
    if(!eregi("^[a-z0-9][
    .a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})", $mail))
    die('Email non valida');
    else
    {
    // Cerco se c'è un utente registrato con questa email
    $query = mysql_query("SELECT user AND pass FROM utenti WHERE mail = '$mail' LIMIT 1");

    // L'utente esiste?
    if(mysql_num_rows($query) == 0)
        die('Nessun utente registrato con questa email');
    
    // Inserisco i dati dell'utente recuperati mediante la query in un array
    $recupero = mysql_fetch_array($query);
    
    // Inviamo l'email all'utente
    $message = 'Per modificare la password del Suo account deve visitare il seguente link:'.$recupero.' ';
        // Header dell'email, per mandarla in formato html
        $headers = "From: nome sito <[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, 'Reset password - Tutorial Area Privata', $message, $headers);
    
    die('Le abbiamo inviato un email contenente le istruzioni per il reset della password, controlli la sua casella email!');
    

    }
    }
    ?>[/PHP]


  • User Newbie

    Dimenticavo.
    So bene che una pass criptata non può essere recuperata, ma nel mio db le password vengono inserite in chiaro, non ho bisogno della criptatura.


  • User

    Se vuoi che invi i dati devi modificare questa parte:
    [php]// Inviamo l'email all'utente
    $message = 'Per modificare la password del Suo account deve visitare il seguente link:'.$recupero.' ';[/php]

    Con questo
    [php]// Inviamo l'email all'utente
    $message = 'Il Suo Username è '.$recupero['user'].' e la sua Password '.$recupero['pass'].' ';[/php]


  • User Newbie

    Nulla da fare, non funziona la mail mi arriva con questo testo:

    "Il Suo Username è e la sua Password"

    Mi sorge il dubbio che sia sbagliata la query al database, può essere?


  • User

    Ah si,
    devi mettere cosi:
    [php]// Cerco se c'è un utente registrato con questa email
    $query = mysql_query("SELECT user, pass FROM utenti WHERE mail = '$mail' LIMIT 1");[/php]


  • User Newbie

    Grande RCayla!

    Sei stato gentilissimo, ora funziona tutto alla perfezione, ora non mi rimane che sistemare il codice giusto nella sua paginetta e sono a posto.

    Ancora grazie!


  • User Newbie

    Salve a tutti.
    Innanzi tutto volevo fare i complimenti per questo tutorial/topic non solo al bravissimo e pazientissimo thedarkita ma anche a tutti coloro che ne stanno aggiungendo un po del loro...BRAVI davvero!!!
    Partendo dal presupposto che ho una conoscenza molto base di php, sto cercando di riadattare questo lavoro alle mie esigenze. In particolare, sto adottando la soluzione di brinchetto, con utilizzo di pass non criptata. Ho realizzato una semplice pagina di recupero username e password in questo modo:
    recupero.php
    [php]
    <?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['recupera']))
    {
    // Dati Inviati dal modulo
    $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())
    $mail = addslashes($mail);
    if(!eregi("^[a-z0-9][
    .a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})", $mail))
    die('Email non valida');
    else
    {
    // Cerco se c'è un utente registrato con questa email
    $query = mysql_query("SELECT user, pass FROM utenti WHERE mail = '$mail' LIMIT 1");

    // L'utente esiste?
    if(mysql_num_rows($query) == 0)
        die('Attenzione: nessun utente registrato con questa email<p><a href="javascript:history.back()">Indietro</a>');
    
    // Inserisco i dati dell'utente recuperati mediante la query in un array
    $recupero = mysql_fetch_array($query);
    
    // Inviamo l'email all'utente
    $message = 'Il Suo Username è '.$recupero['user'].' e la sua Password '.$recupero['pass'].' ';
        // Header dell'email, per mandarla in formato html
        $headers = "From: nome sito <[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, 'Recupero password', $message, $headers);
    
    die('<b>Le abbiamo inviato un email contenente il suo Username e la sua Password, controlli la sua casella email!<b><p><a href="index.php">Indietro</a>');
    

    }
    }
    ?>

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

    <body>
    <form action="" method="post">
    <input name="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
    <input name="recupera" type="submit" value="Recupera dati" /><br />
    </form>
    </body>
    </html>
    [/php]Va tutto ok con FireFox, problema (stranamente) con ie7. Infatti testando ho notato che se invece di cliccare sul tasto "Recupera dati" gli dò Invio, come capita spesso, questo resetta semplicemente il modulo dando l'impressione di avere comunque inviato la richiesta, cosa che in realtà non avviene...
    Che ne pensate? Ho tralasciato qualcosa io?
    Inoltre, come è possibile trasformare nella mail i caratteri tipo è???
    Grazie e alle prossime (sicure) domande...
    Ciao


  • ModSenior

    Ciao gianlucambm,

    ti irngrazio per i complimenti. 🙂
    Per il problema con Internet Explorer al posto di:
    [php]
    if(isset($_POST['recupera']))
    [/php]
    Metti:
    [php]
    if(isset($_POST['mail']))
    [/php]

    Per quanto riguarda invece i caratteri, puoi inserire i caratteri direttamente sotto forma di entità html, per la "è" dovresti usare è altrimenti puoi passare il testo nella funzione htmlentities prima di inviare l'email. Nell'ultimo caso verranno però sostituiti anche i tag html.


  • User Newbie

    Yesssss....!!!
    Mi sa che ti romperò le scatole mooooooolto spesso...:D...è una minaccia...
    Grazie mille di nuovo
    Ciao


  • User Newbie

    @Thedarkita said:

    Nella variabile di sessione hai l'id dell'utente, quindi utilizzi quello per recuperare la sua pagina.

    Prima di tutto volevo salutare e ringraziare tutti per l'impegno e la disponibilità, a seguire avrei piacere di capire questo passaggio, sono alle primissime armi ovviamente, ho seguito il post con attenzione, ho fatto delle prove ma non riesco ad andare avanti.
    Brevemente, non riesco a capire come tradurre in codice che l'utente A quando accede al sito deve e può vedere solo il file (o la cartella) A, e così per tutti gli utenti.

    Grazie infinite a chi mi illuminerà.

    Alessandro


  • ModSenior

    Ciao allcolors62,

    supponiamo di voler rendere accessibile il file a.php all'utente tizio che nel nostro database ha ID=1.
    Il nostro file a.php dovrebbe iniziare cosi:
    [php]
    session_start();
    if($_SESSION['login'] != 1)
    {
    header('Location: /');
    exit;
    }
    [/php]
    In questo modo controlli che l'id dell'utente sia 1, se non lo è lo reindirizzi all'index.


  • User

    Ciao a tutti!
    ho ricevuto la notifica da un utente che internet explorer 8 non funziona la registrazione utenti infatti dopo averlo scaricato ed installato ho appurato la cosa personalmente. Troppo intelligenti sempre i creatori di explorer... che odio... Comunque tornando a noi (scusate lo sfogo), non so se sia un problema del form di per se perchè ultimamente ho implementato il codice della registrazione con jquery che mi controlla "live" se i campi sono corretti.

    Può centrare qualcosa?
    Senza che sto a li a togliere tutto il codice di jquery qualcuno ha avuto lo stesso problema con explorer 8 e versioni precedenti?

    P.S. thedarkita mi si è cancellato il database percui se devi fare prove ti devi registrare nuovamente.

    Grazie in anticipo


  • ModSenior

    Ciao BlueDragon89,

    il problema non credo dipenda dallo script php, visto che è un linguaggio lato server.
    Probabile dipenda da jquery, od altro sempre lato client.


  • User

    Ma scusa tipo anche lo stesso sito di jquery se guardo le apgina in cui ci sono gli esempi a loro funziona anche se lo vedo in explorer...


  • ModSenior

    Non sò cosa hai fatto, quindi non posso risponderti.
    Non hai nemmeno scritto il problema che viene riscontrato con IE 8, ma essendo php lato server per me la conclusione può solo quella.


  • User

    Scusami...allora con ie8 fa il refresh della pagina quando invio il form di registrazione senza però registrare nulla. Se io metto <form action="privata.php"> allora mi dice che la registrazione è andata a buon fine ma senza effettivamente registrare nulla sul server. E' molto lungo il codice lo posto lo stesso?


  • ModSenior

    Controllo che il problema del non fare nulla si presenti sia premendo invio sulla tastiera sia premendo il pulsante submit con il mouse.

    Il codice puoi postarlo comunque tra gli appositi bbcode.


  • User

    Sia con invio tastiera che click mouse il rislutato non cambia.

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

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

    // Dati Inviati dal modulo
    $username = (isset($_POST['username'])) ? trim($_POST['username']) : '';    // Metto nella variabile 'username' il dato inviato dal modulo, se non viene inviato dò di default ''
    $password = (isset($_POST['password'])) ? trim($_POST['password']) : '';    // Metto nella variabile 'password' il dato inviato dal modulo, se non viene inviato dò di default ''
    $password2 = (isset($_POST['password2'])) ? trim($_POST['password2']) : '';    // Metto nella variabile 'password2' 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 ''
    $name = (isset($_POST['name'])) ? trim($_POST['name']) : '';    // Metto nella variabile 'name' il dato inviato dal modulo, se non viene inviato dò di default ''
    $surname = (isset($_POST['surname'])) ? trim($_POST['surname']) : '';    // Metto nella variabile 'surname' il dato inviato dal modulo, se non viene inviato dò di default ''
    $azienda = (isset($_POST['azienda'])) ? trim($_POST['azienda']) : '';    // Metto nella variabile 'azienda' il dato inviato dal modulo, se non viene inviato dò di default ''
    $occupazione = (isset($_POST['occupazione'])) ? trim($_POST['occupazione']) : '';    // Metto nella variabile 'occupazione' il dato inviato dal modulo, se non viene inviato dò di default ''
    $indirizzo = (isset($_POST['indirizzo'])) ? trim($_POST['indirizzo']) : '';    // Metto nella variabile 'indirizzo' il dato inviato dal modulo, se non viene inviato dò di default ''
    $citta = (isset($_POST['citta'])) ? trim($_POST['citta']) : '';    // Metto nella variabile 'citta' il dato inviato dal modulo, se non viene inviato dò di default ''
    $comune = (isset($_POST['comune'])) ? trim($_POST['comune']) : '';    // Metto nella variabile 'comune' il dato inviato dal modulo, se non viene inviato dò di default ''
    $provincia = (isset($_POST['provincia'])) ? trim($_POST['provincia']) : '';    // Metto nella variabile 'provincia' il dato inviato dal modulo, se non viene inviato dò di default ''
    $cap = (isset($_POST['cap'])) ? trim($_POST['cap']) : '';    // Metto nella variabile 'cap' il dato inviato dal modulo, se non viene inviato dò di default ''
    $telefono = (isset($_POST['telefono'])) ? trim($_POST['telefono']) : '';    // Metto nella variabile 'telefono' il dato inviato dal modulo, se non viene inviato dò di default ''
    $fax = (isset($_POST['fax'])) ? trim($_POST['fax']) : '';    // Metto nella variabile 'fax' 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()) {
        $username = addslashes($username);
        $password = addslashes($password);
        $mail = addslashes($mail);
        $azienda = addslashes($azienda);
        $occupazione = addslashes($occupazione);
        $indirizzo = addslashes($indirizzo);
        $citta = addslashes($citta);
        $comune = addslashes($comune);
        $provincia = addslashes($provincia);
        $cap = addslashes($cap);
        $telefono = addslashes($telefono);
        $fax = addslashes($fax);
    
    }
    
    // Controllo il Nome Utente
    if(strlen($username) < 4 || strlen($username) > 28)
        die('Nome Utente troppo corto, o troppo lungo <a href="javascript:history.go(-1); return false">Modifica i Dati inseriti</a>');
    // Controllo il nome utente non sia già occupato
    elseif(mysql_num_rows(mysql_query("SELECT username FROM utenti WHERE username = '$username' LIMIT 1")) == 1)
        die('Nome Utente non disponibile <a href="javascript:history.go(-1); return false">Modifica i Dati inseriti</a>');
    // Controllo la Password
    elseif(strlen($password) < 4 || strlen($password) > 28)
        die('La password deve avere una lunghezza compresa tra i 4 e i 28 caratteri');
    elseif($password != $password2)
        die('Le due password non corrispondono');
    // Controllo l'E-mail
    elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail))
        die('Email non valida');
        // 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 da un altro utente');
    // Controllo il campo Nome
    elseif(strlen($name) < 3 || strlen($name) > 28)
        die('Nome non valido');
    // Controllo il campo Cognome
    elseif(strlen($surname) < 3 || strlen($surname) > 28)
        die('Cognome non valido');
    // Controllo il campo Azienda
    elseif(strlen($azienda) < 0 || strlen($azienda) > 200)
        die('Azienda non valida');
    // Controllo il campo Occupazione
    elseif(strlen($occupazione) < 0 || strlen($occupazione) > 200)
        die('Occupazione non valida');
    // Controllo il campo Indirizzo
    elseif(strlen($indirizzo) < 3 || strlen($indirizzo) > 200)
        die('Indirizzo non valido');        
    // Controllo il campo Città
    elseif(strlen($citta) < 3 || strlen($citta) > 200)
        die('Residenza non valida');
    // Controllo il campo Comune
    elseif(strlen($comune) < 2 || strlen($comune) > 200)
        die('Comune non valido');
    // Controllo il campo Provincia
    elseif(strlen($provincia) != 2)
        die('Provincia non valida');
    // Controllo il campo Cap
    elseif(strlen($cap) != 5)
        die('Cap non valido');
    // Controllo il campo Telefono
    elseif(strlen($telefono) < 2 || strlen($telefono) > 200)
        die('Campo Telefono non valido');
    // Controllo il campo Fax
    elseif(strlen($fax)  < 0 || strlen($comune) > 200)
        die('Campo Fax non valido');
    
    // Registrazione dell'utente nel database
    else
    {
        
        // Crypt della password per garantire una miglior sicurezza
        $password = md5($password);
        
        
        // 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 . associazioneconsumatorieuropei . eu/ auth/attivazione .php?code='.$attivazione.'">Attiva account</a>';
        // Header dell'email, per mandarla in formato html
        $headers = "From: Associazione Consumatori Europei <[email protected]>\r\n";
        $headers .= "Reply-To: email\r\n";
        $headers .= "Return-Path: email\r\n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    
        // Invio L'email
        mail($mail, 'Associazione Consumatori Europei - Registrazione web', $message, $headers);
        
        // Query per l'inserimento dell'utente nel database
        $strSQL = "INSERT INTO utenti (username,password,mail,name,surname,azienda,occupazione,indirizzo,citta,comune,provincia,cap,telefono,fax,attivazione)";
        $strSQL .= "VALUES('$username', '$password', '$mail', '$name', '$surname', '$azienda', '$occupazione', '$indirizzo', '$citta', '$comune', '$provincia', '$cap', '$telefono', '$fax', '$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;
    }
    

    }
    /INIZIO USERNAME VALIDATION/

    //get the username
    $username = mysql_real_escape_string($_POST['username']);

    //mysql query to select field username if it's equal to the username that we check '
    $result = mysql_query('select username from utenti where username = "'. $username .'"');

    //if number of rows fields is bigger them 0 that means it's NOT available '
    if(mysql_num_rows($result)>0){
    //and we send 0 to the ajax request
    echo 0;
    }else{
    //else if it's not bigger then 0, then it's available '
    //and we send 1 to the ajax request
    echo 1;
    }
    ?>
    [/php]```

    <form action="privata.php" method="post">
    <div align="center">
    <table width="100%">
    <tr>
    <td><font color="#FF0000">Dati per il Log-in</font> <br>
    <table border="0" width="100%">
    <tr>
    <td colspan="2">
    <p class="pform">
    <strong>Username:</strong><br />
    <div id="msgbox" style="display:none; color:#FF3300;"></div>
    </p>
    </td>
    <td colspan="2"><input name="username" class="inputform" type="text" id="username" onFocus="if(this.value=='Username') this.value='Username';"/>
    <script type="text/javascript">
    var campo = new LiveValidation('username', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Length, { minimum: 4, tooShortMessage: "Il campo deve contenere minimo 4 caratteri" } );
    campo.add(Validate.Length, { maximum: 28, tooLongMessage: "Il campo può contenere massimo 28 caratteri" } );
    </script>

                                </td>
                            </tr>
                            <tr>
                                <td colspan="2" ><p class="pform"><strong>E-mail:</strong></p></td>
                                <td colspan="2" ><input name="mail" class="inputform" type="mail" id="mail" value="" onFocus="if(this.value=='Email') this.value='Email';" /> <script type="text/javascript">
    

    var campo = new LiveValidation('mail', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Email, { failureMessage: "Devi inserire un indirizzo e-mail valido!" } );
    campo.add(Validate.Length, { minimum: 4, tooShortMessage: "Il campo deve contenere minimo 4 caratteri" } );
    </script>
    </td>
    </tr>
    <tr>
    <td colspan="4">
    <?php if ($message) : ?>
    <p id="message"><?=$message?></p>
    <?php endif ?>
    </td>
    </tr>
    <tr>
    <td width="15%"><p class="pform"><strong>Password:</strong></p></td>
    <td width="35%"><input name="password" class="inputform" type="password" id="password" value="" onFocus="if(this.value=='Password') this.value='';" /> <script type="text/javascript">
    var campo = new LiveValidation('password', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Length, { minimum: 4, tooShortMessage: "Il campo deve contenere minimo 4 caratteri" } );
    campo.add(Validate.Length, { maximum: 28, tooLongMessage: "Il campo può contenere massimo 28 caratteri" } );

    </script>
    </td>
    <td width="15%"><p class="pform"><strong>Conferma:</strong></p></td>
    <td width="35%"><input name="password2" class="inputform" type="password" id="password2" value="" onFocus="if(this.value=='Password2') this.value='';" /> <script type="text/javascript">
    var campo = new LiveValidation('password2', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Confirmation, { match: 'password', failureMessage: "La password non corrisponde a quella inserita!" } );
    </script>
    </td>
    </tr>
    <tr>
    <td colspan="4"><br>
    <font color="#FF0000">Dati Personali</font> <br> </td>
    </tr>
    <tr>
    <tr>
    <td width="15%"><p class="pform"><strong>Nome:</strong></p></td>
    <td width="25%"><input name="name" class="inputform" type="text" id="name" value="" onFocus="if(this.value=='Nome') this.value='Nome';" /> <script type="text/javascript">
    var campo = new LiveValidation('name', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Length, { minimum: 3, tooShortMessage: "Il campo deve contenere minimo 3 caratteri" } );
    campo.add(Validate.Length, { maximum: 28, tooLongMessage: "Il campo può contenere massimo 28 caratteri" } );

    </script>
    </td>
    <td width="15%"><p class="pform"><strong>Cognome:</strong></p></td>
    <td width="35%"><input name="surname" class="inputform" type="text" id="surname" value="" onFocus="if(this.value=='Cognome') this.value='Cognome';" /> <script type="text/javascript">
    var campo = new LiveValidation('surname', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Length, { minimum: 3, tooShortMessage: "Il campo deve contenere minimo 3 caratteri" } );
    campo.add(Validate.Length, { maximum: 28, tooLongMessage: "Il campo può contenere massimo 28 caratteri" } );

    </script>
    </td>
    </tr>
    <tr>
    <td><p class="pform">Azienda:</p></td>
    <td colspan="3"><input name="azienda" class="inputform" type="text" id="azienda" value="" onFocus="if(this.value=='Nome Azienda') this.value='Nome Azienda';"/> <script type="text/javascript">
    var campo = new LiveValidation('surname', { validMessage: "OK!" });
    campo.add(Validate.Length, { maximum: 200, tooLongMessage: "Il campo può contenere massimo 200 caratteri" } );
    </script>
    </td>
    </tr>
    <tr>
    <td><p class="pform">Occupazione:</p></td>
    <td colspan="3"><input name="occupazione" class="longinputform" type="text" id="occupazione" value="" onFocus="if(this.value=='Occupazione') this.value='Occupazione';" size="65" /> <script type="text/javascript">
    var campo = new LiveValidation('surname', { validMessage: "OK!" });
    campo.add(Validate.Length, { maximum: 200, tooLongMessage: "Il campo può contenere massimo 200 caratteri" } );
    </script></td>
    </tr>
    <tr>
    <td colspan="4"><br>
    <font color="#FF0000">Residenza</font> <br> </td>
    </tr>
    <tr>
    <td width="93"><p class="pform"><strong>Indirizzo:</strong></p></td>
    <td colspan="3"><input name="indirizzo" class="longinputform" type="text" id="indirizzo" value="" onFocus="if(this.value=='Indirizzo') this.value='Indirizzo';" size="65" /> <script type="text/javascript">
    var campo = new LiveValidation('indirizzo', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Length, { minimum: 3, tooShortMessage: "Il campo deve contenere minimo 3 caratteri" } );
    campo.add(Validate.Length, { maximum: 200, tooLongMessage: "Il campo può contenere massimo 200 caratteri" } );
    </script>
    </td>
    </tr>
    <tr>
    <td width="93"><p class="pform"><strong>Città:</strong></p></td>
    <td width="120"><input name="citta" class="inputform" type="text" id="citta" value="" onFocus="if(this.value=='Città') this.value='';" /> <script type="text/javascript">
    var campo = new LiveValidation('citta', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Length, { minimum: 3, tooShortMessage: "Il campo deve contenere minimo 3 caratteri" } );
    campo.add(Validate.Length, { maximum: 200, tooLongMessage: "Il campo può contenere massimo 200 caratteri" } );
    </script>
    </td>
    <td width="83"><p class="pform"><strong>Comune:</strong></p></td>
    <td width="120"><input name="comune" class="inputform" type="text" id="comune" value="" onFocus="if(this.value=='Comune') this.value='';" /> <script type="text/javascript">
    var campo = new LiveValidation('comune', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Length, { minimum: 2, tooShortMessage: "Il campo deve contenere minimo 2 caratteri" } );
    campo.add(Validate.Length, { maximum: 200, tooLongMessage: "Il campo può contenere massimo 200 caratteri" } );
    </script>
    </td>
    </tr>
    <tr>
    <td width="93"><p class="pform"> <strong>Provincia:</strong><br>
    <em>[ sigla ]</em> </p></td>
    <td width="120"><input name="provincia" type="text" id="provincia" value="" onFocus="if(this.value=='Provincia') this.value='';" size="3"/> <script type="text/javascript">
    var campo = new LiveValidation('provincia', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Length, { is: 2, wrongLengthMessage: "Il campo deve contenere 2 caratteri" } );
    </script>

    </td>
    <td width="83"><p class="pform"><strong>Cap:</strong></p></td>
    <td width="120"><input name="cap" class="inputform" type="text" id="cap" value="" onFocus="if(this.value=='Cap') this.value='Cap';" size="10"/> <script type="text/javascript">
    var campo = new LiveValidation('cap', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Numericality, { notANumberMessage: "Puoi inserire solo numeri!" });
    campo.add(Validate.Length, { maximum: 5, tooLongMessage: "Il campo può contenere massimo 5 caratteri" } );
    </script>
    </td>
    </tr>
    <tr>
    <td colspan="4"><br>
    <font color="#FF0000">Riferimenti</font> <br> </td>
    </tr>
    <tr>
    <td width="93"><p class="pform"><strong>Tel. / Cell.:</strong></p></td>
    <td width="120"><input name="telefono" class="inputform" type="text" id="telefono" value="" onFocus="if(this.value=='Telefono') this.value='Telefono';" /> <script type="text/javascript">
    var campo = new LiveValidation('telefono', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Numericality, { notANumberMessage: "Puoi inserire solo numeri!" });
    campo.add(Validate.Length, { maximum: 20, tooLongMessage: "Il campo può contenere massimo 20 caratteri" } );
    </script></td>
    <td width="83"><p class="pform">Fax.:</p></td>
    <td width="120"><input name="fax" class="inputform" type="text" id="fax" value="" onFocus="if(this.value=='Fax') this.value='Fax';" /> <script type="text/javascript">
    var campo = new LiveValidation('fax', { validMessage: "OK!" });
    campo.add(Validate.Presence, { failureMessage: "Il campo deve essere compilato!" });
    campo.add(Validate.Numericality, { notANumberMessage: "Puoi inserire solo numeri!" });
    campo.add(Validate.Length, { maximum: 20, tooLongMessage: "Il campo può contenere massimo 20 caratteri" } );
    </script></td>
    </tr>
    <tr>
    <td colspan="4"><p align="center"><font color="#006699"><strong><em><u>I dati in grassetto sono obbligatori.</u></em></strong></font></p></td>
    </tr>
    <tr>
    <td colspan="4" align="right"><input name="registra" type="image" src="../images/contact-send.gif" value="Registrati" /></td>
    </tr>
    </table></td>
    </tr>
    </table>
    </div>
    </form>