problemi di validazione asincronizzazione dati

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

E' da poco che sto cercando di capire come funzionano le chiamate ajax ma con ben pochi risultati:E spongo subito il mio problema. Dovrei fare un modulo di registrazione che fa la verifica dei dati in contemporanea mentre inserisci username, email e password. Ora io ho questo esempio di inizio preso da internet nelle mie varie ricerche. però da qui non so andare avanti. I file dovrebbero essere tre principalmente:

1) Modulo html d'iscrizione;

2) connetti.php (che si riferisce alla chiamata del db)

3) Modulo chiamata ajax (checkdati.php)

Iniziamo a postare l'esempio che ho sopratuttto capire se è giusto o meno:


Questo che posto è il modulo di iscrizione.php

PHP:
<html>
<head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
 
</head>
    <script type="text/javascript">
        function validateForm(){
                        //RECUPERO DEI PARAMETRI
            $('#loader').show();
            $('#invia').attr('disabled',true);
           
        var nome=$('#nome').val();
            var cognome=$('#cognome').val();
            var email=$('#email').val();
            var username=$('#username').val();
                        
        //ESECUZIONE DELLA CHIAMATA AJAX
            $.ajax(
                {
                    type: 'POST',
                    url: 'checkdati.php',
                    data: {nome_p:nome, cognome_p:cognome, email_p:email,username_p:username},
                    success: function(data){
                                        //SE CI SONO ERRORI MOSTRO L'ERRORE ALTRIMENTI UN MESSAGGIO DI CONFERMA
                        if(data.error==1){
                            alert(data.message);
                        }else{
                            alert("Registrazione ok");
                        }
                        $('#loader').hide();
                        $('#invia').attr('disabled',false);
                    },
                    complete: function(data){},
                    failure: function(data){
                        alert("Errore nella chiamata ajax");
                        $('#loader').hide();
                        $('#invia').attr('disabled',false);
                    }
            });
        }
 
    </script>
</head>
<body>
    <div align ="center">
    <h2>Esempio form di registrazione</h2>
    </div>
    <form action="" method="post">
        
        <div class="row">
            <p><p>
            <label>Nome: <input name="nome" id="nome" type="text"/> </label>
        </div> </p></p>
        <div class="row">
            <p><p>
            <label>Cognome: <input type="text" name="cognome" id="cognome"/></label>
        </div> </p></p>
        <div class="row">
            <p><p>
            <label>Email: <input type="text" name="email" id="email"/></label>
        </div> </p></p>
        <div class="row">
            <p><p>
            <label>Username: <input type="text" name="username" id="username"/></label>
        </div> </p></p>
        <div class="row">
            <label></label>
            <input type="button" onclick="validateForm(); return false;" value="Invia"  name="invia" id="invia"/>
            <img src="130.png" id="loader" style="display:none" />
        </div>
    </form>
</head>  
<body>  
    
       
        <?php
        require_once("connetti.php");

        ?>
    </body>
</html>

Ora il mio problema è il segu7ente nel file chiamato checkdati.php, cosa ci debbo inserire ???? Considerando che poi deve andare tutto in un db. Attualmente il db contiene solo nome & cognome per semplificare l'esempio, ma ovviamente lo posso ampliare aggiungtendo username, password ri-password, email. ri-emeail.

