Introducción a los formularios en PHP

Intermedio
PHP
PHP
Actualizado: 17/02/2025

¡Desbloquea el curso de PHP completo!

IA
Ejercicios
Certificado
Entrar

Mira la lección en vídeo

Accede al vídeo completo de esta lección y a más contenido exclusivo con el Plan Plus.

Desbloquear Plan Plus

Flujo básico de un formulario (HTML → Envío de datos → Procesamiento en PHP)

Los formularios son la principal forma de recopilar datos del usuario en aplicaciones web. Entender el flujo básico desde el HTML hasta el procesamiento en PHP es fundamental para desarrollar aplicaciones dinámicas.

Un formulario en HTML se define utilizando la etiqueta <form>, donde se incluyen los campos que el usuario deberá completar. Por ejemplo:

<!DOCTYPE html>
<html>

<head>
    <title>Formulario de ejemplo</title>
</head>

<body>
    <form action="procesar.php" method="post">
        <label for="nombre">Nombre:</label>
        <input type="text" id="nombre" name="nombre">
        <br>
        <label for="correo">Correo electrónico:</label>
        <input type="email" id="correo" name="correo">
        <br>
        <input type="submit" value="Enviar">
    </form>
</body>

</html>

En este ejemplo, se presenta un sencillo formulario donde el usuario puede introducir su nombre y correo electrónico. Al hacer clic en el botón Enviar, los datos se enviarán al servidor para su procesamiento.

El flujo de envío de datos es el siguiente:

  1. Presentación del formulario al usuario: El navegador renderiza el formulario y espera la interacción del usuario.
  2. Entrada de datos por parte del usuario: El usuario rellena los campos del formulario con la información solicitada.
  3. Envío del formulario: Al pulsar el botón de envío, el navegador recopila los datos y los envía al servidor especificado en el atributo action.
  4. Procesamiento en PHP: El servidor recibe los datos y ejecuta el script PHP encargado de manejar la información.

El script PHP que procesará los datos podría ser:

<?php
// procesar.php

$nombre = $_POST['nombre'];
$correo = $_POST['correo'];

echo "Nombre recibido: " . $nombre . "\n";
echo "Correo electrónico recibido: " . $correo . "\n";

En este código, se accede a los datos enviados mediante el arreglo superglobal $_POST. Los valores de los campos del formulario están disponibles bajo las claves correspondientes a los atributos name de cada campo.

Es importante destacar que el servidor web integrado de PHP se puede utilizar para probar este flujo sin necesidad de configuraciones adicionales. Para iniciar el servidor, se ejecuta:

php -S localhost:8000

Colocando los archivos index.html y procesar.php en el mismo directorio, se podrá acceder al formulario y probar el procesamiento de datos.

Durante el procesamiento, es esencial manejar adecuadamente los datos recibidos. Aunque en este ejemplo simplemente se muestran, en aplicaciones reales se debe considerar la validación y sanitización de la información para garantizar la seguridad y integridad de la aplicación.

El flujo básico puede resumirse en estos pasos clave:

  • El navegador muestra el formulario y envía los datos al servidor.
  • El servidor recibe la solicitud y pasa los datos al script PHP.
  • El script PHP procesa los datos, ejecutando la lógica necesaria (como almacenarlos en una base de datos, enviar correos, etc.).
  • El servidor puede devolver una respuesta al navegador, como una página de confirmación o redirigir al usuario a otra sección.

Entender este flujo es crucial para desarrollar aplicaciones web interactivas. Los formularios son el puente entre el usuario y el servidor, permitiendo la interacción dinámica y personalizada en función de la información proporcionada.

Métodos de envío: GET vs POST

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

En los formularios HTML, el atributo method define cómo se envían los datos al servidor. Los dos métodos más comunes son GET y POST, y cada uno tiene características específicas que afectan la forma en que los datos se transmiten y cómo deben ser manejados en PHP.

Método GET

El método GET envía los datos del formulario adjuntándolos a la URL en forma de parámetros de consulta. Esto significa que la información es visible en la barra de direcciones del navegador y queda registrada en historiales y logs.

Ejemplo de un formulario utilizando el método GET:

<!DOCTYPE html>
<html>

<head>
    <title>Formulario GET</title>
</head>

<body>
    <form action="procesar_get.php" method="get">
        <label for="buscar">Buscar:</label>
        <input type="text" id="buscar" name="buscar">
        <input type="submit" value="Buscar">
    </form>
</body>

</html>

Al enviar este formulario con el término "PHP", la URL resultante será:

http://localhost:8000/procesar_get.php?buscar=PHP

En PHP, se accede a los datos enviados mediante el arreglo superglobal $_GET:

<?php
// procesar_get.php

$termino = $_GET['buscar'];

echo "Término de búsqueda: " . $termino . "\n";

