2011-03-03 9 views
5

Tengo un problema con la validación remota de jQuery. Estoy comprobando si el correo electrónico está registrado, la validación remota funciona, pero muestra solo valores: verdadero o falso y no puedo enviar el formulario.jQuery Validación remota

código jQuery:

$("#form").validate({ 
    rules: { 
    email: { 
     required: true, 
     email: true, 
     remote: "check-email.php" 

    } 
    } 
}); 

código de registro de entrada mail.php:

$email = trim(strtolower($_REQUEST['email'])); 


$checkemail = mysql_query("SELECT * FROM users WHERE email = '".$email."'"); 

if(mysql_num_rows($checkemail) == 1) 
{ 
$valid = 'false'; 
} 
else 
{ 
$valid = 'true'; 
} //end of $checkemail if statemant 


echo json_encode($valid); 

Respuesta

12
$checkemail = mysql_query("SELECT * FROM users WHERE email = '".$email."'"); 

Nunca jamás vez hacer esto. Esto es asking for trouble: Inyección SQL, errores aleatorios (la cita simple es válida en las direcciones de correo electrónico, por cierto).

Hay parameterized queries, úselos. Son solo unas pocas líneas más de código, pero es la diferencia entre una falla de seguridad tan amplia como una puerta de granero y una interacción segura con la base de datos.

if(mysql_num_rows($checkemail) == 1) 
{ 
$valid = 'false'; 
} 
else 
{ 
$valid = 'true'; 
} 

es una muy forma prolija de decir

$valid = mysql_num_rows($checkemail) == 1; 

De acuerdo con los documentos , la respuesta de validación a distancia es un no es un cadena JSON codificado en JSON codificados booleano, .

Tienes "true" o "false", que se convertirá en "\"true\"" o "\"false\"" través json_encode(), lo cual es incorrecto. Actual true o false se convertirá en "true" o "false", que es correcto.

Ajuste del tipo de contenido de la respuesta de JSON también podría ser una buena idea:

header('Content-type: application/json'); 
+1

Semántica inútil, pero me echó por un segundo. Creo que quieres: '$ valid = mysql_num_rows ($ checkemail) == 0;' –

+0

@Kijana No estoy seguro de qué son las "semánticas inútiles" aquí. Y no, eso no es lo que quiero decir. – Tomalak

+0

La "semántica inútil" soy yo quien plantea esto. '$ valid = mysql_num_rows ($ checkemail) == 1;' - no será '$ valid' verdadero cuando equivale a 1, ¿qué es lo contrario de lo que dice el código OP? –

1

Podría ser simplemente devolver cadenas cuando se requiere un valor lógico. Tal vez intente lo siguiente:

if(mysql_num_rows($checkemail) == 1) 
{ 
$valid = false; 
} 
else 
{ 
$valid = true; 
} 
1

Para las personas que no son capaces de obtener el validación remota de trabajo utilizando por encima de la técnica, siguientes son mis dos centavos cuales podría ayudarlo a asegurarse de estar en el camino correcto.

1). Funciona con v1.6.1 y superior solamente. Se adhieren a la última versión de jQuery http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js

2). Opte por la ejecución remota 'sincrónica', el valor predeterminado es asincrónico. Establecer asincrónico en falso.

$("#form").validate({ 
    rules: { 
    email: { 
     required: true, 
     email: true, 
     remote: { url:"check-email.php", async:false } 
    } 
    } 
}); 
Cuestiones relacionadas