Formularios (Forms)


[anterior] [índice] [siguiente]

Entramos ahora en la descripción del elemento más novedoso del HTML 2.0 respecto a las versiones anteriores: los formularios.

Un formulario es una plantilla para representar un conjunto de datos, el método de enviarlos y el URI de la acción asociada (referencia al programa que va a realizar el proceso de los datos).

El conjunto de datos resultante después de la edición de los campos por el usuario se emplea para acceder a un servicio de información, en función del método y la acción asociada especificados.

El conjunto de datos es una secuencia de campos con pares nombre/valor. Los nombres se especifican en los atributos NAME de los elementos de entrada del formulario y los valores toman un valor inicial empleando distintos marcados, que luego pueden ser editados por el usuario.

Los formularios pueden mezclarse con elementos de definición de bloques, por ejemplo, un elemento <PRE> puede contener un <FORM> y al revés, un <FORM> puede contener listas. Esto permite gran flexibilidad a la hora de diseñar el aspecto de los formularios.

Es importante señalar que la utilidad de los formularios está limitada al uso de las páginas junto con servidores (o al menos con acceso a la red, ya que también se pueden enviar por correo electrónico), ya que las acciones asociadas son programas (generalmente scripts de CGI). Estos programas deben funcionar en un servidor (al que se le proporcionan los datos del formulario, para ser procesados), aunque hay algunos navegadores capaces de invocar guiones locales.

Veamos los elementos de los formularios y la forma de enviarlos:

  1. Elementos de un Formulario
  2. Envío de Formularios


Elementos de un Formulario

Dentro de un formulario podemos encontrar los siguientes elementos:

A continuación vamos a describir cada uno de los elementos y sus atributos correspondientes.

Declaración del Formulario (FORM)

La declaración del formulario se pone entre las marcas <FORM> y </FORM>.

En su interior aparecen una secuencia de elementos de entrada (input elements), junto con elementos de marcado de estructura del documento.

En la definición del formulario se pueden incluir los siguientes atributos:

Campo de Entrada (INPUT)

El elemento <INPUT> representa un campo de entrada de datos. Los atributos posibles del elemento vienen dados por el valor del atributo TYPE, que determina el tipo de entrada.

Los tipos de entrada son:

Campo de Selección (SELECT)

El elemento <SELECT> se emplea para reducir el campo a una lista de valores.

Estos valores se presentan empleando elementos de tipo <OPTION>. Los atributos del elemento son:

Por ejemplo:

<SELECT NAME="bebida">
<OPTION selected>Agua
<OPTION>Cerveza
<OPTION VALUE=refresco>Refresco Gaseoso
<OPTION>Vino
<OPTION>Zumo
</SELECT>

El elemento <OPTION> sólo puede aparecer dentro de un elemento <SELECT> y representa una posible elección. Puede tomar los siguientes atributos:

Área de Texto (TEXTAREA)

El elemento <TEXTAREA> representa un campo de texto de múltiples líneas. Los atributos posibles son:

Por ejemplo:

<TEXTAREA NAME="direccion" ROWS=6 COLS=64>
Magallanes, 25 - 28015 MADRID
</TEXTAREA>

El contenido del elemento es el valor inicial del campo. La especificación de filas y columnas sólo se refiere a la dimensión del área visible, pero los programas cliente pueden permitir sobrepasar los límites mediante barras de desplazamiento. Generalmente se emplea un tipo de letra de caja fija para mostrar los contenidos del campo.


Envío de Formularios

Un visor de HTML comienza el proceso de un formulario presentando el documento con los campos en su estado inicial. Según el tipo de campo, el usuario puede modificar sus valores (seleccionando un campo, rellenando con texto, etc.). Cuando ha terminado, puede enviarlo empleando un botón de envío o una selección de pixel en una imagen. En ese momento el visor analiza las entradas en función del método, acción y tipo de codificación y lo envía.

En caso de que el formulario sólo tenga un campo de entrada de texto de una línea, el visor debe aceptar una pulsación de la tecla de retorno de carro en ese campo como una petición de envío del formulario.

Tipo de Codificación de Formularios

