Lección 6: Formularios

Los formularios es la única manera de que el usuario nos transmita información, y tenemos un gran cantidad de tipos para recoger: textos, números, imágenes, checks

Para construir nuestro formulario necesitaremos la etiqueta <form> y dentro todos los <input>s que necesitemos.

<html>
    <body>
        <form>
            <?php
                var_dump($_REQUEST);
            ?>
            <input type="text" name="nombre">
            <input type="submit">
        </form>
    </body>
</html>

Utiliza var_dump($_REQUEST) para saber que variables te llegan de un formulario.

$_REQUEST es un array que contiene todas las variables que recibimos, lo cual nos simplifica a la hora de extraer cada elemento.

<html>
    <body>
        <?php if (isset($_REQUEST['nombre'])): ?>
            <p>¿De verdad te llamas <?php echo $_REQUEST['nombre']; ?>? Qué nombre más bonito.</p>
        <?php endif; ?>
        <form>
            <input type="text" name="nombre">
            <input type="submit">
        </form>
    </body>
</html>

La función isset() te indica si existe cualquier tipo de variable: local, global o dentro de un array.

Métodos de petición

Existe una gran cantidad de verbos HTTP, o métodos de petición, dentro del desarrollo web:

  • GET
  • POST
  • PUT
  • DELETE
  • HEAD
  • CONNECT
  • OPTIONS
  • TRACE
  • PATH

Todos ellos son como etiquetas que le damos a los datos para marcar su uso. Piensa en ellos como diferentes caminos para llegar al mismo sitio. Imagina que tienes que enviar 2 lámparas a una misma dirección y decides usar 2 compañias de mensajería diferentes: SEUR y CORREOS. Pero le avisas al destinatario que la lámpara que reciba por SEUR es para el salón y la otra tiene una bombilla rota que debe cambiar. Pasado el tiempo, cuando reciba los paquetes, tratará cada lámpara de forma especial. De esta manera puedes enviar varios datos en caminos diferentes para que el destinatario los use de forma distinta.

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo 'Llega algo por POST';
}

Método GET

Por defecto un formulario es enviado con el método, verbo, GET. Tiene una particularidad que no tiene el resto. Pongamos el siguiente código. Yo lo relleno con el nombre “Buda” y la edad “30”. A continuación pulso el botón de enviar.

<html>
    <body>
        <form method="get">
            <input type="text" name="nombre">
            <input type="number" name="edad">
            <input type="submit">
        </form>
    </body>
</html>

Si te fijas en la dirección, la URL, verás una ruta parecida a la siguiente.

http://localhost/?nombre=Buda&edad=30

GET nos permite ver en la barra del URL los datos dándonos la posibilidad de modificarlos.

Cualquier persona observadora podrá ver y modificar los datos. Ten mucho cuidado. Úsalo para información que no comprometa tu sitio: paginadores, mensajes, marcador de idioma…

5-1

Método POST

El método POST será invisible al ojo del usuario. Recomendable cuando modificamos variables o una base de datos.

<html>
    <body>
        <form method="post">
            <input type="text" name="nombre">
            <input type="number" name="edad">
            <input type="submit">
        </form>
    </body>
</html>

5-2 5-3

Para obtener una varaible get también dispones de $_GET['nombre'] y para post $_POST['nombre'], pero $_REQUEST['nombre'] simplifica al unificar cualquier elemento que recibamos.

Action

Si no indicas lo contrario, la información se enviará a la misma página donde estemos. Con action podremos decirle al formulario que lleve los datos a otra URL.

<html>
    <body>
        <form method="post" action="login.php">
            <input type="text" name="nombre">
            <input type="number" name="edad">
            <input type="submit">
        </form>
    </body>
</html>

Evitar que se borren los campos

Cada vez que pulsas en un submit la página se refresca (se realiza una petición) y con ello se reinicia el formulario. ¿Qué pasa si me he equivocado en algún campo? Se pierde como lágrimas en la lluvia. El usuario tendría que volver a rellenarlo. Un truco para solucionarlo sería comprobar si existe el dato, y si es así rellenar su value.

<html>
    <body>
        <form>
            <input type="text" placeholder="Nombre" name="nombre"<?php if (isset($_REQUEST['nombre']) && $_REQUEST['nombre'] != ''): ?> value="<?php echo $_REQUEST['nombre']; ?>"<?php endif; ?>>
            <input type="number" placeholder="Edad" name="edad"<?php if (isset($_REQUEST['edad']) && $_REQUEST['edad'] != ''): ?> value="<?php echo $_REQUEST['edad']; ?>"<?php endif; ?>>
            <input type="submit">
        </form>
    </body>
</html>

5-4 5-5 5-6 5-7 5-8