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 = htmlspecialchars($errors['name']) ?> = isset($errors['email']) ? "$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 →