Siempre que creemos un formulario web (HTML), hay que validar las entradas. Esto siempre se hace del lado del cliente o cliente-side y del lado del servidor o server-side.
Del lado del servidor utilizamos el lenguaje que esté desarrollado el sitio, por ejemplo si el sitio está desarrollado con PHP, hay que crear un mecanismo que lea y valide todos los datos que llegan en las variables del formulario usando algo así:
... <?php if (!$_POST){ ?> <?php aquí va le código del formulario que podría estar en un archivo include ?> <?php }else{ ?> <?php $cuerpo = "Formulario de contacto\n"; $cuerpo .= "Nombre: " . $_POST["nombre"] . "\n"; $cuerpo .= "Email: " . $_POST["correo"] . "\n"; $cuerpo .= "Comentarios: " . $_POST["comentario"] . "\n"; mail("[email protected]",$_POST["correo"],$cuerpo); echo "<h4>Mesanje eviado correctamente. ¡Gracias por escribirnos!</h4>"; ?> <?php <?php aquí va le código del formulario que podría estar en un archivo include ?> }?> ...
En el código la variable $_POST es la que contiene los datos enviados desde el formulario. En el caso que esté vacía, simplemente mostrará el formulario, caso contrario enviará estos datos por correo y volverá a mostrar el formulario en caso que el usuario necesite enviar otra consulta.
En código anterior no se realiza ninguna validación, simplemente se envían los datos por correo, pero estas podrían estar vacías ya que el usuario olvidó escribir algunos de los datos solicitados o presionó por error el botón de enviar.
Para asegurarnos que esto no ocurra, tendríamos que validar que las variable no estén vacías y que la información contenida sea la solicitada, para esto podríamos usar algún código similar al siguiente:
... if (empty($_POST['nombre'])) $error .= "<p class=\"error\">No has introducido tu nombre</p>"; if (empty($_POST['correo'])) $error .= "<p class=\"error\">No has introducido tu dirección de correo</p>"; if (empty($_POST['comentario'])) $error .= "<p class=\"error\">No has escrito nada en el cuerpo del mensaje</p>"; $text_len = strlen($_POST['comentario']); if($text_len > 800) { $error .= "<p class=\"error\">El comentario debe ser de menor a 800, se ingresaron $text_len </p>"; } if(isset($_POST['correo'])) { if (!comprobar_email($_POST['correo'])) { $error .= "<p class=\"error\">La dirección de correo es incorrecta</p>"; } }// end of email check if($error) { echo $error;?> ...
Personalmente me gusta hacer la validación del lado del cliente por medio de Javascript. Igualmente siempre es necesario la validación del lado del servidor, ya que recordemos, que el Javascript podría estar deshabilidado del lado del cliente.
La validación con Javascript es muy sencilla, sólo hay que utilizar alguna biblioteca como:
- JSValidate – Biblioteca Javascript para validar formularios
- LiveValidation – Biblioteca Javascript para validar formularios
- o Validanguage – Biblioteca orientada a objetos para validar formularios entre muchas otras.
Si bien todas ofrecen funcionalidades similares, en mis desarrollos utilizo JSValidate.
JSValidate es un biblioteca Javascript para validar formularios que funciona muy bien y es muy fácil de implementar.
Simplemente hay que subir el archivo JS a al servidor y enlazarlo desde la página del formulario:
<script src="javascripts/jsvalidate.js" type="text/javascript"></script>
Es este caso el archivo de la biblioteca es jsvalidate.js y está alojado en la carpeta javascripts.
Además, requiere enlazar otras dos bibliotecas:
<script type="text/javascript" language="javascript" src="scriptaculous/lib/prototype.js"></script> <script type="text/javascript" language="javascript" src="scriptaculous/src/scriptaculous.js"></script>
Para validar los campos de un formularios debemos usar un código similar al siguiente:
<form name="input" enctype="multipart/form-data" method="post" action="http://direccion-del-sitio.com/?contacto.html"> <label for="nombre" accesskey="n">Nombre:</label> <input type="text" name="nombre" class="jsrequired" /> <label for="correo" accesskey="c">Correo electrónico:</label> <input type="text" name="correo" class="jsrequired jsvalidate_email" /> <label for="comentario" accesskey="o">Consulta/comentario</label> <textarea name="consulta" cols="30" rows="6" ></textarea> <input type="submit" value="Enviar" /> </form>
En el caso del campo nombre, sólo hay que agregar una clase con el valor jsrequired, con esto decimos que este campo es requerido es decir, este no puede ser enviado vacío.
En el campo correo, el valor de la clase es jsrequired jsvalidate_email que es justamente para validar que la dirección de correo escrita, sea válida es decir, que corresponda la formato [email protected].
La lista completa de los valores de las clases que podemos usar para validar los campos del formulario son:
- jsrequired – valor obligatorio.
- jsvalidate_number – valor numérico obligatorio.
- jsvalidate_digits – sólo números.
- jsvalidate_alpha – sólo letras.
- jsvalidate_alphanum – sólo letras, números y guiones (underscores).
- jsvalidate_email – dirección de correo.
- jsvalidate_uscanzip – códigos postales de Estados Unidos.
- jsvalidate_usstate – dos letras en mayúsculas para estado de Estados Unidos.
- jsvalidate_usphone – números telefónicos en el formato de Estados Unidos.
- jsvalidate_creditcard – números de tarjetas de crédito: VISA, MasterCard y American Express (sin espacios).
- jsvalidate_ssn – número del seguro social de Estados Unidos.
- select-notfirst – para usar en campos descolgables.
Además, tenemos que editar ciertos valores de variables contenidas en el archivo jsvalidate.js, que corresponden a los mensajes informativos mostrados (errores, dato esperado, etc.), esto hay que cambiarlo porque están en inglés así, si nuestro sitio, está en español estos se mostraran en dicho idioma.
Todo el código que se muestra en este tutorial ha sido simplificado por efecto didáctico y no se tiene en cuenta implementaciones de seguridad.