Validazione form php ajax

Discussione in 'Snippet PHP' iniziata da criric, 12 Giugno 2013.

Tag (etichette):
  1. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    E' solo un inizio
    Ci occorrono quattro pagine:
    registrazione.php
    conterra il form di registrazione e le funzioni javascript per le chiamate ajax
    PHP:
    <?php
    // se premuto il pulsante registrati
    if (isset($_POST['register']) && $_POST['register'] == "Registrati") {
        
    // richiamo la classe
        
    require_once 'users.class.php';
        
    // istanza della classe
        
    $users = new userClass();
        
    // elimino il post del submit
        
    unset($_POST['register']);
        
    // richiamo la registrazione
        
    $registrazione $users->registrazione($_POST);
        
    // stampo il risultato
        
    echo $registrazione;
    }
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <title>Esempio validazione form ajax php</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
            <link rel="stylesheet" type="text/css" href="style.css"/>
            <script type="text/javascript">
                $("document").ready(function() {
                    // disattivo il pulsante del submit
                    $("#submit").attr("disabled",true);
                    // chiamata ajax sugli eventi keyup e blur
                    $(".check").bind("keyup blur",function(){
                        $.ajax({
                            type: "POST",
                            url: "checkform.php",
                            data: $("#form").serialize(),
                            success: function(response){
                                eval(response);
                            }
                        });
                    });
                    // informazioni per l'utente su come compilare il modulo
                    $(".check").focus(function(){                
                        switch($(this).attr("name")) {
                            case "username":
                                var info = "La username deve contenere da 6 a 12 caratteri alfanumerici e non puo' essere gia' assegnata ad un altro utente"; 
                                break;
                            case "password":
                                var info = "La password deve contenere da 8 a 12 caratteri almeno un numero, una lettera maiuscola e una minuscola"; 
                                break;
                            default:
                                var info = "Compila il modulo per la registrazione <br/>I campi contrassegnati dall'asterisco sono obbligatori";
                                break;
                        }
                        $("#info").html(info);
                    });
                }); 
            </script>
        </head>
        <body>
            <fieldset>
                <legend>Modulo di registrazione</legend>
                <form id="form" method="post" action="<?php echo $_SERVER['PHP_SELF'?>">
                    <div id="info">
                        Compila il modulo per la registrazione <br/>I campi contrassegnati dall'asterisco sono obbligatori
                    </div>
                    <p>Username :</p>
                    <p>
                        <input class="check" type="text" name="username"/>
                        <span id="username">! - campo obbligatorio</span>
                    </p>
                    <p>Password :</p>
                    <p>
                        <input class="check" type="password" name="password"/>
                        <span id="password">! - campo obbligatorio</span>
                    </p>
                    <p>Ripeti password :</p>
                    <p>
                        <input class="check" type="password" name="r_password"/>
                        <span id="r_password">! - campo obbligatorio</span>
                    </p>
                    <p>
                        <input class="fright" type="submit" id="submit" name="register" value="Registrati"/>
                    </p>
                </form>
            </fieldset>
        </body>
    </html>
    style.css
    un po di stile
    Codice:
    html body {
        font-family: Verdana;
        font-size: .8em;
    }
    fieldset {
        width: 330px;
        padding:22px;
    }
    p {
        margin:2px;
        padding:3px;
    }
    .fright {
        float: right;
    }
    p span {
        color: #EE0D0D;
        font-family: "Trebuchet MS";
        font-weight: bold;
        margin-left: 12px;
    }
    span.valid {
        color:#5CC10C;
    }
    
    div#info {
       margin-bottom: 12px;
    }
    
    checkform.php
    la pagina richiamata da ajax per i controlli
    PHP:
    <?php

    // richiamo classe users
    require_once 'users.class.php';
    // istanza classe users
    $users = new userClass();
    // inizializzo variabili per abilitazione submit
    $u $p $r false;
    // se passata la stringa username 
    if (isset($_REQUEST['username'])) {
        
    // se non è vuota
        
    if (!empty($_REQUEST['username'])) {
            
    // rimuovo l'eventuale classe assegnata 
            
    echo "$('#username').removeClass('valid');";
            
    // verifica username
            
    $checkUsername $users->checkUsername($_REQUEST['username']);
            if (
    $checkUsername === true) {
                
    // username valida
                
    $u true;
                echo 
    "$('#username').addClass('valid');";
                echo 
    "$('#username').html('V - valida');";
            } else {
                
    // username non valida mostro il messaggio
                
    echo "$('#username').html('$checkUsername');";
            }
        } else {
            
    // la username è vuota avviso
            
    echo "$('#username').html('! - campo obbligatorio');";
        }
    }
    // se passata la stringa password 
    if (isset($_REQUEST['password'])) {
        
    // se non è vuota
        
    if (!empty($_REQUEST['password'])) {
            
    // // rimuovo l'eventuale classe assegnata 
            
    echo "$('#password').removeClass('valid');";
            
    $checkPassword $users->checkPassword($_REQUEST['password']);
            if (
    $checkPassword === true) {
                
    // password valida
                
    $p true;
                echo 
    "$('#password').addClass('valid');";
                echo 
    "$('#password').html('V - valida');";
            } else {
                
    // password non valida mostro il messaggio
                
    echo "$('#password').html('$checkPassword');";
            }
        } else {
            
    // la password è vuota avviso
            
    echo "$('#password').html('! - campo obbligatorio');";
        }
    }

    // se passata la stringa r_password 
    if (isset($_REQUEST['r_password'])) {
        
    // se non è vuota
        
    if (!empty($_REQUEST['r_password'])) {
            
    // rimuovo l'eventuale classe assegnata 
            
    echo "$('#r_password').removeClass('valid');";
            if (
    $_REQUEST['r_password'] == $_REQUEST['password']) {
                
    // r_password valida
                
    $r true;
                echo 
    "$('#r_password').addClass('valid');";
                echo 
    "$('#r_password').html('V - valida');";
            } else {
                
    // r_password non valida mostro il messaggio
                
    echo "$('#r_password').html('non corrispondono');";
            }
        } else {
            
    // la r_password è vuota avviso
            
    echo "$('#r_password').html('! - campo obbligatorio');";
        }
    }

    if (
    $u == true && $r == true && $p == true) {
        
    // abilito il submit
        
    echo "$('#submit').attr('disabled',false);";
    } else {
        
    // disabilito il submit
        
    echo "$('#submit').attr('disabled',true);";
    }
    ?>
    users.class.php
    la classe puo essere implementata con tutti i metodi per la gestione degli utenti
    PHP:
    <?php

    /**
     * Gestione utenti
     * 
     * CriRic 12 giugno 2013
     * Aggiunti metodi per il controllo della username e della password
     * Iniziato il metodo per la registrazione dei dati
     * 
     */
    class userClass {

        var 
    $sql;

        
    /**
         * Istanzia la classe mysqli 
         */
        
    public function __construct() {
            
    // connetto al database cambiare parametri di connessione
            
    $this->sql = new mysqli("localhost""root""""database");
        }

        
    /**
         * Chiude la connessione al database
         */
        
    public function __destruct() {
            
    // disconnetto dal database
            
    $this->sql->close();
        }

        
    /**
         * Se la username rispetta i seguenti parametri
         * - da 6 a 12 caratteri alfanumerici 
         * - non deve essere gia presente nella tabella users
         * il metodo restituirà true, altrimenti una stringa contenente il messaggio di errore
         * @param type $username
         * @return type true or string
         */
        
    public function checkUsername($username) {
            
    // pulizia stringa
            
    $username $this->protect($username);
            
    // verifico lunghezza username
            
    if (strlen($username) < 6) {
                
    // la username è minore di 6 caratteri
                
    return "! - min  6 chr";
            } else if (
    strlen($username) > 12) {
                
    // la username è maggiore di 12 caratteri
                
    return "! - max  12 chr";
            }
            
    // verifico caratteri alfanumerici
            
    if (!ctype_alnum($username)) {
                return 
    "! - chr alfanumerici";
            }
            
    // query di ricerca username
            
    $query "SELECT username FROM users WHERE username = '" $username "'";
            
    // esecuzione query
            
    $result $this->sql->query($query);
            
    // verifico presenza username
            
    if (!$result || $result->num_rows 0) {
                
    // la query non è andata a buon fine o la username è già presente
                
    return "! - non disponibile";
            }
            
    // username valida
            
    return true;
        }

        
    /**
         * Se la password rispetta i seguenti parametri
         * - da 8 a 12 caratteri
         * - almeno una lettera maiuscola
         * - almeno una lettera minuscola
         * - almeno un numero
         * il metodo restituirà true, altrimenti una stringa contenente il messaggio di errore
         * @param type $password
         * @return type true or string
         */
        
    public function checkPassword($password) {
            
    // pulizia stringa
            
    $password $this->protect($password);
            
    // verifico lunghezza username
            
    if (strlen($password) < 8) {
                
    // la password è minore di 8 caratteri
                
    return "! - min  8 chr";
            } else if (
    strlen($password) > 12) {
                
    // la password è maggiore di 12 caratteri
                
    return "! - max  12 chr";
            }
            
    // espressione regolare
            
    if (!preg_match("/^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/"$password)) {
                return 
    "! - chr non validi";
            }
            
    // password valida
            
    return true;
        }

        
    /**
         * NON FINITO
         * Prende come parametro l'intero POST del submit
         * rielabora i dati ricevuti e prepara la registrazione dell'utente
         * se tutto va a buon fine il metodo restituisce true altrimenti una stringa contenente l'errore
         * @param type $post
         * @return type true or string
         */
        
    public function registrazione($post) {
            
    // ciclo del post
            
    foreach ($post as $key => $value) {
                
    // creazione variabile e pulizia stringa
                
    ${$key} = $this->protect($value);
            }
            
    // verifico username
            
    $checkUsername $this->checkUsername($username);
            if (
    $checkUsername !== true) {
                return 
    $checkUsername;
            }
            
    // verifico password
            
    $checkPassword $this->checkPassword($password);
            if (
    $checkPassword !== true) {
                return 
    $checkPassword;
            }
            
    // query di inserimento nuovo utente
            
    $query "INSERT INTO users SET username = '$username', password = '" md5($password) . "'";
            
    // restituzione elaborazione
            
    return $query " <br/>Tutto OK <br/>Per ora mi fermo qui";
        }

        
    /**
         * Accetta una stringa elimina i tag HTML e restituisc l'escape
         * @param type $string
         * @return type $string
         */
        
    private function protect($string) {
            
    // pulizia tag html
            
    $string strip_tags($string);
            
    // restituzione escape stringa
            
    return $this->sql->real_escape_string($string);
        }

    }

    ?>
    un esempio online per vedere come funziona ( username gia presenti : criric , borgoitalia)
    come sempre sono ben accettati consigli per migliorare il codice
    ps
    appena riesco a capire come caricare uno zip magari vi allego i file
     
    Ultima modifica di un moderatore: 8 Settembre 2013
  2. paperinik4

    paperinik4 Utente Attivo

    Registrato:
    29 Maggio 2011
    Messaggi:
    1.812
    Mi Piace Ricevuti:
    0
    Punteggio:
    36
    Occupazione:
    Pensionato
    Località:
    Roma
    Home Page:
    problema rifatto in locale e non va

    Ciao cricric,

    Ho provato il tuo codice ma c'è qualcosa che sul mio in locale non funziona non capisco bene cosa. In pratica non mi visualizza l'ok a posto del campo obbligatorio. E' possibile avere un file zippato di questo esempio ??? Lo so che è molto vecchio. Però è sempre utile. Grazie.
     
  3. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.607
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    TN
    I file sono quei 4 che ho postato, basta che li copi e li incolli con il nome che gli ho assegnato
    Devi invece stare più attento nel file users.class.php:
    devi cambiare i parametri di connessione con i tuoi e sistemare i nome delle tabelle e dei campi nelle query.
     
  4. paperinik4

    paperinik4 Utente Attivo

    Registrato:
    29 Maggio 2011
    Messaggi:
    1.812
    Mi Piace Ricevuti:
    0
    Punteggio:
    36
    Occupazione:
    Pensionato
    Località:
    Roma
    Home Page:
    Che scemo ecco dove li avevo visti. Che poi non li ho più ritrovati. Allora sicuramente sarà quello. Ma una cosa si possono aumentare ovviamente i campi oltre a quelli che hai messo te ????
     
  5. paperinik4

    paperinik4 Utente Attivo

    Registrato:
    29 Maggio 2011
    Messaggi:
    1.812
    Mi Piace Ricevuti:
    0
    Punteggio:
    36
    Occupazione:
    Pensionato
    Località:
    Roma
    Home Page:
    Allora ho provato a cambiare i valori della connessio ma sembra che non gli piacciano, Volevo un'info. Io adopero un file chiamato connettimysqli.php che contiene tutti i dati necessari per la connessione al db. Nel file connettimysqli qdopero la variabile $con. Questa variabile va sostituita con $this ??? Io ho sostituito queste due righe qua:

    PHP:

    class userClass {

        var 
    $sql;

        public function 
    __construct() {
            
    // connetto al database cambiare parametri di connessione
           // $this->sql = new mysqli("localhost", "root", "", "database");
            
    require_once ('connettymysqli');
        }

        public function 
    __destruct() {
            
    // disconnetto dal database
            
    $this->sql->close();
        }


    Ho provato a sostituire la variabile $con con $this nel file connetimysqli ma sembra ch enon gli piaccia.
     
Sto caricando...

Condividi questa Pagina