PHP: Formularios

Descubre cómo aprender PHP enfocándote en la creación y gestión de formularios HTML. Conoce las mejores prácticas para capturar, validar y procesar datos de forma segura y organizada.

Aprende PHP GRATIS y certifícate

Los formularios son la puerta de entrada de datos en la mayoría de sitios y aplicaciones web. En PHP, su procesamiento es fundamental para interactuar con los usuarios, ya sea para registrarlos, almacenar información o realizar búsquedas. Conocer la forma correcta de gestionar formularios marca la diferencia en términos de seguridad y rendimiento.


Estructura básica de un formulario HTML

Antes de manejar datos en PHP, se crea un formulario mediante etiquetas HTML. Para procesar la información, se define el método POST o GET y la página de destino a la que se envían los datos:

<form action="procesar_formulario.php" method="POST">
  <label for="nombre">Nombre:</label>
  <input type="text" id="nombre" name="nombre" required>
  
  <label for="correo">Correo electrónico:</label>
  <input type="email" id="correo" name="correo" required>
  
  <button type="submit">Enviar</button>
</form>
  • action: URL del archivo que gestionará los datos (puede ser el mismo archivo o uno distinto).
  • method: Especifica el método de envío. POST envía los datos de forma no visible en la URL, mientras GET los expone como parámetros en la barra de direcciones.

Recepción de datos en PHP

Una vez enviado el formulario, el archivo apuntado por action puede acceder a los datos. En el caso de usar el método POST, se emplea la variable superglobal $_POST. Por ejemplo:

<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $nombre = $_POST["nombre"];
    $correo = $_POST["correo"];
    
    echo "Nombre recibido: " . $nombre . "<br>";
    echo "Correo recibido: " . $correo;
}
?>

Si el formulario empleara GET, se utilizaría $_GET["nombre"] o $_GET["correo"] en lugar de $_POST.


Validación y filtrado de datos

Para garantizar la seguridad y la integridad de la información, es fundamental validar y filtrar los datos recibidos:

  • Filtrar cadenas: Eliminar o transformar caracteres que puedan usarse para inyectar código.
  • Comprobar formatos: Verificar que los campos tengan el tipo de dato adecuado (por ejemplo, direcciones de correo o números).
  • Evitar ataques XSS: Usar funciones como htmlspecialchars() cuando se muestra texto proveniente de usuarios.

Un ejemplo sencillo de validación de un campo de correo podría ser:

<?php
if (filter_var($correo, FILTER_VALIDATE_EMAIL)) {
    echo "Correo válido.";
} else {
    echo "Correo no válido.";
}
?>

Manejo de errores y retroalimentación al usuario

Al crear formularios de PHP, conviene proporcionar mensajes claros ante errores de validación. Una estrategia práctica es mostrar los mensajes cerca del campo que ocasiona el problema. Para ello, se pueden usar banderas o variables que indiquen el resultado de la verificación:

<?php
$errores = [];

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    if (empty($_POST["nombre"])) {
        $errores[] = "El campo nombre no puede estar vacío.";
    }
    
    if (!filter_var($_POST["correo"], FILTER_VALIDATE_EMAIL)) {
        $errores[] = "El correo no tiene un formato válido.";
    }

    if (count($errores) === 0) {
        // Procesar datos si no hay errores
        echo "Datos recibidos correctamente.";
    }
}
?>

En la parte del formulario, se pueden imprimir estos errores en pantalla para guiar al usuario.


Subida de archivos

Para manejar la subida de archivos, se añade el atributo enctype="multipart/form-data" al formulario y se emplea la superglobal $_FILES en PHP:

<form action="subir_archivo.php" method="POST" enctype="multipart/form-data">
  <label for="archivo">Selecciona un archivo:</label>
  <input type="file" id="archivo" name="archivo">
  <button type="submit">Subir</button>
</form>

En subir_archivo.php, se procesa así:

<?php
if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_FILES["archivo"])) {
    $nombreTemporal = $_FILES["archivo"]["tmp_name"];
    $nombreDestino = "uploads/" . $_FILES["archivo"]["name"];
    
    if (move_uploaded_file($nombreTemporal, $nombreDestino)) {
        echo "Archivo subido correctamente.";
    } else {
        echo "Error al subir el archivo.";
    }
}
?>

Se aconseja validar el tipo y tamaño de fichero para prevenir vulnerabilidades.


Buenas prácticas de seguridad

  1. Escapar y sanitizar datos de entrada para evitar inyecciones de código.
  2. Emplear tokens CSRF para proteger los formularios frente a ataques Cross-Site Request Forgery.
  3. Limitar el tamaño de los archivos subidos y controlar el tipo MIME.
  4. Hacer uso de funciones de validación nativas, como filter_var para correos, URLs o números enteros.

Recomendaciones finales

  • Estructura tu proyecto en diferentes archivos para separar la lógica de validación y el envío del formulario.
  • Prueba envíos con valores inesperados (campos vacíos, texto en campos numéricos, etc.) para anticipar errores.
  • Aprovecha editores como Visual Studio Code o PHPStorm para depurar y formatear el código, agilizando el desarrollo.
  • Mantén tus aplicaciones actualizadas, ya que las versiones recientes de PHP corrigen brechas de seguridad y ofrecen nuevas funciones.
Empezar curso de PHP

Lecciones de este módulo de PHP

Lecciones de programación del módulo Formularios del curso de PHP.