La codificación por defecto de todos los formularios es, según el esquema MIME, application/x-www-form-urlencoded. Un conjunto de datos de formulario se representa en este caso del siguiente modo:

  1. Los nombres de campos y los valores son preprocesados: los espacios son reemplazados por el símbolo +, y los caracteres son sustituidos como en los URL, es decir, los caracteres no alfanuméricos se representan con un signo de porcentaje y dos dígitos hexadecimales que indican el código ASCII del carácter (%HH). Los saltos de línea (empleados en campos de múltiples líneas), se representan con pares CRLF (sustituidos por %0D%0A).
  2. Los campos se listan en el orden en el que aparecen en el documento, con los nombres separados del valor por el símbolo = y los pares separados entre sí por el símbolo &. Los campos con valores nulos pueden ser omitidos, en particular, los campos no seleccionados en entradas booleanas no deben aparecer en los datos, pero los campos ocultos que tengan el atributo VALUE sí.

Formularios de Consulta: METHOD=GET

El método de consulta depende de los efectos que el formulario tenga en el estado del resto del mundo, es decir, si el envío va a producir cambios en cualquier documento o programa que no sea nuestro visor.

Si el proceso del formulario es idempotente (no produce cambios), el método debe ser GET. Un ejemplo de este tipo de formularios son las consultas a bases de datos, que no tienen efectos laterales visibles.

Para procesar un formulario cuyo URL de acción es un URL de tipo HTTP y el método es GET, el visor genera un URI que comienza con el de la acción al que se le añade un interrogante (?) y el conjunto de datos codificado con el formato application/x-www-form-urlencoded visto en el punto anterior. Para acceder a la consulta el visor accede al URI de la misma manera que lo hace con los que aparecen en los anclajes.

De todos modos, en algunos casos, la codificación de los datos puede generar un URI extremadamente largo, lo que puede provocar un funcionamiento erróneo con algunos servidores de HTTP antiguos. Por esta razón, algunos formularios que no tienen efectos laterales, se escriben usando el método POST.

Formularios con Efectos Laterales: METHOD=POST

Para formularios con efectos laterales (como uno que modifique una base de datos) se emplea el método POST.

Para procesar un formulario cuyo URL de acción es de tipo HTTP y el método es POST, el visor gestiona una transacción de tipo POST del protocolo HTTP, usando el URI de la acción y el cuerpo de un mensaje de tipo application/x-www-form-urlencoded como antes. El visor debe presentar la respuesta del HTTP POST de la misma forma que la respuesta obtenida con el método GET.

Ejemplo de Envío de Formularios

Llegados a este punto, se hace necesario mostrar un pequeño ejemplo para clarificar lo anterior. Si tenemos el siguiente documento:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HEAD>
<TITLE>Ejemplo de env&iacute;o de formularios HTML</TITLE>
</HEAD>
<BODY>
<H1>Cuestionario de Personal</H1>
<FORM METHOD="POST" ACTION="/cgi-bin/post-query">
<P><B>Nombre</B>:
<BR><INPUT NAME="nom" TYPE="text" SIZE="52">
<P><B>Sexo</B>:
<BR><INPUT NAME="gen" TYPE=RADIO VALUE="M"> Mascul&iacute;no
<BR><INPUT NAME="gen" TYPE=RADIO VALUE="F"> Femen&iacute;no
<P><B>N&uacute;mero de miembros de la familia</B>:
<BR><INPUT NAME="nmf" TYPE="text" SIZE="52">
<P><B>Idiomas que conoce</B>:
<BR><INPUT NAME="idi" TYPE=checkbox VALUE="F"> Franc&eacute;s
<BR><INPUT NAME="idi" TYPE=checkbox VALUE="I"> Ingl&eacute;s
<BR>Otros:
<BR><TEXTAREA NAME="oid" COLS="48" ROWS="4"></TEXTAREA>
<P>
<INPUT TYPE=SUBMIT VALUE="Enviar Datos">
<INPUT TYPE=RESET VALUE="Volver a comenzar">
</FORM>
</BODY>
</HTML>

El estado inicial de los datos del formulario es:

nom ""
gen "M"
fam ""
oid ""

Hay que señalar que la entrada de tipo RADIO tiene valor inicial, mientras que el de tipo CHECKBOX no.

El usuario rellena los campos y solicita el envío. Supongamos que los valores son:

nom "Alicia Lindell"
gen "F"
fam "4"
idi "I"
oid "catalan\neuskera"

Entonces el visor gestiona una transacción HTTP POST usando el URI /cgi-bin/post-query. El cuerpo del mensaje será la siguiente línea:

nom=Alicia+Lindell&gen=F&fam=4&idi=I&oid=catalan%0D%0Aeuskera

Si quiere probar el ejemplo pinche aquí


[anterior] [índice] [siguiente]