[Indice]


Introducción a los formularios

Generalidades

Esta es una de las partes más técnicas y complejas del HTML. Los formularios o forms en inglés, son unas páginas especiales que se utilizan para realizar transacciones. En una página que contenga un formulario pueden además existir todos los elementos hasta ahora conocidos, incluso el propio formulario puede estar integrado dentro de otros elementos, como por ejemplo una tabla. Los formularios, en algunas impresoras, pueden dar problemas al imprimir las páginas que los contienen.

¿Cómo funcionan los formularios?

El formulario no es más que una página escrita en HTML como cualquier otra. Lo que la hace diferente es que permite capturar datos de varias maneras: directamente desde el teclado, escogiendo un valor de una lista desplegable o seleccionando una opción desde botones fijos o de todas ellas combinadas.

Una vez terminada la captura de datos, estos forman un registro que es enviado a un servidor http (web) que lo procesará y devolverá una respuesta (o no). Pueden utilizarse también para enviar su contenido a una dirección de correo electrónico, o que simplemente abran otra página.

Si el formulario se diseña para abrir una página o para ser enviado por e-mail, todo se reduce a escribir HTML, pero la cosa se complica cuando se trata de transacciones de datos que hay que guardar en un servidor (comercio electrónico). En este caso, en el servidor tiene que haber un programa especial, creado específicamente para ese formulario, que reciba los datos y sepa qué hacer con ellos, procesarlos y confeccionar la respuesta que remitirá al navegadorr. A esa respuesta se le denomina documento virtual ya que esa página no está escrita en ninguna parte; es generada, enviada y destruida.

A los programas que hacen de puente entre el formulario y el servidor, se les llama programas CGI (Common Gateway Interface) y no hay que confundirlos con las páginas dinámicas escritas en ASP o PHP, aunque se parecen mucho.

Los programas CGI pueden estar escritos en cualquier lenguaje de programación que sea soportado por el sistema operativo del servidor, y pueden estar diseñados para cualquier función: desde una simple captura de datos que serán guardados en un fichero, hasta la más sofisticada consulta a una base de datos.

¿Cómo es un CGI?

Aunque el propósito de esta guía no es tratar temas de programación, como breve orientación se muestra un sencillo programa hecho con comandos shell de UNIX. Muestra los valores de las variables de servidor más usuales, así como el nombre de los campos definidos en el formulario y contenido de cada uno de ellos.

Ejemplo de programa CGI (shell UNIX)

#!/bin/sh

echo Content-type: text/plain
echo

echo Test CGI. Se visualiza el contenido de las variables mas usuales
echo
echo numero de argumentos: $#. valor argumentos: "$*".
echo

echo SERVER_SOFTWARE      = $SERVER_SOFTWARE
echo SERVER_NAME          = $SERVER_NAME
echo GATEWAY_INTERFACE    = $GATEWAY_INTERFACE
echo SERVER_PROTOCOL      = $SERVER_PROTOCOL
echo SERVER_PORT          = $SERVER_PORT
echo REQUEST_METHOD       = $REQUEST_METHOD
echo HTTP_ACCEPT          = $HTTP_ACCEPT
echo PATH_INFO            = $PATH_INFO
echo PATH_TRANSLATED      = $PATH_TRANSLATED
echo SCRIPT_NAME          = $SCRIPT_NAME
echo QUERY_STRING         = $QUERY_STRING
echo REMOTE_HOST          = $REMOTE_HOST
echo REMOTE_ADDR          = $REMOTE_ADDR
echo REMOTE_USER          = $REMOTE_USER
echo REMOTE_IDENT         = $REMOTE_IDENT
echo AUTH_TYPE            = $AUTH_TYPE
echo CONTENT_TYPE         = $CONTENT_TYPE
echo CONTENT_LENGTH       = $CONTENT_LENGTH
echo HTTP_USER_AGENT      = $HTTP_USER_AGENT
echo HOME                 = $HOME
echo HTTP_FROM            = $HTTP_FROM
echo HTTP_REFERER         = $HTTP_REFERER
echo REFERER_URL          = $REFERER_URL

if [ "$CONTENT_TYPE" = "application/x-www-form-urlencoded" ]; then

read lo_que_viene
echo
echo ESTO VIENE POR  LA INPUT:
echo
echo $lo_que_viene

exit 0
else

echo NO VIENE NADA POR LA INPUT
exit 0
fi

Esta sería la respuesta del CGI test2-cgi a un imaginario formulario llamado prueba.htm con dos campos de captura por teclado llamados CAMPO1 y CAMPO2 en los que hemos introducido: "Esto es una" y "demostracion de formularios" respectivamente.

Ejemplo de respuesta del programa test2-cgi al formulario prueba.htm

Test CGI. Se visualiza el contenido de las variables mas usuales

numero de argumentos: 0. valor argumentos: .

SERVER_SOFTWARE = NCSA/1.3
SERVER_NAME = miserver.midominio.mipais
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.0
SERVER_PORT = 80
REQUEST_METHOD = POST
HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
PATH_INFO =
PATH_TRANSLATED =
SCRIPT_NAME = /cgi-bin/test2-cgi
QUERY_STRING =
REMOTE_HOST = mimaquina.misubdominio.midominio.mipais
REMOTE_ADDR = 255.255.255.255
REMOTE_USER =
REMOTE_IDENT = unknown
AUTH_TYPE =
CONTENT_TYPE = application/x-www-form-urlencoded
CONTENT_LENGTH = 52
HTTP_USER_AGENT = Mozilla/2.02 (Win95; I)
HOME =
HTTP_FROM =
HTTP_REFERER = http://sestud.uv.es/manual.esp/prueba.htm
REFERER_URL =

ESTO VIENE POR LA INPUT:

CAMPO1=Esto+es+una&CAMPO2=demostracion+de+formularios

Fíjate que las palabras aparecen separadas por el signo + y no por espacios como hemos escrito. Si además hubiéramos escrito algún carácter especial, no se vería como tal, sino su valor en hexadecimal precedido del carácter %. Por ejemplo, el cáracter & es transferido como %26. Esta conversión se hace para no confundirlo con el separador de campos, que como puedes ver es el mismo símbolo. El signo = después del nombre del campo, también lo pone el visualizador.

Todo esto y algunas cosas más (que habrá que ver en la documentación de referencia) han de tenerse presentes a la hora de realizar programas CGI. Para terminarlo de complicar, no todos los visualizadores utilizan la misma forma de enviar los datos recibidos, por lo que se plantea a menudo la necesidad de decidir para qué visualizador queremos programar nuestro WEB.

Los programas de test, como el del ejemplo, son muy útiles cuando se están diseñando formularios, ya que permiten comprobar de forma real su funcionamiento y analizar el registro que envían, cosa imprescindible para poder programar el correspondiente CGI. Intenta hacer uno a tu medida, o simplemente copia éste, instálalo en tu servidor http, (si no tienes acceso, pide a tu administrador de sistema que lo haga), empieza a probar... y buena suerte.


[Indice]