← PHP EspañolChapter 09 of 13

Manejo de Formularios

## Objetivos de Aprendizaje - Comprender los métodos de envío de formularios - Trabajar con GET y POST - Procesar datos de formularios de forma segura - Validar entrada de formularios ## Formularios HTML ### Estructura Básica de Formulario ```html
``` ### Atributos de Formulario - `action`: URL para enviar datos - `method`: Método HTTP (GET o POST) - `enctype`: Tipo de codificación para subida de archivos ## GET vs POST ### Método GET ```php ``` Características: - Datos visibles en URL - Pueden marcarse como favoritos - Cacheados por navegadores - Tamaño limitado (~2000 caracteres) - No debe usarse para datos sensibles ### Método POST ```php ``` Características: - Datos no visibles en URL - No pueden marcarse como favoritos - No son cacheados - Sin límite de tamaño - Usado para datos sensibles y subida de archivos ## Procesando Datos de Formulario ### Script de Procesamiento Básico ```php ``` ### Formulario con Múltiples Entradas ```php trim($_POST['username'] ?? ''), 'email' => trim($_POST['email'] ?? ''), 'password' => $_POST['password'] ?? '', 'confirm' => $_POST['confirm'] ?? '', 'agree' => isset($_POST['agree']) ]; // Validate if ($data['password'] !== $data['confirm']) { echo "Passwords do not match."; } if (!$data['agree']) { echo "You must agree to terms."; } } ?> ``` ## Variables Superglobales ### $_GET ```php ``` ### $_POST ```php ``` ### $_REQUEST ```php ``` ### $_SERVER ```php ``` ## Filtrado de Entrada ### htmlspecialchars ```php alert("XSS")'; $safe = htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); // <script>alert("XSS")</script> echo $safe; // Safe to display ?> ``` ### Opciones de ENT_QUOTES ```php ``` ### strip_tags ```php Hello World!

'; strip_tags($input); //

Hello World!

strip_tags($input, ''); //

Hello World!

(allows ) // Better: htmlspecialchars for output, strip_tags for input ?> ``` ### trim() ```php ``` ## Funciones de Validación ### Verificación de Vacío ```php ``` ### Validación de Cadenas ```php ``` ### Sanitización ```php alert('xss')"; filter_var($str, FILTER_SANITIZE_STRING); // Removes tags // Integer sanitization $int = "42abc"; filter_var($int, FILTER_SANITIZE_NUMBER_INT); // "42" // Float sanitization $float = "3.14abc"; filter_var($float, FILTER_SANITIZE_NUMBER_FLOAT); // "3.14" ?> ``` ### Validación con Expresiones Regulares ```php ``` ## Ejemplo de Validación de Formulario ### Script de Validación Completo ```php ``` ### Mostrando Errores ```php $errors[email]" : '' ?> ``` ## Subida de Archivos ### Formulario HTML para Archivos ```html
``` ### Procesando Subida ```php 5 * 1024 * 1024) { echo "File too large"; } // Check type $allowed = ['application/pdf', 'application/msword']; if (!in_array($file['type'], $allowed)) { echo "Invalid file type"; } // Move uploaded file $destination = __DIR__ . '/uploads/' . basename($file['name']); if (move_uploaded_file($file['tmp_name'], $destination)) { echo "File uploaded successfully"; } } } ?> ``` ## Falsificación de Solicitud en Sitio Cruzado (CSRF) ### Token CSRF ```php ``` ```html
``` ### Validar Token CSRF ```php ``` ## Resumen - Los formularios usan `GET` (parámetros URL) o `POST` (cuerpo de solicitud) - `$_GET`, `$_POST`, `$_REQUEST` para acceder a datos del formulario - Siempre validar y sanear entrada del usuario - `htmlspecialchars()` previene ataques XSS - `trim()` elimina espacios en blanco - `empty()` e `isset()` para verificar valores - `filter_var()` para validación y sanitización - Usar tokens CSRF para prevenir falsificación de solicitudes entre sitios - La subida de archivos requiere `enctype="multipart/form-data"`

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →