2.4 Formularios HTML y Procesamiento con PHP
2.4 Formularios HTML y Procesamiento con PHP
Enunciado general:
En esta sección aprenderemos cómo trabajar con formularios HTML y cómo procesar los datos recibidos en un servidor PHP. Los formularios son esenciales en el desarrollo de aplicaciones web interactivas, ya que permiten a los usuarios enviar información al servidor. Veremos los métodos de envío de datos (GET y POST), cómo validarlos y sanitizarlos para asegurar que la información que recibimos es correcta y segura. Al final de este tema, serás capaz de crear formularios HTML y procesar correctamente sus datos utilizando PHP.
Objetivos del punto 2.4:
- Método GET vs POST: Comprenderemos las diferencias entre estos dos métodos y cuándo usarlos en nuestros formularios.
- Validación básica de entradas: Implementaremos técnicas para asegurarnos de que los datos proporcionados por los usuarios son correctos.
- Uso de
$_GET,$_POST,$_REQUEST: Aprenderemos a acceder a los datos enviados desde los formularios. - Sanitización de datos: Veremos cómo limpiar los datos recibidos para evitar riesgos de seguridad, como inyección de código.
- Ejercicios prácticos: Crearemos formularios comunes, como un formulario de contacto y un formulario de acceso, con su respectivo procesamiento en PHP.
1. Método GET vs POST
Enunciado:
Existen dos métodos principales para enviar datos a través de un formulario HTML: GET y POST. Cada uno tiene sus características y casos de uso, y entender sus diferencias es esencial para saber cuándo usarlos.
-
GET: Los datos del formulario se envían como parte de la URL. Es adecuado para solicitudes que no requieren seguridad, como búsquedas. Tiene un límite en el tamaño de los datos que se pueden enviar, ya que los datos forman parte de la URL.
-
POST: Los datos del formulario se envían en el cuerpo de la solicitud HTTP. Es adecuado para formularios que envían información sensible (como contraseñas) o grandes volúmenes de datos.
Uso en HTML:
2. Validación básica de entradas en PHP
PHP ofrece una serie de filtros muy útiles para validar y sanitizar datos recibidos de formularios. El filtro más utilizado es FILTER_VALIDATE_EMAIL, que se usa para validar una dirección de correo electrónico, pero hay muchos más filtros disponibles que pueden validarse para distintos tipos de datos.
Tabla de filtros disponibles en PHP
| Filtro | Tipo de Validación | Descripción | Formato del campo para pasar el filtro | ¿Usa expresiones regulares? |
|---|---|---|---|---|
FILTER_VALIDATE_EMAIL |
Validación de correo | Verifica si el valor es una dirección de correo electrónico válida. | Una dirección de correo electrónico válida (ej. usuario@dominio.com) |
Sí |
FILTER_VALIDATE_URL |
Validación de URL | Verifica si el valor es una URL válida. | Una URL válida (ej. http://www.ejemplo.com) |
Sí |
FILTER_VALIDATE_IP |
Validación de IP | Verifica si el valor es una dirección IP válida. | Una dirección IP válida (IPv4 o IPv6) | Sí |
FILTER_VALIDATE_INT |
Validación de entero | Verifica si el valor es un número entero. | Un número entero (ej. 123) |
No |
FILTER_VALIDATE_BOOLEAN |
Validación de booleano | Verifica si el valor es un valor booleano (1, 0, "1", "0", "true", "false"). | "true", "false", "1", "0" | No |
FILTER_VALIDATE_FLOAT |
Validación de flotante | Verifica si el valor es un número flotante. | Un número flotante (ej. 10.5) |
No |
FILTER_VALIDATE_REGEXP |
Validación de expresión regular | Permite validar usando una expresión regular definida por el usuario. | Cualquier valor que cumpla la expresión regular | Sí |
FILTER_VALIDATE_URL |
Validación de URL | Verifica si el valor es una URL válida con formato adecuado. | Una URL válida (ej. http://www.example.com) |
Sí |
FILTER_SANITIZE_EMAIL |
Sanitización de correo | Elimina todos los caracteres no permitidos en una dirección de correo electrónico. | Un correo electrónico (ej. user@example.com) |
No |
FILTER_SANITIZE_URL |
Sanitización de URL | Elimina todos los caracteres no permitidos en una URL. | Una URL válida. (ej. http://example.com) |
No |
FILTER_SANITIZE_STRING |
Sanitización de texto | Elimina las etiquetas HTML y PHP de un string. | Un texto sin etiquetas HTML o PHP | No |
FILTER_SANITIZE_NUMBER_INT |
Sanitización de enteros | Elimina todos los caracteres que no sean números enteros. | Números enteros (ej. 123456) |
No |
FILTER_SANITIZE_NUMBER_FLOAT |
Sanitización de flotantes | Elimina todos los caracteres que no sean números flotantes. | Números flotantes (ej. 123.45) |
No |
Explicación de algunos filtros:
-
FILTER_VALIDATE_EMAIL: Este filtro verifica si el valor recibido es una dirección de correo electrónico válida. Para ser válida, la dirección debe tener el formato adecuado, comousuario@dominio.com. -
FILTER_VALIDATE_URL: Este filtro valida una URL. Para pasar este filtro, la URL debe comenzar conhttp://ohttps://y debe seguir el formato adecuado de una URL. -
FILTER_VALIDATE_IP: Verifica que el valor proporcionado sea una dirección IP válida. Puede ser una dirección IPv4 (ej.192.168.1.1) o una IPv6 (ej.2001:0db8:85a3:0000:0000:8a2e:0370:7334). -
FILTER_VALIDATE_INT: Este filtro valida si el valor recibido es un número entero. Para ser válido, debe ser un número sin decimales (ej.123o-500). -
FILTER_VALIDATE_BOOLEAN: El filtro booleano permite validar si el valor es uno de los valores aceptados como verdadero o falso, como"true","false","1","0", etc. -
FILTER_VALIDATE_REGEXP: Este filtro utiliza expresiones regulares (regex) para validar el valor ingresado. Puedes proporcionar tu propia expresión regular para definir los criterios que deben cumplir los datos.
Ejemplo práctico de uso de filtros en PHP:
A continuación, te presento ejemplos de cómo usar algunos de estos filtros para validar y sanitizar datos de formularios:
Sanitización de datos:
Aparte de la validación, también es muy importante sanitizar los datos para eliminar cualquier carácter no deseado o potencialmente peligroso (como los tags HTML). A continuación, verás un ejemplo de cómo sanitizar los datos recibidos.
Conclusión
PHP ofrece una amplia gama de filtros de validación y sanitización para asegurarse de que los datos que los usuarios envían a través de formularios son válidos y seguros. Es fundamental que los desarrolladores comprendan estos filtros y los apliquen correctamente para proteger las aplicaciones web de entradas maliciosas o incorrectas.
En este punto, hemos cubierto:
- Diferentes filtros de validación que pueden usarse para validar direcciones de correo, URL, IPs, enteros, y más.
- La importancia de sanitizar los datos antes de utilizarlos, especialmente en aplicaciones web, para evitar ataques de inyección o errores de formato.
3. Uso de $_GET, $_POST, $_REQUEST
Enunciado:
En PHP, los datos enviados a través de un formulario HTML se pueden acceder usando las superglobales $_GET o $_POST. Dependiendo del método de envío elegido (GET o POST), PHP llenará estas superglobales con los datos correspondientes.
-
$_GET: Utilizado cuando el formulario usa el método GET. Los datos se incluyen en la URL de la solicitud. -
$_POST: Utilizado cuando el formulario usa el método POST. Los datos se envían en el cuerpo de la solicitud HTTP. -
$_REQUEST: Contiene los datos de $_GET, $_POST y $_COOKIE. Es una forma general de acceder a los datos, pero no es la más segura.
Ejemplo de uso:
4. Sanitización de datos
La sanitización de datos es crucial para proteger las aplicaciones web de ataques como la inyección de código. Sanitizar significa limpiar los datos para que no contengan código malicioso, especialmente cuando estos se van a mostrar en la página web o se van a usar en consultas de bases de datos.
En PHP, puedes usar funciones como filter_var() para limpiar datos antes de utilizarlos.
Ejemplo de sanitización:
5. Ejercicios prácticos
Formulario de contacto
Enunciado: Crea un formulario de contacto con los siguientes campos: Nombre, Email, y Mensaje. Valida que el nombre no esté vacío, que el email sea válido y que el mensaje tenga al menos 10 caracteres.
Solución
Formulario de acceso
Enunciado: Crea un formulario de acceso con los siguientes campos: Usuario y Contraseña. Validar que el usuario no esté vacío y que la contraseña tenga al menos 6 caracteres.
Solución
| Formulario de acceso | |
|---|---|
```php linenums="1" title="Procesamiento del formulario de acceso"> <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $usuario = $_POST['usuario']; $contrasena = $_POST['contrasena'];
// Validación
if (empty($usuario)) {
echo "El usuario es obligatorio.";
} elseif (strlen($contrasena) < 6) {
echo "La contraseña debe tener al menos 6 caracteres.";
} else {
echo "Acceso permitido.";
}
} ?> ```
6. Ejercicio completo: Validación de Datos en el Servidor con PHP
En este ejercicio, vamos a trabajar con un formulario HTML que pedirá los siguientes campos:
- Nombre (de 4 a 50 caracteres)
- Fecha de nacimiento
- Correo electrónico (con validación del formato de correo)
- Confirmación de correo (debe coincidir con el correo electrónico)
- DNI (validación del formato español)
- Teléfono (9 dígitos numéricos)
- Contraseña (con validación de formato)
- Confirmación de la contraseña (debe coincidir con la contraseña introducida)
Requisitos:
- El formulario NO tendrá validaciones HTML, solo en PHP.
- Todos los campos son obligatorios.
- La sanitización de los datos debe aplicarse a todos los campos antes de procesarlos.
Objetivo del ejercicio:
- Mostrar el formulario: La primera vez que se cargue la página, se deberá mostrar el formulario HTML vacío.
- Validación de datos: Cuando el formulario sea enviado, se validarán los datos introducidos. Si hay errores, se mostrará un div rojo sobre el formulario que contenga los mensajes de error para cada campo.
- Repetir el proceso hasta que los datos sean válidos: Si algún campo tiene un error, el formulario se volverá a mostrar con los datos introducidos previamente (excepto las contraseñas), y los errores serán indicados en rojo.
- Confirmación de éxito: Cuando todos los datos sean válidos, se mostrará un mensaje indicando que los datos han sido procesados correctamente.
Campos y Validaciones:
-
Nombre:
- Longitud mínima: 4 caracteres.
- Longitud máxima: 50 caracteres.
- Es obligatorio.
-
Fecha de nacimiento:
- Debe tener el formato
YYYY-MM-DD. - Es obligatorio.
- Debe tener el formato
-
Correo electrónico:
- Debe tener formato de correo electrónico válido.
- Es obligatorio.
-
Confirmación de correo:
- Debe coincidir con el campo de correo electrónico.
- Es obligatorio.
-
DNI (Formateado para España):
- Debe tener 8 números seguidos de una letra.
- La letra debe coincidir con la correspondiente a esos números.
- Es obligatorio.
-
Teléfono:
- Debe tener 9 dígitos numéricos.
- Es obligatorio.
-
Contraseña:
- Debe tener entre 6 y 8 caracteres.
- Debe contener al menos una letra minúscula, una mayúscula y un número.
- Es obligatorio.
-
Confirmación de contraseña:
- Debe coincidir con el campo de contraseña.
- Es obligatorio.
Solución paso a paso:
1. Mostrar el formulario
Paso 1: Mostrar el formulario
Enunciado: Al cargar el archivo PHP por primera vez, muestra un formulario HTML con los siguientes campos: nombre, fecha de nacimiento, correo electrónico, confirmación de correo, DNI, teléfono, contraseña y confirmación de contraseña. No realices ninguna validación en el HTML, solo en PHP.
Solución
2. Sanitización, validación y manejo de errores
Paso 2: Validar i sanitizar los datos y mostrar errores
Enunciado: Cuando los datos sean enviados, valida cada uno de los campos. Si hay errores, muestra un div rojo sobre el formulario que contenga los mensajes de error para cada campo y restaura los valores en los campos, excepto las contraseñas.
Recuerda sanitizar los datos antes de procesarlos utilizando las sanitizaciones vistas en el tema anterior.
Solución
3. Mostrar mensaje de éxito
Paso 3: Mostrar mensaje de éxito
Enunciado: Si los datos son válidos, muestra un mensaje indicando que los datos han sido recibidos y serán procesados. Si hay errores, el formulario se volverá a mostrar con los errores.
Conclusión
Este ejercicio permite a los estudiantes practicar la creación de un formulario HTML, la validación de los datos introducidos en el servidor con PHP, y la sanitización de los datos recibidos para proteger la aplicación. Este tipo de validaciones del lado del servidor es crucial en el desarrollo de aplicaciones web seguras.
Resumen
En este punto hemos cubierto cómo crear formularios HTML, cómo procesar los datos recibidos con PHP, y cómo realizar validaciones y sanitizaciones básicas. Los formularios son una parte fundamental en el desarrollo de aplicaciones web, y entender cómo manejarlos de manera segura es crucial.