En este tema, aprenderás cómo manejar datos enviados desde formularios HTML utilizando PHP. Los formularios son una parte esencial de muchas aplicaciones web, ya que permiten a los usuarios enviar datos al servidor para su procesamiento.

Conceptos Clave

  1. Formularios HTML: Estructura básica de un formulario en HTML.
  2. Métodos de Envío: GET y POST.
  3. Superglobales: $_GET y $_POST.
  4. Validación Básica: Comprobación de datos enviados.
  5. Seguridad: Prevención de ataques comunes como la inyección de código.

  1. Formularios HTML

Un formulario HTML básico puede verse así:

<form action="process_form.php" method="post">
    <label for="name">Nombre:</label>
    <input type="text" id="name" name="name">
    <label for="email">Correo Electrónico:</label>
    <input type="email" id="email" name="email">
    <input type="submit" value="Enviar">
</form>

Explicación:

  • action: Especifica la URL a la que se enviarán los datos del formulario.
  • method: Define el método de envío (GET o POST).
  • input: Campos de entrada para el usuario.

  1. Métodos de Envío

GET

  • Los datos se envían como parte de la URL.
  • No es seguro para enviar información sensible.
  • Ejemplo de URL: process_form.php?name=John&[email protected]

POST

  • Los datos se envían en el cuerpo de la solicitud HTTP.
  • Es más seguro que GET para enviar información sensible.
  • No se muestra en la URL.

  1. Superglobales

PHP proporciona superglobales para acceder a los datos enviados por formularios.

$_GET

  • Contiene datos enviados mediante el método GET.
  • Ejemplo: $_GET['name']

$_POST

  • Contiene datos enviados mediante el método POST.
  • Ejemplo: $_POST['name']

  1. Validación Básica

Es importante validar los datos recibidos para asegurarse de que son correctos y seguros.

Ejemplo de Validación

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = htmlspecialchars($_POST['name']);
    $email = htmlspecialchars($_POST['email']);

    if (empty($name) || empty($email)) {
        echo "Todos los campos son obligatorios.";
    } else {
        echo "Nombre: " . $name . "<br>";
        echo "Correo Electrónico: " . $email;
    }
}

Explicación:

  • $_SERVER["REQUEST_METHOD"]: Comprueba el método de la solicitud.
  • htmlspecialchars(): Convierte caracteres especiales en entidades HTML para prevenir inyección de código.
  • empty(): Comprueba si una variable está vacía.

  1. Seguridad

Prevención de Inyección de Código

Utiliza htmlspecialchars() para convertir caracteres especiales en entidades HTML.

Ejemplo:

$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);

Prevención de Ataques CSRF

Utiliza tokens CSRF para asegurar que las solicitudes provienen de usuarios legítimos.

Ejemplo de Token CSRF:

session_start();
$token = bin2hex(random_bytes(32));
$_SESSION['token'] = $token;

En el formulario HTML:

<input type="hidden" name="token" value="<?php echo $token; ?>">

En el procesamiento del formulario:

if ($_POST['token'] !== $_SESSION['token']) {
    die("CSRF token validation failed");
}

Ejercicio Práctico

Ejercicio 1: Crear un Formulario de Contacto

  1. Crea un archivo HTML con un formulario que tenga campos para nombre, correo electrónico y mensaje.
  2. Crea un archivo PHP que procese los datos del formulario y los muestre en la pantalla.
  3. Asegúrate de validar los datos y utilizar htmlspecialchars() para prevenir inyección de código.

Solución:

contact_form.html

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Formulario de Contacto</title>
</head>
<body>
    <form action="process_contact.php" method="post">
        <label for="name">Nombre:</label>
        <input type="text" id="name" name="name" required>
        <label for="email">Correo Electrónico:</label>
        <input type="email" id="email" name="email" required>
        <label for="message">Mensaje:</label>
        <textarea id="message" name="message" required></textarea>
        <input type="submit" value="Enviar">
    </form>
</body>
</html>

process_contact.php

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = htmlspecialchars($_POST['name']);
    $email = htmlspecialchars($_POST['email']);
    $message = htmlspecialchars($_POST['message']);

    if (empty($name) || empty($email) || empty($message)) {
        echo "Todos los campos son obligatorios.";
    } else {
        echo "Nombre: " . $name . "<br>";
        echo "Correo Electrónico: " . $email . "<br>";
        echo "Mensaje: " . $message;
    }
}
?>

Conclusión

En esta lección, has aprendido cómo manejar datos de formularios en PHP utilizando los métodos GET y POST, cómo validar y sanitizar los datos recibidos, y cómo implementar medidas de seguridad básicas. Estos conocimientos son fundamentales para cualquier aplicación web que requiera interacción del usuario.

En la próxima lección, profundizaremos en la Validación de Formularios, donde aprenderás técnicas avanzadas para asegurar que los datos ingresados por los usuarios sean correctos y seguros.

Curso de Programación en PHP

Módulo 1: Introducción a PHP

Módulo 2: Estructuras de Control

Módulo 3: Funciones

Módulo 4: Arrays

Módulo 5: Trabajando con Formularios

Módulo 6: Trabajando con Archivos

Módulo 7: Programación Orientada a Objetos (POO)

Módulo 8: Trabajando con Bases de Datos

Módulo 9: Técnicas Avanzadas de PHP

Módulo 10: Frameworks de PHP y Mejores Prácticas

Módulo 11: Proyecto: Construyendo una Aplicación Web

© Copyright 2024. Todos los derechos reservados