Spero in iun vostro aiuto e chiarimenti. Mi sono impantanato da secoli su qeusto argomento :(

P.S.: Se ho sbagliato sessione, cercavo la sessione ajax ma non l'ho trovata. Perdoatemi
 
Leggendo il codice Javascript che esegue la validazione direi che il file PHP, in caso di errore, deve restituire una risposta JSON simile a questa:
Codice:
{
    "error": 1,
    "message": "Messaggio di errore..."
}
Mentre in caso non ci siano errori:
Codice:
{
    "error": 0
}
Per generare il JSON puoi usare la funzione PHP json_encode.
 
Problemi su problemi con ajax non capisco dove sta l'errore

Salve a tutti,

Ritorno alla carica. Vorrei capire dove sbaglio nell'effetuare gli esempi trovati su internet per fare una chiamata ajax e avere la sincronizzazione (validazione) dei dati in diretta. Rporto di seguito due esempi: il primo l'ho preso via internet il secondo mi è è stato passato. credo che manchi in entrambi i listati qualcosa. moi potreste dare una mano per favore ??? il primo listato lo so l'ho postato qualche giorno fa ma non ho capito se esatto o meno e vorrei una conefrma. Comunque lo riposto anche per gli altri:

iscrizione.php

PHP:
<html>
<head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
 
</head>
    <script type="text/javascript">
        function validateForm(){
                        //RECUPERO DEI PARAMETRI
            $('#loader').show();
            $('#invia').attr('disabled',true);
           
        var nome=$('#nome').val();
            var cognome=$('#cognome').val();
            var email=$('#email').val();
            var username=$('#username').val();
                        
        //ESECUZIONE DELLA CHIAMATA AJAX
            $.ajax(
                {
                    type: 'POST',
                    url: 'checkdati.php',
                    data: {nome_p:nome, cognome_p:cognome, email_p:email,username_p:username},
                    success: function(data){
                                        //SE CI SONO ERRORI MOSTRO L'ERRORE ALTRIMENTI UN MESSAGGIO DI CONFERMA
                        if(data.error==1){
                            alert(data.message);
                        }else{
                            alert("Registrazione ok");
                        }
                        $('#loader').hide();
                        $('#invia').attr('disabled',false);
                    },
                    complete: function(data){},
                    failure: function(data){
                        alert("Errore nella chiamata ajax");
                        $('#loader').hide();
                        $('#invia').attr('disabled',false);
                    }
            });
        }
 
    </script>
</head>
<body>
    <div align ="center">
    <h2>Esempio form di registrazione</h2>
    </div>
    <form action="" method="post">
        
        <div class="row">
            <p><p>
            <label>Nome: <input name="nome" id="nome" type="text"/> </label>
        </div> </p></p>
        <div class="row">
            <p><p>
            <label>Cognome: <input type="text" name="cognome" id="cognome"/></label>
        </div> </p></p>
        <div class="row">
            <p><p>
            <label>Email: <input type="text" name="email" id="email"/></label>
        </div> </p></p>
        <div class="row">
            <p><p>
            <label>Username: <input type="text" name="username" id="username"/></label>
        </div> </p></p>
        <div class="row">
            <label></label>
            <input type="button" onclick="validateForm(); return false;" value="Invia"  name="iInvia" id="invia"/>
            <img src="130.png" id="loader" style="display:none" />
        </div>
    </form>
</head>  
<body>  
    
       
        <?php
        require_once("connetti.php");

        ?>
    </body>
</html>

checkdati.php

PHP:
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>CheckDati</title>
    </head>
    <body>

        <?php
                require_once("connetti.php");

if(isset($_POST['username']) ){

#se esistono variabili posto con sto nome allora faccio come segue: $query_controllo = "SELECT username FROM utenti WHERE username = '$username'";

$controllo_esistenza = mysql_num_rows(mysql_query($query_controllo));

#se controllo_esistenza darà come valore un numero maggiore di zero #vorrà dire che sono presenti alcuni record nel database, con lo stesso valore che hai scritto nel campo input

if($controllo_esistenza > 0)
    { 
    echo "Mi dispiace questo utente già esiste"; 
    
    } else{ echo "Questo username che hai scelto è perfetto!"; 
    
    }

} 

?>
    </body>
</html>

Il checkdati.php dovrebbe servire per la verifica dei campi immessi. Spero che qualcuno mi aiuto e mi spieghi più nel dettaglio. Ho visto anche dei libri su ajax e jquery ma sono spiegati malissimo e saltano dei passaggi. Grazie a tutti.
 
Come ho già detto, non puoi inviare i dati nel formato che ti pare, perché Javascript, nel fare il parsing della risposta restituita dal tuo script, richiede che siano in JSON e con una struttura ben precisa.

Il codice per il controllo è corretto, ma devi togliere tutto l'HTML e usare la funzione json_encode per restituire una risposta JSON. Inoltre, devi inviare l'header Content-Type (che dev'essere application/json). Guarda qui se non ti è chiaro: http://stackoverflow.com/a/7294846/705588.
 

Discussioni simili