Ventajas del método GET:

  • Permite marcar y compartir URLs específicas.
  • Los datos pueden ser cacheados por el navegador, mejorando la eficiencia en ciertas aplicaciones.
  • Es adecuado para acciones que no modifican datos en el servidor, siguiendo el principio de idempotencia.

Limitaciones del método GET:

  • Los datos son visibles en la URL, lo que puede comprometer la privacidad.
  • Existe un límite de longitud en las URLs, restringiendo la cantidad de información que se puede enviar.
  • No es adecuado para enviar información sensible, como contraseñas o datos personales.

Método POST

El método POST envía los datos en el cuerpo de la solicitud HTTP, ocultándolos de la URL. Esto permite transmitir información de manera más segura y sin restricciones significativas de tamaño.

Ejemplo de un formulario utilizando el método POST:

<!DOCTYPE html>
<html>

<head>
    <title>Formulario POST</title>
</head>

<body>
    <form action="procesar_post.php" method="post">
        <label for="usuario">Usuario:</label>
        <input type="text" id="usuario" name="usuario">
        <br>
        <label for="mensaje">Mensaje:</label>
        <textarea id="mensaje" name="mensaje"></textarea>
        <br>
        <input type="submit" value="Enviar">
    </form>
</body>

</html>

En el servidor, se accede a los datos utilizando el arreglo superglobal $_POST:

<?php
// procesar_post.php

$usuario = $_POST['usuario'];
$mensaje = $_POST['mensaje'];

echo "Mensaje de " . $usuario . ":\n";
echo $mensaje . "\n";

Ventajas del método POST:

  • Mayor seguridad al no mostrar datos en la URL.
  • Permite enviar grandes cantidades de datos, incluyendo archivos y contenido binario.
  • Es adecuado para operaciones que modifican el estado del servidor, como registros o actualizaciones.

Consideraciones del método POST:

  • Las solicitudes no son cacheadas ni registradas en historiales, lo que puede dificultar ciertas operaciones de depuración.
  • Los datos no se pueden marcar ni compartir mediante URLs.
  • Aunque ofrece mayor privacidad, no cifra los datos por sí mismo; es necesario utilizar HTTPS para garantizar la seguridad en la transmisión.

Comparación entre GET y POST

| Característica | GET | POST | | --- | --- | --- | | Visibilidad de datos | Datos visibles en la URL | Datos ocultos en el cuerpo de la solicitud | | Cantidad de datos | Limitada por la longitud de la URL | Sin límite significativo (dependiente del servidor) | | Cacheable | Sí | No | | Historial y marcadores | Guardado en historial y marcadores | No se guarda | | Uso típico | Consultas, búsquedas, recuperaciones | Envío de formularios, actualización de datos | | Seguridad | Menos seguro (datos visibles) | Más seguro (datos no visibles en la URL) |

Elección del método adecuado

La elección entre GET y POST depende del tipo de operación y de las necesidades de la aplicación:

Usar GET cuando:

Se realicen operaciones de lectura que no modifiquen el estado del servidor.

Se desee que las solicitudes puedan ser cacheadas o marcadas.

La cantidad de datos a enviar sea pequeña y de carácter no sensible.

Usar POST cuando:

Se envíen datos sensibles o que deban permanecer privados.

La operación implique una modificación en el servidor (creación, actualización o eliminación de recursos).

Se necesite enviar una cantidad grande de datos o archivos.

Acceso a los datos en PHP

En PHP, se utilizan arreglos superglobales para acceder a los datos de los formularios:

  • $_GET: Contiene los datos enviados mediante el método GET.
  • $_POST: Contiene los datos enviados mediante el método POST.
  • $_REQUEST: Incluye el contenido de $_GET, $_POST y $_COOKIE, aunque su uso no es recomendado por motivos de seguridad y claridad en el código.

Ejemplo de manejo de datos según el método:

<?php
// procesar.php

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $datos = $_POST;
    echo "Datos recibidos por POST:\n";
} else {
    $datos = $_GET;
    echo "Datos recibidos por GET:\n";
}

foreach ($datos as $clave => $valor) {
    echo $clave . ": " . $valor . "\n";
}

Este código utiliza la variable $_SERVER['REQUEST_METHOD'] para determinar el método de la solicitud y procesa los datos en consecuencia.

  • Siempre validar y sanitizar los datos recibidos, independientemente del método utilizado, para prevenir inyecciones y otras vulnerabilidades.
  • No confiar en que el método oculta los datos; utilizar conexiones seguras (HTTPS) para proteger la información durante la transmisión.
  • Evitar exponer información sensible en la URL, ya que puede ser registrada en logs y caches fuera del control de la aplicación.

Concepto de "action" y "method"

En los formularios HTML, los atributos action y method juegan un papel crucial en la forma en que los datos del usuario son enviados y procesados por el servidor. Comprender su funcionamiento es esencial para diseñar formularios efectivos y seguros en PHP.

