2012-03-18 11 views
8

Así que, básicamente, quiero agregar una función a mi formulario de registro, que verificará si ese nombre de usuario ya existe en la base de datos.Comprueba si existe un nombre de usuario en la base de datos con AJAX

tengo algunas preguntas acerca de AJAX -

1) Quiero crear una petición AJAX on_change función, así que algo como esto -

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

Así, en lo que he entendido, debo tener todas las validaciones hechas en PHP dentro del archivo validation.php, ¿correcto? ¿Hay alguna validación especial necesaria o puede ser simplemente una validación simple con una instrucción sql? SELECT * FROM 'users' WHERE 'username' = '. $_POST['username'];

2) Entonces, como entendí, también debo pasar los valores POST a través de $ .ajax, ¿correcto? En caso afirmativo, ¿cómo podré acceder a ellos a través del archivo validation.php?

3) Después de obtener los resultados en el archivo validation.php, ¿cómo puedo devolverlos (verdadero o falso - existe o no existe)? Tendré que reenviarlos, y luego hacer una verificación if, si es verdad - mostrar un error que el nombre de usuario ya existe; de ​​lo contrario, ¿no mostrar nada?

Espero que hayas entendido lo que estoy por crear. Sé que hay muchos tutoriales en Internet, pero no me gusta crear algo a través de tutoriales, ya que si lo hago yo mismo, será más fácil de entender la próxima vez;)!

EDITAR: Además, estoy creando mi sitio web con el framework CodeIgniter, entonces ¿cómo pasaría el atributo url en ajax, a un módulo CodeIgniter?

+0

has leído el uso completo del método $ .ajax –

+0

Sí, lo he leído, pero de alguna manera no entendí las pocas partes que se describen arriba. –

+0

puede pasar información usando la propiedad de datos de $ .ajax y resd esa información como una publicación normativa o leer en la página php imprimir verdadero falso.esta información se puede leer use el método de devolución de llamada de $ .ajax –

Respuesta

10

Antes de continuar, SELECT * FROM 'users' WHERE 'username' = '. $_POST['username']; está pidiendo para una inyección de SQL. Le sugiero que use objetos de datos PHP - http://php.net/manual/en/book.pdo.php.

Entonces, como entendí, también debo pasar los valores POST a través de $ .ajax, ¿correcto? En caso afirmativo, ¿cómo podré acceder a ellos a través del archivo validation.php?

Como esta es una solicitud simple, le sugiero que utilice el método de JQuery $.post(). Aquí hay una muestra basada en lo que estás tratando de hacer.

$.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'); 

método post de jQuery toma 4 parámetros $.post(url, data, callback, datatype). En el ejemplo anterior, publicaremos el nombre de usuario con $('#username').val() en validation.php y esperamos una respuesta de JSON. Cuando la solicitud finalice, la función de devolución de llamada se ejecutará con data como respuesta a la solicitud. Como especificamos que esa respuesta será JSON, podemos acceder a ella como un objeto nativo en JavaScript. Ahora pasemos a validation.php

Como dije anteriormente, sugerí que use PDO para su controlador de base de datos. Entonces en este ejemplo, te mostraré un uso básico de eso.

//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)); 

Ahora, para resumir, nuestro script jQuery publicará a validation.php donde se selecciona un nombre de usuario de la base de datos. Devolverá un objeto JSON que tiene una clave de exists que es un booleano que indica si el nombre de usuario ya existe como una fila en su base de datos. Cuando la solicitud se completa a través de jQuery, puede hacer lo que necesita basándose en el resultado de la consulta. Espero que esta sea una explicación completa y te lleve a lo que estás esperando lograr.

-2
  1. if (mysql_num_rows(mysql_query("SELECT * FROM users WHERE username='".$_POST['username']."'")) < 1) { 
        true; 
    } else { 
        false; 
    } 
    
  2. se puede pasar por GET o POST métodos. en validation.php sólo hay que escribir $somevar=$_POST['somevar'];

  3. como acabo de decir que no puedes pasar variables por correo o obtener métodos - para realizar esta tarea, se deben Consíguenos.

Espero haber sido útil;)

+0

¡Hola, está bien! Voy a intentar hacer algo. Por cierto, ¿tiene algún conocimiento con CodeIgniter, cómo pasaría la solicitud ajax allí al módulo? –

+1

UTILIZAR MYSQL_REAL_ESCAPE_STRING O UTILIZAR DECLARACIONES PREPARADAS PARA IMPEDIR LA INYECCIÓN DE SQL – fabspro

0

Esto es lo que hice en uno de mi sitio web: validation.php en cuento el número de miembros con el nombre de usuario, entonces aquí es el script de 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

devolución de llamada correcta se deprecia para uso futuro –

+0

¡Bien! Gracias, entonces intentaré hacer algo;)! Quizás tengas conocimiento con CodeIgniter, y ya sabes, ¿cómo pasaría la URL a un módulo? –

+0

@ Amritpal Singh: No lo sé, lo siento. ¿Qué debería usar en lugar de esto? – romainberger

4

Con tutoriales de lectura en Internet, puede aprender muchas cosas. Te recomiendo que sigas las instrucciones en la siguiente página: http://blog.webwizo.com/2011/05/04/simple-login-with-php-and-jquery-ajax/

Envía el nombre de usuario por correo al archivo php especificado, que busca el nombre de usuario que has proporcionado.

Por favor, use la función mysql_real_escape_string en la cadena de entrada, para que los hackers no puedan usar un ataque de inyección sql en su sitio web. Funciona así:

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

Luego puede verificar el valor de respuesta en su función javascript ajax. Si el sitio web devuelve el valor "inuse", muestra un mensaje de error que indica que el nombre de usuario ya está en uso. Si no, el nombre de usuario está disponible.

Pero como he dicho, por favor, compruebe el tutorial y lo más importante: uso mysql_real_escape_string para prevenir ataques de inyección SQL

Cuestiones relacionadas