Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Error al devolver una respuesta de mysql

Estas en el tema de Error al devolver una respuesta de mysql en el foro de Frameworks JS en Foros del Web. Un saludo a todos: Estoy haciendo una aplicación AJAX muy sencilla, aunque creo que el fallo está en php, por eso posteo aquí. La aplicación ...
  #1 (permalink)  
Antiguo 05/09/2010, 17:36
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 4 meses
Puntos: 4
Error al devolver una respuesta de mysql

Un saludo a todos:

Estoy haciendo una aplicación AJAX muy sencilla, aunque creo que el fallo está en php, por eso posteo aquí. La aplicación consiste en comprobar si un mail o nick están ya almacenados en la base de datos. Estos datos están almacenados en una tabla "usuarios". Para que salte la aplicación, he puesto unos botones al lado de cada cuadro input, que llaman a la función encargada de conectar con el server. A esta función se le pasan dos argumentos: el tipo de consulta (nick o email) y el valor a comprobar. Estos dos datos deben ser pasados con cuidado, ya que la aplicación ajax los pasa como parámetro GET, y uno de ellos, el tipo de consulta es el nombre del campo a buscar. Los nombres de los campos son "mail" para el email y "nik" para el nick. El problema es que el correo siempre lo valida, aunque exista en la base de datos. El nick, sin embargo, lo comprueba correctamente, si no está, da aviso de que existe. Lo extraño es que es la misma función, el valor a comprobar es pasado a la función, ya sea un nick o un correo. Aquí el código php:

Código PHP:
include '../conexion/conexion.inc';
if(
$conexion)
{
 
$conectarBD mysql_select_db($bd$conexion);
 if(
$conectarBD)
 {
  
$ssql='select '.$_GET['dato'].' from usuarios;';//$_GET['dato'] puede ser 'nik' o 'mail'
  
$query=mysql_query($ssql,$conexion);
  if(
$query)
  {
   
$result=mysql_fetch_row($query);
   
$cont=false;
   for(
$i==0;$i count($result);$i++)
   {
    if(
$result[0]==$_GET['consulta'])//$_GET['consulta'] es el valor del campo mail o del campo correo
    
{
     
$cont=true;
    }
   }
   if(
$cont==false)
   {
    echo 
'disponible='.$_GET['dato'];
   }
   elseif(
$cont==true)
   {
    echo 
'usado='.$_GET['dato'];
   }
  }
 }

He pensado que podría ser un problema de caché, aunque luego lo he descartado, uno, porque paso como parámetro GET un número aleatorio de 8 dígitos, por recomendación de un libro, y dos, porque he limpiado la caché y lo he vuelto a probar.

Antes, funcionaba correctamente, el problema ha comenzado cuando he cambiado la llamada de la función, de un onBlur en el cuadro a un onClick del botón. No obstante, está correctamente llamada. Además, he probado a acceder al fichero desde el explorador, y, efectivamente, me da el fallo en el php.

¿Por qué no me reconoce que hay un correo existente en la BD, y en cambio, sí lo hace con el nick?

Muchas gracias.
  #2 (permalink)  
Antiguo 05/09/2010, 18:19
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Error al devolver una respuesta de mysql

Cita:
$ssql='select '.$_GET['dato'].' from usuarios;';
Podes usar if (mysql_num_rows != 0) para comprobar si hay o no un registro existente.
  #3 (permalink)  
Antiguo 05/09/2010, 20:11
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: Error al devolver una respuesta de mysql

Hola, mayid, gracias por responder:

La verdad es que yo mismo me he encargado de insertar los mails en la bd, de hecho, he probado los dos mails que he insertado, [email protected] y [email protected]. Antes sí me los validaba bien, pero de pronto, ha dejado de andar. Pego la llamada desde la función, por si hay algún fallo en ella, y la misma función ajax:

Llamada (entre comentarios lo que tenía puesto antes):
Código HTML:
Ver original
  1. <label>Correo Electronico</label><br><input type="text" name="mail" id="mail"> <!-- onBlur="preguntar(this.value,'mail');"-->
  2. <input type="button" id="email" value="Comprobar Email" onClick="preguntar(document.getElementById('mail').value,'mail');">

las funcines AJAX:
Código Javascript:
Ver original
  1. function preguntar(consulta_dato,dato)
  2. {
  3.  //se construye la URL a la que se va a hacer la consulta, pasándole como parámetro GET
  4.  //el parámetro recibido en la llamada a la función, además de un número aleatorio
  5.  //como medida de seguridad, para que el navegador no recurra a la caché, y la función no actue correctamente
  6.  var uurl = "inc/consulta.php?consulta="+consulta_dato+"&dato="+dato+"&important="+parseInt(Math.random()*99999999);
  7.  //Se abre una conexión con el servidor
  8.  consulta.open("GET", uurl, true);
  9.  //se prepara una función respuesta para ejecutar cuando llegue la respuesta
  10.  consulta.onreadystatechange = respuesta;
  11.  //se envía la petición
  12.  consulta.send(null);
  13. }
  14.  
  15. function respuesta()
  16. {
  17.  //redystate 4 significa que la consulta ha sido completada, por tanto, es la respuesta que interesa.
  18.  if(request.readyState == 4)
  19.  {
  20.   //El código de respuesta 200 del servidor significa OK(éxito en la respuesta), por tanto, es el que interesa
  21.   if(request.status==200)
  22.   {
  23.    if(request.responseText=='usado=mail')
  24.    {
  25.     alert(request.responseText);//Este alert está para comprobar la recepción, por si estaba equivocada
  26.     alert('Esa dirección de correo ya está en uso');
  27.    }
  28.    else if(request.responseText=='usado=nik')
  29.    {
  30.     alert('Ese nick ya está en uso');
  31.    }
  32.    else
  33.    {
  34.     if(request.responseText=='disponible=mail')
  35.     {
  36.      alert('Ese mail está DISPONIBLE');
  37.     }
  38.     else if(request.responseText=='disponible=nik')
  39.     {
  40.      alert('Ese nick está DISPONIBLE');
  41.     }
  42.    }
  43.   }
  44.  }
  45. }

Está todo comentado porque es lo primero que hago en ajax, y necesito aclararme qué es cada cosa.

Gracias por las respuestas
  #4 (permalink)  
Antiguo 05/09/2010, 22:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Tema movido desde PHP a AJAX

Etiquetas: ajax, devolver, mysql, respuesta
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:56.