El atributo action define la URL a la que se enviarán los datos del formulario para su procesamiento. Si se omite este atributo o se deja vacío, el formulario enviará los datos a la misma página en la que se encuentra. Esto es útil cuando se desea manejar tanto la presentación como el procesamiento en un solo archivo PHP.

Ejemplo de un formulario con el atributo action definido:

<form action="procesar.php" method="post">
    <label for="usuario">Usuario:</label>
    <input type="text" id="usuario" name="usuario">
    <input type="submit" value="Enviar">
</form>

En este caso, al hacer clic en Enviar, los datos se enviarán al archivo procesar.php, donde se realizará el procesamiento con PHP.

Si se desea que el formulario envíe los datos a la misma página, se puede dejar el atributo action vacío o no incluirlo:

<form method="post">
    <!-- campos del formulario -->
</form>

Al utilizar esta práctica, es común que el script PHP verifique si se han enviado datos y actúe en consecuencia:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Procesar los datos del formulario
    $usuario = $_POST['usuario'];
    echo "Bienvenido, " . $usuario . "\n";
}
?>

El atributo method especifica el método HTTP que se utilizará para enviar los datos. Los valores más comunes son get y post, y determinan cómo se transmiten los datos al servidor. Aunque ya se han detallado las diferencias entre GET y POST, es importante destacar que el valor del atributo method debe ser coherente con el procesamiento esperado.

Es importante considerar que el valor por defecto del atributo method es get. Por lo tanto, si no se especifica, el formulario enviará los datos mediante el método GET:

<form action="buscar.php">
    <!-- campos del formulario -->
</form>

En algunos casos, es posible utilizar métodos HTTP menos comunes, como put o delete, aunque su soporte en navegadores y servidores puede ser limitado. Para enviar una solicitud con un método distinto, se suelen utilizar técnicas como formularios ocultos o bibliotecas de JavaScript que manipulan la solicitud.

Un ejemplo práctico de un formulario que procesa los datos en la misma página utilizando action vacío y el método post:

<!DOCTYPE html>
<html>

<head>
    <title>Formulario de Login</title>
</head>

<body>
    <?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $usuario = $_POST['usuario'];
        $contrasena = $_POST['contrasena'];
        // Validar credenciales (ejemplo simplificado)
        if ($usuario === 'admin' && $contrasena === '1234') {
            echo "Acceso concedido\n";
        } else {
            echo "Credenciales incorrectas\n";
        }
    }
    ?>
    <form method="post">
        <label for="usuario">Usuario:</label>
        <input type="text" id="usuario" name="usuario">
        <br>
        <label for="contrasena">Contraseña:</label>
        <input type="password" id="contrasena" name="contrasena">
        <br>
        <input type="submit" value="Iniciar Sesión">
    </form>
</body>

</html>

En este ejemplo, el formulario envía los datos al mismo archivo, donde se procesa la autenticación del usuario. Utilizar action vacío facilita la gestión de la lógica en un solo lugar y puede simplificar el manejo de errores y la retroalimentación al usuario.

Además, es posible utilizar URLs relativas o absolutas en el atributo action. Una URL relativa se basa en la ubicación actual del documento, mientras que una URL absoluta especifica la ruta completa:

<!-- URL relativa -->
<form action="procesar.php" method="post">
    <!-- campos del formulario -->
</form>

<!-- URL absoluta -->
<form action="https://www.ejemplo.com/procesar.php" method="post">
    <!-- campos del formulario -->
</form>

Al utilizar URLs absolutas, se puede enviar datos a un dominio diferente, aunque esto puede generar problemas de seguridad y compatibilidad debido al CORS (Cross-Origin Resource Sharing).

Consideraciones adicionales:

  • Si se desea enviar archivos mediante un formulario, es necesario incluir el atributo enctype="multipart/form-data" en la etiqueta <form>. Esto indica al navegador cómo codificar los datos antes de enviarlos.
<form action="subir_archivo.php" method="post" enctype="multipart/form-data">
    <!-- campos del formulario -->
</form>
  • Es recomendable utilizar métodos seguros y validar siempre los datos en el servidor, independientemente de los atributos action y method, para garantizar la seguridad de la aplicación.

En resumen, los atributos action y method son fundamentales para controlar el flujo de datos entre el formulario HTML y el script PHP que los procesa. Una correcta utilización de estos atributos permite crear formularios eficientes, seguros y fáciles de mantener.

Aprendizajes de esta lección de PHP

  • Comprender la estructura básica de un formulario HTML
  • Conocer el flujo de datos desde el navegador hasta el servidor
  • Diferenciar entre métodos de envío GET y POST
  • Implementar procesamiento de datos en PHP
  • Integrar formularios y scripts PHP para crear aplicaciones dinámicas

Completa este curso de PHP y certifícate

Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración