3.-Formularios html5
3.-Formularios html5
[13.1] introducción
Los formularios son un elemento presente en muchas páginas web cuya labor es la de recabar
información del usuario. La función habitual de un formulario es enviar esa información a un
servicio en la red para que la procese adecuadamente.
Por ejemplo podemos pedir al usuario su nombre y contraseña y enviar esa información a una
página PHP, lenguaje que se interpreta directamente por el servidor que almacena esas
páginas, el cual puede validar o no esos datos.
No siempre hay una tecnología del lado del servidor detrás, podemos también, a través de un
formulario, indicar que el usuario elija el color de fondo de la página. La labor de recoger el color
y modificar el fondo de la página lña puede hacer el propio navegador a través del
lenguaje JavaScript.
Los formularios son fundamentales para las páginas web actuales, ya que es casi imprescindible
obtener información del usuario para adaptar los contenidos a sus necesidades e intereses.
En HTML 5 se han mejorado muchísimo las posibilidades de los formularios. Una vez más, el
problema es que hay características que no todos los navegadores soportan, solo los más
modernos.
La página http://www.wufoo.com.mx/html5/ presenta una tabla (en inglés) muy interesante
para saber, sobre cada nueva característica de los formularios HTML 5 qué navegadores la
soportan (e incluso desde qué versión).
[13.2] funcionamiento de los formularios. métodos GET y POST
<form action=”servicio.php”>
<label for=”nombre”>Escriba su nombre</label><br>
<input type=”text” id=”nombre” name=”nombre”><br>
<label for=”apellidos”>Escriba sus apellidos</label><br>
<input type=”text” id=”apellidos” name=”apellidos”><br>
<label for=”sexo”>Escriba su sexo: </label><br>
<input type=”radio” id=”hombre” name=”sexo” value=”hombre”>
<label for=”hombre”>Hombre</label>
<input type=”radio” id=”mujer” name=”sexo” value=”mujer”>
<label for=”mujer”>Mujer</label><br><br>
<button>Enviar</button>
</form>
Como veremos, la etiqueta form es la encarga de indicar el destino de los datos. En este caso es la
página PHP: servicio.php, que deberá estar alojada en el mismo directorio que la página del
formulario.
Hay cuatro controles (distinguibles por su atributo name): nombre, apellidos y sexo.
Al pulsar enviar se envía el valor Jorge para el control
llamado nombre, Sánchez para apellidos y Hombre para sexo.
[13.2.2]métodos de paso de datos
paso de datos mediante GET
En el ejemplo anterior, los datos se pasan mediante GET. GET es un comando del protocolo http
que realiza una petición a un URL.
En este método los datos se pasan en la propia URL. Si el formulario se aloja en la
dirección: http://jorgesanchez.net/practicas/formulario/ entonces cuando escribamos los
datos de la Ilustración 90, se generará esta dirección en el navegador:
http://jorgesanchez.net/practicas/formulario/servicio.php
?nombre=Jorge&apellidos=S%C3%A1nchez&sexo=hombre
El apellido Sánchez se convierte en S%C3%A1nchez (debido a que las URL no pueden tener el
carácter á). Dejando de lado la cuestión de la codificación, la forma de una URL que contiene
datos procedentes de un formulario vía GET es:
http://urlpágina?var1=valor1&var2=valor2&.....
Es decir, se envían pares entre el nombre de la variable (en el formulario asignada a través del
atributo name) y el valor que se le dio en el formulario. Cuando un control del formulario se
queda sin valor, entonces el nombre del control se queda sin definir (el servidor no recibiría
ningún dato con ese nombre).
La cuestión en el paso por GET es que los datos que se pasan aparecen en la propia URL; por lo
que el paso de datos de un formulario mediante GET tiene estas connotaciones:
La URL es visible, por lo que todo lo que el usuario ha escrito está a la vista en la URL. Y
eso incluye las contraseñas y nombres de usuario que haya utilizado.
Las páginas generadas con GET pueden añadirse como marcador o favorito a los
navegadores y páginas de marcadores.
paso de parámetros mediante POST
El paso por POST funciona exactamente igual, se siguen pasando los pares nombre, valor. Pero
los datos se envían dentro del paquete de datos y no por la URL.
Parece más seguro el paso de parámetros por POST, pero lo cierto es que los datos que viajan
mediante el método POST, lo hacen en la cabecera del paquete y esta cabecera es visible por
cualquier persona que esté “escuchando” en la misma red que el cliente que está enviando
datos.
Aunque es más difícil obtener los datos enviados vía POST, es posible hacerlo.
resumen final
GET tiene más mala prensa de POST, por decirlo de esta manera. Pero lo cierto es que el paso
por POST no garantiza en absoluto la confidencialidad. GET tiene sus ventajas (podemos dejar
guardada la página tras enviar los datos en los marcadores).
Al final, para el diseñador de la página web la realidad es que si creamos simplemente el
formulario, deberemos saber qué exige el servicio que recibe los datos, si método GET o método
POST. Hay que tener en cuenta que en un sitio web grande el front-end de la página (la parte
visible para el usuario) lo puede realizar una persona distinta respecto a la que crea el back-
end (la programación en el lado del servidor, invisible para el usuario).
[13.3] elemento form
[13.3.1]funcionamiento
Todo formulario HTML comienza con una etiqueta form, dentro de ella se colocan todos los
controles del formulario. Un formulario por lo tanto es un elemento form, desde el punto de vista
HTML, y dentro habrá diversos elementos que representarán a cada uno de los controles
encargados de recabar y presentar los datos del usuario. La idea es por lo tanto esta:
<form action=”página/servicio” method=”GET o POST”>
…
</form>
Como se observa, hay dos atributos que se encargan de indicar a dónde y de qué forma enviar
los datos recogidos del formulario. Eso se hace a través de los atributos action y method, se
explican a continuación:
action. Se trata de la URL de la página o servicio al que se enviarán los datos para su
procesamiento. Si no queremos que el formulario envíe datos a otra página (por
ejemplo, porque simplemente los queremos manejar internamente con JavaScript), se
suele poner action=”#” .
method. Puede ser GET o POST. Se relacionan con las dos formas de enviar datos del
protocolo http. Se explica la diferencia al final de este capítulo.
[13.3.2]otros atributos de form
atributo significado
Codificación de caracteres que se utilizará para pasar los contenidos del
accept-
formulario, por ejemplo ISO-8859-1. Por defecto se usa la codificación de la
charset
propia página web.
Puede tomar los valores on u off. Si se activa esta opción (con valor on), el
navegador automáticamente completará los datos del formulario basándose en
los valores para esos mismos controles que el usuario haya rellenado en otros
autocomplete formularios.
Este atributo está disponible también para cada control (así podremos indicar
el auto completado en unos controles y en otros no).
No funciona en el navegador Opera.
Solo es válido para el método POST. Indica el formato en el que los datos del
formulario son enviados. Nunca se suele usar. Posibles valores:
aplication/x-www-form-urlencoded. Formato predeterminado para
el envío de los datos.
multipart/form-data. Formato de dato binario, solo se usa si con el
enctype
formulario se envía un archivo.
text/plain. Texto plano, compatible con antiguos programas de
recepción de datos de formulario (por ejemplo viejos programas CGI en
el servidor).
atributo significado
Indica el tipo de control. Sus posibles valores se explican en las siguientes
type
secciones del manual
Atributo fundamental que da un nombre al control. Este nombre es el que se
name le pasa al servicio receptor de los datos del formulario; realmente se le pasa el
nombre y el valor que el usuario ha introducido en el control.
Tamaño, en caracteres, que tendrá el cuadro (especialmente útil en los
size
cuadros de texto y numéricos)
Permite dar un valor al elemento. Antes de que el usuario rellene datos en él,
value
aparecerá el valor indicado con este atributo.
disabled El control aparecerá deshabilitado para su edición.
Permite que el navegador rellene automáticamente el contenido del control
autocomplete en base a la información que posee del usuario. Los valores posibles
son on u off.
Hace que elemento obtenga el foco (el foco hace que el control del
autofocus formulario que lo tenga sea el que recibe las pulsaciones de teclado del
usuario) en cuanto cargue la página.
disabled El control estará deshabilitado
Recibe el identificador del formulario al que pertenece el control. Se usa
form cuando el elemento está fuera de la etiqueta form . Internet Explorer no es
compatible con este atributo. Es un atributo de HTML 5
formnovalidate
Hace que el control no sea validado cuando se envíen los datos
d
Permite indicar el máximo número de caracteres que se admitirán al rellenar
maxlength
el control
Este atributo es el común a todos los elementos HTML. En el caso de los
formularios su uso no era habitual ya que necesitan del uso de name que ya
se puede entender que identifica a cada control.
Sin embargo se aconseja usar siempre id en los controles por estas razones:
El atributo name ya hace bastantes años que se quería eliminar.
Aunque esta no es razón para ello ya que, por ahora, el atributo name
es la forma de pasar los datos de un control de formulario al servicio
que los recibe
id
La nueva etiqueta label (introducida en HTML 5) que sirve como
texto de acompañamiento de los controles de un formulario, requiere
que el control al que etiqueta esté identificado.
La manera más habitual para acceder desde JavaScript a un control del
formulario es a través de su identificador. Como es habitual usar
JavaScript cuando se usan los formularios, es un excelente hábito
indicar siempre valor para el atributo id.
readonly Indica que el control es de solo lectura; es decir, no se podrá escribir en él.
atributo significado
Atributo de HTML 5 que hace que el elemento sea de obligado rellenado; es
required decir que no se puede dejar vacío, el usuario tendrá que darle algún valor.
No funciona en Safari no en versiones de Internet Explorer anteriores a la 9
Permite colocar una expresión regular en un cuadro de texto. De esa forma
no se admitirán los valores que no cumplan esa expresión (salvo que
indiquemos novalidate)
Ejemplo (cuadro de texto que solo acepta introducir 5 letras mayúsculas y tres
números):
<form action=”servicio.php”
pattern method=”get”>
<label for=”texto”>
Escribe el nº de serie (5 letras y tres números)
</label>
<input type=”text”
pattern=”[A-Z]{5}[0-9]{3}” id=”gustos” name=”texto”/>
<input type=”submit” value=”enviar”><br>
</form>
Un placeholder es un texto que ayuda a rellenar un cuadro de un formulario
(está especialmente pensado para los cuadros de texto) colocando un texto
inicial en el cuadro que se va en cuanto el cuadro obtiene el foco del usuario
(el foco se obtiene, por ejemplo, haciendo clic en el control de texto).
Ejemplo:
<form action=”servicio.php”
method=”get”>
<label for=”texto”>
placeholder Escribe el nº de serie
</label>
<input type=”text” pattern=”[A-Z]{5}[0-9]{3}” id=”texto” name=”texto”
placeholder=”5 letras y tres números”>
<input type=”submit” value=”enviar”><br>
</form>
El resultado es:
[13.4.3]cuadros de texto
Los cuadros de texto usan el atributo type con valor text. Permiten recoger información escrita
por el usuario. Su sintaxis básica es:
[13.4.4]cuadro de contraseñas
Funcionan como los cuadros de texto, solo que el texto que se introduce se oculta, mostrando
solo puntos o asteriscos. Se usan, lógicamente, para introducir contraseñas. La sintaxis es:
[13.4.5]botones
Los botones son controles del formulario en los que no se puede escribir, sino que, simplemente,
reciben un click de ratón o un golpe de dedo en un dispositivo táctil. Esa pulsación puede dar
lugar a diversos efectos (la mayoría con ayuda de JavaScript). El más común de ellos: enviar los
datos del formulario.
Hoy en día los botones se aconsejan utilizarles mediante el elemento button, que se explica más
adelante. No obstante muchos diseñadores siguen utilizando esta forma (que por otro lado es
más compatible con navegadores antiguos), por ello se explica en este manual
botón de envío
Sirve para llevar a cabo la comunicación entre el formulario y la página que recoge sus datos. La
sintaxis básica es:
atributo significado
Atributo incorporado en HTML 5 (las versiones de Internet Explorer
inferiores a la 10 no le soportan), que asignado a un botón de
tipo submit o image, permite indicar el servicio al que se enviarán los datos
del formulario.
formaction
Normalmente un botón submit envía los datos al servicio indicado por el
atributo action del elemento form, esto permite un destino alternativo, de
modo que podríamos tener dos botones cada uno de ellos indicando un destino
distinto para los datos.
Con las mismas características que el anterior, en este caso permite indicar el
formethod
método de paso (GET o POST) de los datos
Con las mismas premisas que los dos atributos anteriores, indica la forma de
codificación de los datos (como el atributo type del elemento form), puede
ser:
formenctype application/x-www-form-urlencoded
multipart/form-data
text/plain
En el ejemplo, los botones de radio tienen el mismo nombre (sexo), bajo ese nombre se
enviarán los datos a la página servicio.php (indicada en el apartado action), los valores que se
enviarán serán m si se elige mujer y h si se elige hombre. El atributo checked hace que el botón
en el que se usa (el de la mujer), aparezca chequeado por defecto. Además los dos
elementoslabel se relacionan con el botón correspondiente, de ese modo haciendo clic en el
texto se activa el botón relacionado (prueba de que hemos asociado bien la
etiqueta label al inputcorrespondiente).
[13.4.8]casillas de verificación
Se usan igual que los botones de radio, pero en este caso están pensadas para ser
independientes unas de otras. Es decir, no se pone el mismo nombre, como ocurría con los
botones de radio, a dos casillas diferentes. Son por tanto valores del tipo activar/desactivar
La diferencia es que el tipo (type) usa el valor checkbox en lugar de radio. El atributo checkedde
los botones de radio se puede usar en las casillas de verificación con la misma finalidad: para
que inicialmente la casilla aparezca pulsada. Ejemplo:
atributo significado
Permite indicar el tipo MIME de archivos que aceptará el servidor. Por
ejemplo image/* indicará que se acepta cualquier formato de imagen. Otras
accept
posibilidades son audio/* y video/* o indicar un tipo MIME completo
como image/jpeg.
multiple Si aparece, permite especificar más de un archivo
[13.4.10]cuadros numéricos
Aparecen con type=”number”. Sirven para introducir números (decimales o no). Los
navegadores que reconocen este tipo de control presentan un cuadro de texto con botones para
subir y bajar el valor del número (el incremento o decremento que hacen depende del
atributo step) y además no permiten enviar los datos (salvo que se use el atributo novalidate) si
se intentan introducir datos no numéricos.
Hay una serie de atributos reservados a este tipo de cuadros:
atributo significado
max Establece el máximo valor que se puede escribir en el cuadro
min Establece el mínimo valor que se puede escribir en el cuadro
Valor en el que se puede incrementar el número. Por defecto vale 1, lo que impediría
step introducir valores decimales. Para decimales por ejemplo habría que indicar un step
de 0.01
[13.4.11]cuadros de fecha
Se usa con type=”date”. Permite seleccionar una fecha. Los navegadores que reconocen este
tipo de control permiten pulsar en un botón que invoca a un calendario para elegir
cómodamente la fecha. Ejemplo:
[13.4.15]otros controles
input type=”email”. Permite indicar direcciones de correo electrónico
input type=”url”. Permite indicar direcciones URL.
input type=”search”. Presenta un cuadro de texto pensado para hacer búsquedas.
input type=”tel”. Permite introducir números de teléfono.
input type=”color”. Presenta un control de selección de colores. El color se toma en
formato #xxxxxx donde cada x es una cifra hexadecimal. Es decir, el color se obtiene en el
formato habitual de colores de HTML.
[13.5] botones modernos
La recomendación de HTML 5 para los botones es utilizar el elemento button. La diferencia
práctica está en el funcionamiento, esta etiqueta tiene apertura y cierre y el texto que aparece
en el botón está contenido por elemento button; de esta forma se permite colocar código HTML
en el texto del botón. Ejemplo:
<button>Hazme <strong>clic</strong></button>
Mostraría el botón:
atributo significado
name Nombre del botón
id Identificador del botón
value Permite dar un valor al botón
Indica el tipo de botón, puede ser:
submit. Envío de datos (valor por defecto)
type reset. Borrado de la información introducida en el formulario
button. Botón genérico.
Se pueden agrupar opciones dentro del cuadro usando el elemento optgroup. Ejemplo:
atributo significado
name Nombre del cuadro combinado
id Identificador del cuadro combinado
autofocu
HTML5. El control adquiere el foco en cuanto carga la página
s
disabled El cuadro aparece deshabilitado
form Recibe el identificador del formulario al que pertenece el botón
El cuadro se convierte en un cuadro de selección de múltiples valores. Es una opción
multiple
muy importante ya que este tipo de controles a veces es imprescindible
required HTML 5.EEs obligatorio al menos elegir una opción del cuadro.
Número de opciones visibles a la vez. Si elegimos 5, para ver la sexta habrá que usar
size
la barra de desplazamiento del contro..
[13.6.2]atributos del elemento option
atributo significado
atributo significado
disabled La opción aparece deshabilitada en el vuadro combinado
Versión de texto de la opción más corta. No funciona en Firefox ni en Internet
label
Explorer anterior a la versión 7
selected Opción seleccionada por defecto
Valor que se envía al servicio que recibe los datos del formulario cuando se elige esta
value
opción
[13.7] cuadro de texto multilínea
La etiqueta textarea permite coloca un cuadro de texto de varias líneas para que el usuario
puede introducir un texto largo. El atributo rows permite indicar la altura en líneas de texto del
cuadro y el atributo cols, la anchura en caracteres (los demás atributos son como los de la
etiqueta input type=”text”.
Ejemplo:
Entre la etiqueta textarea se puede colocar texto que aparecerá inicialmente dentro del cuadro.
[13.7.1]atributos del elemento textarea
atributo significado
name Nombre del control
id Identificador del control
atributo significado
value Especifica un contenido para el control
autofocus HTML5. El control adquiere el foco en cuanto carga la página
cols Anchura del cuadro en caracteres
disabled El cuadro aparece deshabilitado
form Recibe el identificador del formulario al que pertenece el botón
maxlength Máximo número de caracteres permitidos en el cuadro
HTML 5. Coloca un texto inicial en el cuadro que se va en cuanto el cuadro obtiene
placeholder el foco del usuario (el foco se obtiene, por ejemplo, haciendo clic en el control de
texto). Se usa como texto de ayuda.
readonly El cuadro de texto es de solo lectura (no se puede cambiar su contenido)
required HTML 5.EEs obligatorio al menos elegir una opción del cuadro.
Número de filas visibles en el cuadro (si se rellenan más, se accederá a ellas con
rows
una barra de desplazamiento).
Forma de encapsular el texto cuando se envían los datos al servicio de destino.
wrap
Puede ser soft o hard.
[13.8] agrupación de controles, fieldset
La etiqueta fieldset permite agrupar controles para que visualmente sea más cómodo el relleno
de los controles. Visualmente los controles aparecerán recuadrados y se suele utilizar una
etiqueta inmediatamente interior a fieldset que es legend que contiene el texto que encabezará
al grupo de controles.
Ejemplo:
El usuario puede elegir cualquiera de las opciones de la lista de sugerencias, pero también puede
escribir lo que quiera en el cuadro.
Sin embargo esta forma no funciona en algunos navegadores (solo en los modernos y Safari no
ha incorporado esta etiqueta), por ello se suele usar un truco que consiste en meter un
elemento select dentro del elemento
datalist. Los navegadores modernos ignorarán la etiqueta select y los viejos el datalist.
atributo uso
autofocu
El control obtendrá el foco cuando el formulario se cargue
s
challenge Es una cadena de desafío que se presentará junto con la clave pública
disable Deshabilita el control
Permite especificar el identificar del formulario al que se asociará esté control (de
form
uso obligado en caso de estar fuera de una etiqueta form)
keytype Indica el tipo de cifrado. Puede ser: rsa, dsa o ec. Por defecto cifra mediante RSA.
name Nombre del control
[13.11.2]control de tipo output
La etiqueta output (no disponible en Internet Explorer ni en Safari) se utiliza para mostrar
resultados procedentes de cálculos sobre otros controles del formulario. El ejemplo siguiente
consigue mostrar la suma de los dos números que el usuario indique en sendos cuadros
numéricos, esta suma se muestra rápidamente gracias al lenguaje JavaScript:
<form oninput=”res.value=parseInt(n1.value)+parseInt(n1.value)”>
<input type=”number” id=”n1” name=”n1” value=”0”>
+<input type=”number” id=”n2” name=”n2” value=”0”>
=<output name=”total” for=”n1 n2” id=”total”></output>
</form>
Resultado del código:
El atributo for, especifica el nombre de los controles que afectan al resultado de output; en ese
atributo cada identificador se separa con espacios.
El valor y el nombre de los elementos output no se envían como los demás datos del formulario,
solo sirve para ver el resultado en el página. No es obligatorio su uso, pero da un sentido claro a
la función del contenido.
[13.11.3]barras de resultados
barras de medida, elemento meter
Se trata de un tipo de barra que sirven para indicar de forma gráfica un determinado valor
fracción o parte de algo. El elemento meter, que no funciona en Internet Explorer, es el que
permite este uso.
Atributos:
atributo significado
max Máximo valor del rango, ese será el valor relacionado con el final de la barra
min Mínimo valor del rango, es el valor relacionado con el valor de la barra.
Valor más alto a alcanzar (meta). Por debajo de este valor, el color de la barra se
high
muestra de color amarillo (aún no hemos alcanzado el valor a alcanzar)
Valor más bajo en el rango de la barra de progreso. Por debajo de este valor, la barra
low
se muestra roja (puesto que no hemos alcanzado el mínimo)
Valor actual de la barra. La barra se colorea desde el inicio hasta llegar a la posición
value
que le correspondería a este valor en la barra.
optimu Valor marcado como óptimo en la barra de progreso. No provoca ningún efecto
m visual en la actualidad.
Identificador del formulario al que pertenece este control (salvo que el control esté
form
dentro de una etiqueta form)
Ejemplo:
Solo mediante JavaScript se obtiene realmente partido de este control (al poder variar y
capturar sus valores de forma dinámica). En todo caso, es una forma muy gráfica de presentar
ciertos datos.
barra de progreso, elemento progress
La idea es la misma que en el caso anterior, pero ahora se usa para mostrar información sobre
el grado de cumplimiento de una determinada tarea. Esta barra es más sencilla de configurar.
Usa estos atributos:
atributo significado
max Máximo valor. Se toma este valor como la meta a alcanzar
Valor actual. Desde el inicio hasta el valor se pintará en la barra de
value
progreso
Ejemplo de barra tipo progress: