2012-03-18 38 views
8

Quindi, in sostanza, voglio aggiungere una funzionalità al mio modulo di registrazione che controllerà se quel nome utente esiste già nel database.Controlla se il nome utente esiste nel database con AJAX

ho alcune domande su AJAX -

1) Voglio creare una richiesta AJAX on_change funzione, in modo qualcosa di simile -

$('#username').change(function() { 
    $.ajax({ 
    url: "validation.php" 
    }); 
}); 

Quindi, per quanto ho capito, devo hai tutte le convalide fatte in PHP all'interno del file validation.php, corretto? C'è qualche convalida speciale necessaria o può essere solo una semplice convalida con una dichiarazione di sql - SELECT * FROM 'users' WHERE 'username' = '. $_POST['username'];

2) Quindi come ho capito devo passare i valori POST anche tramite $ .ajax, corretto? Se sì, come potrò accedervi tramite il file validation.php?

3) Dopo aver ottenuto i risultati nel file validation.php, come posso passarli indietro (vero o falso - esiste o non esiste)? Dovrò passarli indietro, e poi fare un controllo if, se è vero - mostrare un errore che il nome utente esiste già, altrimenti non mostrare nulla?

Spero, hai capito cosa sto per creare. So che ci sono molti tutorial su Internet, ma non mi piace creare qualcosa tramite tutorial, poiché se lo creo da solo, sarà più facile capire la prossima volta;)!

EDIT: Inoltre, sto creando il mio sito Web con framework CodeIgniter, quindi come passare l'attributo url in ajax a un modulo CodeIgniter?

+0

avete letto l'uso completo del metodo $ .ajax –

+0

Sì, l'ho letto, ma in qualche modo non ho capito le poche parti, che sono sopra descritte. –

+0

puoi passare informazioni usando la proprietà data di $ .ajax e resd che informazioni come normat post o leggi in php page print true false.questa informazione può essere riletta usind fatto metodo callback di $ .ajax –

risposta

10

Prima di continuare, SELECT * FROM 'users' WHERE 'username' = '. $_POST['username']; è solo chiedendo una SQL Injection. Ti suggerisco di utilizzare oggetti dati PHP - http://php.net/manual/en/book.pdo.php.

Quindi, come ho capito, devo passare anche i valori POST tramite $ .ajax, corretto? Se sì, come potrò accedervi tramite il file validation.php?

Poiché si tratta di una semplice richiesta, suggerisco di utilizzare il metodo di JQuery $.post(). Ecco un esempio basato su ciò che stai cercando di fare.

$.post('validation.php',{username: $('#username').val()}, function(data){ 
    if(data.exists){ 
     //tell user that the username already exists 
    }else{ 
     //username doesn't exist, do what you need to do 
    } 
}, 'JSON'); 

metodo post di jQuery prende 4 parametri $.post(url, data, callback, datatype). Nell'esempio sopra, pubblicheremo il nome utente con $('#username').val() a validation.php e ci aspettiamo una risposta JSON. Al termine della richiesta, la funzione di richiamata verrà eseguita con data come risposta dalla richiesta. Poiché abbiamo specificato che tale risposta sarà JSON, possiamo accedervi come un oggetto nativo in javascript. Passiamo ora a validation.php

Come ho detto sopra, ho suggerito di utilizzare PDO per il driver del database. Quindi in questo esempio, ti mostrerò un uso di base di esso.

//set the headers to be a json string 
header('content-type: text/json'); 

//no need to continue if there is no value in the POST username 
if(!isset($_POST['username'])) 
    exit; 

//initialize our PDO class. You will need to replace your database credentials respectively 
$db = new PDO('mysql:host=DATABASE_HOST;dbname=DATABASE_NAME','DATABASE_USERNAME','DATABASE_PASSWORD',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

//prepare our query. 
$query = $db->prepare('SELECT * FROM users WHERE username = :name'); 
//let PDO bind the username into the query, and prevent any SQL injection attempts. 
$query->bindParam(':name', $_POST['username']); 
//execute the query 
$query->execute(); 

//return the json object containing the result of if the username exists or not. The $.post in our jquery will access it. 
echo json_encode(array('exists' => $query->rowCount() > 0)); 

Ora per ricapitolare, il nostro script jQuery invierà al validation.php dove si seleziona un nome utente dal database. Restituirà un oggetto JSON che ha una chiave di exists che è un valore booleano che indica se il nome utente esiste già come una riga nel database. Quando la richiesta è completa tramite jQuery, puoi fare ciò che ti serve basandosi sul risultato della query. Spero che questa sia una spiegazione esauriente e ti porti a ciò che speri di ottenere.

-2
  1. if (mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='".$_POST['username']."'")) < 1) { 
        true; 
    } else { 
        false; 
    } 
    
  2. si può passare da GET o POST metodi. in validation.php devi solo scrivere $somevar=$_POST['somevar'];

  3. come ho appena detto non puoi passare variabili per posta o ottenere metodi - per fare questa attività, è necessario noi ottenere.

Spero di essere stato utile;)

+0

Ciao, va bene! Provare a fare qualcosa. A proposito, hai qualche conoscenza con CodeIgniter, come potrei passare una richiesta di jax al modulo? –

+1

USARE MYSQL_REAL_ESCAPE_STRING O USARE DICHIARAZIONI PREPARATE PER PREVENIRE L'INIEZIONE DI SQL – fabspro

0

Ecco quello che ho fatto su uno dei miei siti: su validation.php io conto del numero di Stati con il nome utente allora ecco lo script jquery:

var username = $('#username').val(); 
$('#username').change(function() { 
    $.ajax({ 
     url: "validation.php", 
     type: 'POST', 
     data: 'username=' + username, 
     success: function(result){ 
       if(result > 0){ 
        // do something if username already exist 
       } 
       else{ 
        // do something if username doesn't exist 
       } 
       } 
     }); 
}); 
+0

La callback di successo è ammortizzata per uso futuro –

+0

OK! Grazie, quindi proverò a fare qualcosa;)! Forse hai conoscenza con CodeIgniter, e sai, come faccio a passare l'URL a un modulo? –

+0

@ Amritpal Singh: non lo sapevo, mi dispiace. Cosa dovrei usare al posto di questo? – romainberger

4

Con i tutorial di lettura su Internet, puoi imparare molte cose. Vi consiglio di seguire le istruzioni alla pagina seguente: http://blog.webwizo.com/2011/05/04/simple-login-with-php-and-jquery-ajax/

Si invia lo username via posta al file php specificato, che cerca il nome utente che ci hai fornito.

Si prega di utilizzare la funzione mysql_real_escape_string sulla stringa di input, in modo che gli hacker non siano in grado di utilizzare un attacco SQL injection sul proprio sito Web. Funziona così:

$query = "SELECT * FROM users WHERE username = '".mysql_real_escape_string($_POST['username'])."'"; 
if (mysql_num_rows(mysql_query($query)) > 1) 
{ 
    print "inuse"; 
} 

Quindi è possibile controllare il valore di risposta nella funzione jQuery di ajax. Se il sito web restituisce il valore "inutilizzato", mostra un messaggio di errore che il nome utente è già in uso. In caso contrario, il nome utente è disponibile.

Ma, come ho detto, si prega di controllare il tutorial e la cosa più importante: Usa mysql_real_escape_string per prevenire attacchi di SQL injection

Problemi correlati