Formularios

Los formularios son un elemento presente en muchas páginas web que nos permiten introducir información que se envía al servidor para su procesamiento.

El procesamiento de la información en el servidor necesita que nuestra página web este programada con un lenguaje de programación web: PHP, Java, Python, …. Ya que como hemos dicho HTML5 no es un lenguaje de programación.

Estructura del formulario

Todos los elementos que nos vamos a encontrar en un formulario están dentro de la etiquete <form>. Esta etiqueta puede tener varios atributos de entre los que destacamos:

A continuación vamos a ver algunos de los elementos más frecuentes y a describir su estructura y funcionamiento.

Labels e Input

Normalmente para la recogida de información los formularios usando etiquetas input. Pero, para poder saber qué campos estamos rellenando una buena práctica (se puede de otras maneras menos elegantes) es poner una etiqueta label (etiqueta) delante de cada input para dar nombre y asociar ambas.

Un ejemplo sería:

<label for="nombre">Nombre:</label>
<input type="text" id="nombre" name="..." />

Aquí estamos asociando la etiqueta al campo usando los atributos for e id.

El campo que hemos usado para la recogida de información es un input. Existen muchos tipos que veremos con más detalle en el próximo apartado.

Tipos de Input en los formularios

La lista de tipos (type) de Inputs que podemos tener es muy larga. La podemos ver en la siguiente imagen:

tipos inputs

El que más usado el text que nos proporciona la manera más secilla de introducir texto.

Veamos algunos otros:

Es una agrupación de inputs que presenta opciones que queremos que sean excluyentes:

Un ejemplo sería:

<label for="genero">Sexo</label>
<input type="radio" name="genero" value="masculino" />Hombre<br />
<input type="radio" name="genero" value="fememino" checked />Mujer<br />

Para que sean excluyentes deben de tener el mismo valor para el atributo name y el type=”radio”

Es una agrupación de opciones que presenta opciones de las cuáles podemos elegir una o varias.

Un ejemplo sería:

    <label for="dispositivos">Dispositivos electrónicos</label><br />
    <input type="checkbox" name="dispositivos" value="pc" />PC<br />
    <input type="checkbox" name="dispositivos" value="table" />Tableta<br />
    <input type="checkbox" name="dispositivos" value="movil" />Móvil

Fijaros que para agruparlos deben de tener el mismo valor para name y el type=”checkbox”

Es una nueva forma en HTML5 de hacer una lista de valores posibles para un input.

Un ejemplo sería:

    <input list="editor">

    <datalist id="editor">
        <option value="Atom">
        <option value="NotePad++">
        <option value="VsCode">
        <option value="Sublime">
        <option value="Brackets">
    </datalist>

Con el atributo list indicamos la lista de opciones que vamos a tener y en la etiqueta **** metemos las **

Es importante destacar que podríamos meter otras opciones en el Input pero al usar esta estructura se nos ayuda a rellenarlo y a elegir la opción correcta.

Listas desplegables

Son elementos que también hemos visto muchas veces. Al hacer click sobre ellos nos muestran varias opciones de las que podremos escoger una o varias.

Para crear listas desplegables usaremos las etiquetas select como etiqueta padre y una etiqueta option para cada una de las opciones que tengamos en la lista desplegable. Si queremos agrupar esas opciones las meteremos a su vez dentro de una etiqueta optgroup.

Un ejemplo sería:


<select name="provincia">
    <optgroup label="Aragon">
        <option value="Z">Zaragoza</option>
        <option>Huesca</option>
        <option selected>Teruel</option>
    </optgroup>

</select>

Áreas de Texto

Son campos de formulario para meter texto largos. Tienen dos atributos interesantes.

Un ejemplo sería:

<textarea cols="10" rows="10">
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque voluptate corrupti ut earum, aliquam sint amet repellendus, vitae placeat repellat quis, ipsa qui. Velit placeat reiciendis tempore autem nostrum eaque?
</textarea>

Botones

La etiqueta button no creo que se necesario explicar para que sirve…Haz click!!!

El atributo más importante que tienen es type que puede tomar tres valores:

Agrupando atributos

Hay situaciones en las que los campos de los formularios por significado, por importancia o por cualquier razón, queremos que se muestren agrupados. Para estos casos tenemos la etiqueta fieldset, que tendrá anidada la etiqueta legend (una etiqueta que contiene el nombre del grupo y que se mostrará en la parte de arriba) y los controles que queremos agrupar.

Un ejemplo sería:

<fieldset>
    <legend>Datos Personales</legend>
    <p>
        <label for="nombre">Nombre:</label>
        <input type="text" name="nombre" placeholder="Inserta Nombre" required />
    </p>
    <p>
        <label for="apellidos">Apellidos:</label>
        <input type="text" name="apellidos" value="Pérez" readonly />
    </p>

    <p>
        <label for="provincia">Provincia</label>
        <select name="provincia">
            <optgroup label="Aragon">
                <option value="Z">Zaragoza</option>
                <option>Huesca</option>
                <option selected>Teruel</option>
            </optgroup>

        </select>
    </p>

    <p>
        <input type="submit" value="Enviar" />
    </p>
</fieldset>

Atributos interesantes de los elementos de los formularios

Además existen una serie de atributos interesantes que podemos añadir a los controles o elementos de los formularios:

Envío de información al servidor usando formularios

Cada componete de un formulario HTML posee un nombre (etiqueta name al cual se le asigna un valor (etiqueta value que no siempre se pone), el cual se corresponde con lo que el usuario introduce en el componente.

Cuando se envían los datos del formulario (normalmente a través de un botón), se envían todos los nombres y valores de los controles del formulario. En el caso típico, un servicio de Internet recoge esta información y hace algo con ella.

html5

Veamos un ejemplo de formulario:

<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>
    <input type="submit" value="Enviar"/>
</form>

Envío de datos usando el método GET

Una petición HTTP usando el método GET, nos permite solicitar la respuesta de una URL determinada. En este método los datos se pasan en la propia URL. Para enviar el formulario usando el método GET, la etiqueta form sería:

<form action="servicio.php" method="get">

Al enviar el formulario usando el método GET cada par de nombre y valor de cada componente del formulario se envía usando la URL, por ejemplo con el formulario de ejemplo, la URL sería:

http://nombredominio/servicio.php??nombre=Jose&apellidos=Perez&sexo=hombre&...

Envío de datos usando el método POST

En muchas ocasiones es preferible mandar la información usando el método POST, para ello:

<form action="servicio.php" method="post">

Al enviar la información del formulario usando el método POST, la información que envíamos (nombre y valor de cada componente) se manda en el cuerpo de la petición HTTP por lo tanto no es visible en la URL.