Vamos a crear un formulario css válido, con validación en el lado de cliente mediante jquery, y enviando los datos al servidor con ajax. Para el ejemplo, vamos a validar un usuario y contraseña, para la lógica en el lado del servidor usaremos php. Para que toda la programación php sea más fácil y no tengamos que escribir ni una sóla linea de sql usaremos objetos generados con pog (php object generator). Todo esto, con tan sólo unas pocas lineas de código…. ¿Qué más puedes pedir?
El objetivo de este pequeño tutorial es demostrar como crear un formulario css válido de forma simple, poder validar el logeo de un usuario. Usaremos jquery para validar el formulario en el lado del cliente, php ayudado de pog (para los que no conozcan pog les puede servir también de introducción). Puedes ver el ejemplo funcionando aquí. Bueno, empecemos.
Lo primero en lo que tenemos que fijarnos, es que el destino del formulario es una página llamada ajax.php. En realidad, y para este ejemplo, el formulario podría llamarse a sí mismo, pero prefiero tener todo el código en un fichero (o varios) separado para tenerlo todo más claro y que todo sea después más facil de mantener. El formulario tiene un campo oculto, llamado accion. Contiene la acción que se va a ejecutar en el fichero ajax.php, en este caso, login. Explicaré todo eso más adelante.
El div con id mensaje es el que mostrará los errores de forma dinámica gracias a jquery.
Por lo demás, el código del formulario no tiene ningún misterio, he agregado span en los label para poder poner darle al visitante información sobre qué es cada campo.
Pasamos al código CSS:
Poco que comentar, simplemente destacar el display:none de #mensaje. Queremos que esa capa esté oculta cuando el formulario se muestre por primera vez.
Pasamos al código jquery. Obviamente, tendrás que descargarlo desde su página oficial e importarlo en tu documento xhtml, en mi caso ha sido así:
Para los ejemplos siempre uso las versiones sin comprimir ni reducir de jquery, ya que si necesito debugear o mirar algo puedo hacerlo. Si esto fuera para una página en producción, seria recomendable usar una versión mas ligera de jquery para que la página cargara más rápido. En este ejemplo, también necesitaremos un plugin para que el trabajo con formularios desde jquery sea más facil. En mi caso he usado este, su funcionamiento, como casi todo en jquery, es bastante fácil. Si quereis más información sobre el plugin, pasaros por su página oficial, está repleta de ejemplos y documentación abundante.
Pasamos al código jquery:
Estamos diciendo que el formulario se enviará usando ajax (es decir, no se va a recargar la página). Antes de enviar el formulario llamaremos a la función validate, cuando se complete el envio de todos los datos llamaremos a la función hecho.
Pasamos a la función validate:
Bien veamos, declaro una variable para almaenar los posibles errores que ocurran, y me declaro una variable que contendrá todo el formulario. Tenemos dos if, que comprueban que los campos tengan valores (en este caso, los dos campos son obligatorios). En el caso de que no tengan valor, agregamos un la descripción dentro de un <li> para después poder mostrarla. Si hay fallo, le damos el foco al control para que el usuario lo pueda corregir.
Finalmente, si la variable error tiene longitud mayor a cero (es decir, ha habido algún error), lo que hacemos es vaciar la capa mensaje, genero la lista con los errores y se la asigno a la capa mensaje con el metodo append, y mostramos la capa con un efectillo, en este caso, slideDown. Devolvemos false para que el formulario no se procese.
Pasamos a la función hecho.
Recibe dos parámetros, responseText y statusText. Para más información, al igual que antes, visita su página oficial. A nosotros, en este caso nos interesa la variable responseText, que con el metodo append lo pondremos en la capa mensaje que mostraremos, al igual que antes, con slideDown
Si ya tenias algo de experiencia con jquery o similar, este código seguro que es fácil y rápido de escribir. Si no es tu caso, como ya he comentado antes, con unos ejemplos y un poco de practica lo dominarás sin mucho esfuerzo. Si hasta yo he aprendido a usarlo!
El código php yo lo pongo en un archivo aparte, ajax.php. Pasamos al código de dicho fichero:
Bueno, veamos, si no conoces pog, pásate por su página a ver la documentación y los ejemplos, también es bastante fácil y rápido de aprender siempre y cuando manejes php y sepas algo de programación orientada a objetos.
En la primera línea incluyo el fichero configuration. Lo genera pog, y es el que tendrás que editar para poner los datos para la conexión con tu base de datos. Las siguientes líneas son para comprobar que acción tenemos que realizar. Para este ejemplo, podríamos haber realizado directamente la accioón de logeo, pero como pienso ir ampliandolo poco a poco, esa estructurá me servirá dentro de poco.
La función login es la que realiza todo el trabajo. Primero, instancio al objeto usuario (generado con pog, más adelante te explico cómo). Busco todos los usuarios que tengan el mismo login y password en mi base de datos. Si hay alguno, guardo en una variable de sesión su id, si no lo hay, muestro que los datos introducidos no son correctos. Obviamente, si los datos fueran correctos habría que redirigirlos a otra página, pero para el ejemplo nos sirve tal y como está.
Comentar que todo lo que muestre desde este fichero será lo que tome después la variable responseText que usamos anteriormente con jquery en la función hecho
Es bastante fácil, simplemente dirígete a su página, ves poniendo los campos que vas a usar en la tabla (en el caso de este ejemplo simplemente login y password). De todo lo que nos genera, sólo nos interesa el fichero configuration.php y la carpeta objects.
Supongo que lo más complicado (raro más bien) de el tutorial puede ser la parte del pog. Cualquiera es libre de modificar el archivo ajax.php para hacerlo todo “a mano”. Agradecería que me lo enviarais para colgarlo también en el tutorial y que cada uno escogiera la opción que prefiriese.
Obviamente, los mensajes de error/éxito habria que modificarlos algo con css, pero para no liar más el ejemplo se ha optado por dejar la lista y los avisos tal cual.
Por otro lado, todo esto se podría haber hecho en un mismo archivo, pero me gusta tenerlo todo separado y ordenado para que cuando tenga que modificar algo sea todo más fácil.
Nota: Si os bajáis los archivos para probarlos vosotros mismos, no olvideis editar el archivo configuration.php. Los objetos de pog están generados para php 4, si usáis php 5 simplemente copiad y pegad la url del objeto, elegis php5, o sobrescribes los archivos.
Decarga todo el código fuente usado en el tutorial aquí.
Este blog es un blog personal. En el postearé manuales, recursos, cualquier cosa que me parezca interesante sobre diseño web, programación web, maquetación, photoshop, y algo de linux (ubuntu y linux mint). Si lo deseas, puedes ponerte en contacto conmigo para cualquier sugerencia, critica, agradeciminto, cualquier cosa referente a este blog.
iluminalo.com
June 21st, 2008 at 4:40 pm
Formulario css con validacion jquery y php | Uno de los otros…
Esta semana cree un tutorial sobre como crear un formulario de registro para ilustrar el funcionamiento del envio de formulario mediante ajax con jquery.
El ejemplo es simple, he tratado de explicar todo lo mejor posible….
autobombo.es
June 21st, 2008 at 4:48 pm
Formulario css con validacion jquery y php | Uno de los otros…
Esta semana cree un tutorial sobre como crear un formulario de registro para ilustrar el funcionamiento del envio de formulario mediante ajax con jquery.
El ejemplo es simple, he tratado de explicar todo lo mejor posible….
mueveme.es
June 22nd, 2008 at 12:20 am
Formulario css con validacion jquery y php | Uno de los otros…
Esta semana cree un tutorial sobre como crear un formulario de registro para ilustrar el funcionamiento del envio de formulario mediante ajax con jquery. He tratado de hacerlo lo mas simple posible para que sea de facil comprension….
ayudablogs.com
June 30th, 2008 at 8:31 pm
Formulario css con validacion jquery y php…
tutorial sobre como crear un formulario de validacion basico mediante ajax. Se usa phpy jquery para lograrlo….
Introduccion a phpobjectgenerator: Sistema de registro de usuarios con php. | Uno de los otros
July 5th, 2008 at 11:14 am
[...] poco escribi un post en el que explicaba como realizar un sistema de logeo de usuarios usando ajax con jquery, y php para la lógica de servidor (php object generator para acceder a la base de datos). He recibido algún email pidiendome que [...]
llse
July 28th, 2008 at 4:33 pm
saludos amigo imposible, ver como puedo hacerlo funcionar con php 5 he probado de todo soy nueva en este asunto agradeceria tu colaboracion
Jesus
July 29th, 2008 at 9:45 pm
ola llse,
en php5 no te va a funcionar por que las clases que uso en el ejemplo estan hechas para php4. Puedes volver a generar las clases tal y como explico en este otro post
http://www.jesusyepes.com/css/introduccion-a-phpobjectgenerator-sistema-de-registro-de-usuarios/
si aun así tienes dudas, comentamelo e intentare ayudarte.
un saludo
Diseño Web Peru
August 13th, 2008 at 5:49 am
Gracias por el Gran àporte
Saludos
Ginno
August 31st, 2008 at 7:19 pm
Hola, gracias por el tremendo aporte.
Pero siempre me ocurre lo siguiente:
Descargué todo el código fuente del turorial, lo implemente, vamos viendo:
1.- Cuando no ingreso nada (ni usuario ni contraseña): se comporta bien; es decir me solicita ingresarlos.
2.- Si ingreso uno (sólo usuario o sólo contraseña): se comporta bien; es decir me solicita ingresar el que no haya ingresado.
El problema:
Si ingreso un usuario cualquiera con una contraseña cualquiera me arroja:
Fatal error: Method usuario::__get() must take exactly 1 argument in C:\xampp\htdocs\Prueba\includes\objects\class.usuario.php on line 54
Y todavía no puedo dar con cómo solucionar ese error.
Te agradecería infinitamente si puedieses explicarme lo que puede estar pasando.
A la espera de tu respuesta y agradecido por tu tiempo, se despide
Ginno
Ginno
August 31st, 2008 at 7:37 pm
Hola, se me olvidaba:
¿hay que crear de todas formas una base de datos o se genera sola?
Saludos
Ginno
Jesus
September 1st, 2008 at 5:32 pm
No, a ver, la base de datos la tienes que crear tu, lo que he publicado es solo un ejemplo de como usar jquery para validar formularios a lo “ajax” y una pequeña introduccion al pog, que al menos a mi me ha ahorrado muchas horas de programacion.
Lo del error que dices, a ver, que version de php tiene el servidor sobre el que lo estas ejecutando? Los ficheros que he puesto de ejemplo son para php 4, si fuese para php5 tendrias que regenerar los objetos y sobreescribirlos, no tendrias que cambiar nada de la programacion.
Cualquier cosa avisa, un saludo
Jose
September 30th, 2008 at 11:52 am
saludos. como puedo direccionar un enlace a este formulario luego de que el login del usuario haya sido confirmado?
Jesus
October 1st, 2008 at 5:04 pm
Hola Jose,
Pues lo puedes hacer directamente con Javascript, con un window.location.
Luego en la pagina de destino, verificas que el usuario está logeado y la muestras, en caso de que no lo estes, lo reenvias a la pagina del formulario.
Si lo haces con php (como en el ejemplo) la funcion header() te va a servir para todo esto.
Un saludo
Jorlucaco
November 18th, 2008 at 9:55 am
Holas! excelente aporte pero siguiendo la pregunta de Jesus pues como le hago para que envie a otra pagina pues con header me retorna toda la pagina pero como si fuera un comentario en la misma pagina y la idea es que me mande a otra pagina.
Quisiera hacerlo con PHP mas q con javascript
Jesus
November 26th, 2008 at 1:38 am
Pues, si lo quieres hacer con php, cuando validas el usuario si es correcto usas la funcion header().
Donde pone echo ‘
El usuario se ha logeado correctamente.
’; puedes poner header(’Location: paginadestino.php’);
Si lo quisieras con javacript, deberias usar window.location
Espero que te sirva, un saludo
Aless AA
April 23rd, 2009 at 8:20 am
Oye que pena, soy nuevo en esto, me puedes explicar mejor como hacer que funcione en php5, ya que es la version que tengo instalada, no entiendo que hay q copiar y pegar como dices arriba.
gracias.
Juan José
April 25th, 2009 at 4:40 am
Genial, que buen aporte muy bien explicado.
Jesus
April 25th, 2009 at 2:49 pm
Aless, bajate el codigo, lo abres, y en la carpeta includes/objects/class.usuario.php hay una url en la parte superior del archivo (en los comentarios). Vas a esa url, en los desplegables y demás estará php4, pues elijes php5. Cuando te genere los archivos, machacas los que ya tienes y ya está.
Juan josé, gracias por tu comentario
ale
May 22nd, 2009 at 8:32 pm
hola me pueden ayudar en el sistema de registracion? mi msn es workstation9@hotmail.com
Jesus
May 22nd, 2009 at 11:50 pm
ale, cualquier duda que tengas preguntala aqui. Es posible que tu duda le pueda servir a alguien ….
Un saludo
becquerel
October 29th, 2009 at 12:35 am
che muy buena la explicación, pero tengo un probelm, si uso sha1 para codificar la contraseña en la base de datos como hago, o en que parte de este script coloco para codificar lo que mande y comparar el resultado?
Manuel
December 12th, 2009 at 6:54 am
Para que Publicas Un Ejemplo En Corre En Php 4 que ya no se Ultiliza Quedatelo Guardado Mejor
admin
December 14th, 2009 at 2:16 pm
bueno, primero:
está el codigo para php5
segundo: php4 se utiliza muchisimo.
tercero: si no te gusta, te piras, y te buscas los ejemplos por otro sitio, o lo pasas tu a php5.
Un saludo ^^
lalo
December 20th, 2009 at 1:29 am
Podrias subir el ejemplo y la demo…. es que no me funciona :S
daniel mendez
January 21st, 2010 at 11:21 pm
oye esta interesante pero solo una duda si necesito tanttos archivos para hacer eso cuando yo lo haria en un solo archivo no se porque malgastas recursos la unica duda es como encriptar la contraseña y enviarla via get por la url pero encriptada es lo unico que me falta ahh ademas el link de ejemplo ni funciona mejor suerte para la proxima
admin
January 22nd, 2010 at 6:05 pm
Buenas Daniel, gracias por tu comentario.
El poner mas o menos archivos es simplemente para que si alguien que no sabe como hacerlo, con archivos separados lo va a tener mas claro. Obviamente, se puede hacer todo en un archivo, claro, no es ningún problema.
Lo de los enlaces ya se que no van, perdí los ejemplos en la última migración, cuando tenga un hueco en casa los buscaré y los volveré a subir.
De todos modos, gracias por avisa, Saludos!
Edinson
June 22nd, 2010 at 6:35 am
Hey viejo que gran aporte…pero en algun momento de este articulo tu dices que lo continuaras poco a poco. La verdad esto intentando hacer un sistema de logeo completo. Sera que me puedes ayudar