sábado, 19 de septiembre de 2009

COMPROBAR USUARIO CON AJAX

Muchas veces cuando tenemos una pagina para el registro de Usuarios en nuestra Web, dada la casualidad de que un Usuario, elija el mismo Username de otro, es demasidado fastidioso (Para el cliente) estar escribiendo sus datos..., enviandolos... y esperando "a ver si logra" registrase satisfactoriamente, puesto que despues de todo este proceso de envio de datos al Servidor, el usuario recien sabrá si el Username que eligio estaba disponible;

Para ahorrarnos todo este "menjunje" (Mezcla de aspecto desagradable), les traigo una de muchas soluciones a este problema, en este caso será utilizando AJAX+PHP+MYSQL, la cual quedara masomenos asi:

Utilizaremos el Script Para Recargar Una Pagina con Ajax (Del Post Anterior), para este caso le hemos agregado la funcion "ComprobarUsuario", la cual recibe los mismos parametros (datos,contenedor), pero a diferencia, recoge el Username de la caja de texto para poder comprobar su disponibilidad. Los parametros: datos = URL de la pagina que queremos llamar,en este caso sera "./comprobarUser.php" y Contenedor = Objeto donde queremos que se muestre el estado del Usuario., la funcion ComprobarUsuario quedara asi:


archivo: ajax.js

  function ComprobarUsuario(datos,contenedor){
divResultado = document.getElementById(contenedor);

username_=document.formUsuario.txt_username.value;

ajax=getXMLHttpRequest();
ajax.open("POST", datos);
ajax.onreadystatechange=function(){
if(ajax.readyState==1)
{divResultado.innerHTML='Cargando...'}
else{
if(ajax.readyState==4)
{divResultado.innerHTML=ajax.responseText;}
}
}
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

ajax.send("username="+username_);//enviando los parametros a la pagina "datos";
}

Y la funcion para crear el objeto XMLHttpRequest en el mismo archivo:


archivo: ajax.js

  function getXMLHttpRequest(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

Por Parte del Servidor tenemos el archivo "comprobarUsuario.php" el que se encargara de ir a la base de Datos y comprobar si el username enviado esta disponible o no, este archivo recibe el parametro POST "username", con el (Valga la redundancia) Username en cuestion... y lo que hace es Imprimir en pantalla "Username Disponible" o "Username Ocupado" segun sea el caso; El "comprobarUsuario.php" es el siguiente:

archivo: comprobarUsuario.php

 
$hostname_conn = "localhost";
$database_conn = "user";
$username_conn = "root";
$password_conn = "root";
$conn = mysql_pconnect($hostname_conn, $username_conn, $password_conn) or trigger_error(mysql_error(),E_USER_ERROR);

$colname_rs_user = "-1";
if (isset($_POST['username'])) {
$colname_rs_user = $_POST['username'];
}
mysql_select_db($database_conn, $conn);
$query_rs_user = sprintf("SELECT * FROM usuario WHERE username = '%s'",$colname_rs_user);
$rs_user = mysql_query($query_rs_user, $conn) or die(mysql_error());
$row_rs_user = mysql_fetch_assoc($rs_user);
$totalRows_rs_user = mysql_num_rows($rs_user);
if($totalRows_rs_user == 0)
{
echo '
Username Disponible';
}
else{
echo '
Username Ocupado';
}
mysql_free_result($rs_user);


Debemos poner un DIV cerca del formulario donde mostrar el mensaje de estado del Username Ocupado o Disponible


archivo: index.php







El proceso iniciara en el index.php desde el formulario:


archivo: index.php






REGISTRO DE USUARIO




Username:
Nombre:
Password:









Al pinchar en el boton "Disponible?"







estamos llamando a la funcion "comprobarUsuario(datos,contenedor)", la cual recoge el username a comprobar desde el campo de texto que le indiquemos en el codigo:



username_=document.formUsuario.txt_username.value;


Se envian los parametros :



ajax.send("username="+username_);//enviando los parametros 


y finalmente Mostramos el Resultado cuando el Servidor halla dado una respuesta:



 if(ajax.readyState==1)
{divResultado.innerHTML='Cargando...' //Mostramos "Cargando..." mientras no hay respuesta del Servidor
}
else{
if(ajax.readyState==4)
{divResultado.innerHTML=ajax.responseText; //Se muestran los resultados en el divResultado
}
}
}


finalmente al comprobar usuario nos mostrara Username Disponible o Username Ocupado:



VER EJEMPLO FUNCIONANDO:


Ver Ejemplo


DESACARGAR EJEMPLO:


Ejemplo-Comprobacion-Usuario

10 comentarios:

  1. Hey samuel..gracias por el aporte en ajax..una vez mas me has salvado ...:D!..sigue posteando-Elizabeth

    ResponderEliminar
  2. GRANDE ME SALVASTE LA VIDA !!!


    ME SIRVIO DEMASIADO EL CODIGO , CLARO QUE LE HIZE ALGUNAS MODIFICACIONES Y LE SAQUE EL BOTON

    SALUDOS DESDE CHILE

    ResponderEliminar
  3. ESta muy bien explicado.... la verdad no consegui hacerlo correr y no se por que.

    Con el firebug me detecta un par de errores en el archivo .js en la linea donde se indica que se cree el objeto active active x.

    Concretamente me da error en la siguientes lineas:

    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

    Y No consigo que ejecute el codigo PHP del archivo comprobarUsuario. Puse un echo en la primera linea del arcvhivo para ver si saltaba pero no lo hace.

    la verdad no se que puede fallar.

    Gracias por tu ayuda.

    ResponderEliminar
  4. Me funciona bien, lo comprobe con el firebug y se que funciona bien, pero me ocurre algo que no logro entender..... cuando aparece el mensaje en el DIV.

    Automaticamente se borra el texto del cuadro de texto del Nombre de usuario y desaperece el mensaje de Disponible.....

    es como si se recargara la pagina..... no se por que me ocurre esto.

    Un saludo. A ver si alguien me puede ayuda....

    Muchas Gracias.

    ResponderEliminar
  5. He hecho algunas correcciones, el ejemplo que estaba en el ZIP no era el mismo del que estaba en el ejemplo.. :S, ahora si es el mismo, y tambien le puse el Script de la DB, que no estaba antes...

    Para solucionar el problema de la llamada Ajax pueden utilizar JQuery.. mas adelante pondre algunos post utilizando JQuery...

    ResponderEliminar
  6. Gracias tioo, te pasastesss , eres lo máximo

    ResponderEliminar
  7. Gracias por el codigoooo!!!

    ResponderEliminar
  8. Podrias subir nuevamente el código? porque intente descargar y se borro el link. Desde ya muchas gracias. Saludos!

    ResponderEliminar
  9. Me encanto! muchas gracias! alguno tiene una idea para hacerlo sin presionar el boton "disponible", es decir, que el usuario escriba su nick y que al pasar al siguiente input se verifique la disponibilidad de manera automática? gracias!

    ResponderEliminar
  10. Samuel.... antes que nada sosssssssss unnnnnnnnnn capoooooooooooooo hace mas de una semana que queria cargar un formulario y que al grabar en la BD me muestre un mensade "Loko Cargaste del gran &%$#*[" y no daba pie en bola.... Gracias a tu ejemplo por fin pude hacer lo que queria.... sos grande... Daniel Talaver de Paraguay

    ResponderEliminar

->Comentarios<-