Guía Rápida: Manejo de Formularios y Validación de Datos
En esta sección aprenderás cómo manejar las variables globales $_GET
y $_POST
, que se utilizan para enviar y recibir datos desde y hacia el servidor a través de formularios web. Exploraremos las diferencias entre ambos métodos, cuándo es apropiado utilizar cada uno, y cómo manejarlos de manera segura en PHP.
En PHP, $_GET
y $_POST
son dos superglobales que nos permiten acceder a los datos enviados desde los formularios HTML. Estas variables contienen los valores que los usuarios envían a través de las solicitudes HTTP cuando interactúan con un sitio web.
$_GET
se utiliza para enviar datos a través de la URL.$_POST
se utiliza para enviar datos de manera más segura, a través del cuerpo de la solicitud HTTP.
Ambos métodos tienen sus propios casos de uso, ventajas y desventajas. Entender cómo y cuándo utilizar cada uno es clave para escribir aplicaciones web seguras y funcionales.
4.1. ¿Qué son $_GET y $_POST?
$_GET
:
- Envío de datos en la URL: Los datos enviados con
$_GET
se adjuntan a la URL, lo que hace que estos datos sean visibles para el usuario. Se envían como pares clave-valor después del signo de interrogación (?
), y los parámetros se separan con el símbolo de amperstand (&
).Limitación de tamaño: El tamaño de los datos enviados con$_GET
está limitado por la longitud máxima de la URL, que varía según el navegador (generalmente alrededor de 2048 caracteres).Uso típico: Se utiliza cuando los datos no son sensibles o cuando se desea enviar datos a través de enlaces (por ejemplo, en los parámetros de búsqueda).
<form method="GET" action="procesar.php">
<input type="text" name="nombre" placeholder="Tu nombre">
<input type="submit" value="Enviar">
</form>
La URL generada podría verse así:
procesar.php?nombre=Juan
En el archivo PHP, puedes acceder a los datos enviados:
$nombre = $_GET['nombre'];
echo "Tu nombre es: " . $nombre;
$_POST
:
- Envío de datos en el cuerpo de la solicitud HTTP: Los datos enviados con
$_POST
no son visibles en la URL, ya que se envían en el cuerpo de la solicitud HTTP. Esto hace que el métodoPOST
sea más adecuado para enviar información sensible, como contraseñas o datos de tarjetas de crédito.Sin limitación de tamaño: El tamaño de los datos enviados con$_POST
no está tan limitado como en$_GET
, por lo que es preferido cuando se necesita enviar grandes cantidades de datos (como archivos o grandes formularios).Uso típico: Se utiliza cuando los datos enviados son sensibles, como contraseñas, o cuando se está enviando información de manera más compleja.
<form method="POST" action="procesar.php">
<input type="text" name="nombre" placeholder="Tu nombre">
<input type="submit" value="Enviar">
</form>
En el archivo PHP, puedes acceder a los datos enviados:
$nombre = $_POST['nombre'];
echo "Tu nombre es: " . $nombre;
4.2. Diferencias Clave entre $_GET y $_POST
Característica | $_GET | $_POST |
---|---|---|
Visibilidad | Los datos se envían a través de la URL. | Los datos se envían en el cuerpo de la solicitud. |
Tamaño de los datos | Limitado (alrededor de 2048 caracteres). | Sin limitación significativa (dependiendo del servidor). |
Seguridad | Menos seguro (los datos son visibles en la URL). | Más seguro (los datos no son visibles en la URL). |
Uso común | Parámetros de búsqueda, filtrado, paginación. | Formularios con información sensible, como contraseñas o archivos. |
Método HTTP | GET | POST |
Idempotencia | Los datos no deben causar efectos secundarios. | No idempotente, puede tener efectos secundarios como cambios en la base de datos. |
4.3. Cuándo Utilizar $_GET y $_POST
Usa $_GET
cuando:
- Necesites enviar datos que no sean sensibles.Los datos sean cortos y adecuados para la URL (como parámetros de búsqueda, filtros de productos, etc.).Quieras compartir la URL o permitir que el usuario pueda marcar o guardar la dirección.Los datos sean solo de lectura y no vayan a cambiar nada en el servidor.
// Usando GET para enviar un parámetro de búsqueda if (isset($_GET['buscar'])) { $buscar = $_GET['buscar']; echo "Resultados de búsqueda para: " . $buscar; }
Usa $_POST
cuando:
- Necesites enviar datos sensibles, como contraseñas o información de usuario.El tamaño de los datos es grande o contiene archivos.Los datos deben cambiar algo en el servidor, como insertar o actualizar registros en una base de datos.La seguridad es una prioridad.
// Usando GET para enviar un parámetro de búsqueda
if (isset($_GET['buscar'])) {
$buscar = $_GET['buscar'];
echo "Resultados de búsqueda para: " . $buscar;
}
4.4. Buenas Prácticas al Usar $_GET y $_POST
- Validar y Sanitizar Datos: Siempre valida y sanitiza los datos recibidos a través de
$_GET
y$_POST
antes de procesarlos o mostrarlos en la página. Utiliza funciones comofilter_var()
,htmlspecialchars()
, ystrip_tags()
para proteger tu aplicación contra inyecciones maliciosas.Ejemplo de sanitización de correo electrónico:$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
- Evitar el Uso de
$_GET
para Datos Sensibles: Como los datos enviados con$_GET
son visibles en la URL, nunca debes usar este método para enviar información sensible, como contraseñas, tokens de sesión o datos financieros. - Utilizar HTTPS: Asegúrate de que tu aplicación esté utilizando HTTPS para proteger la transmisión de datos entre el cliente y el servidor. De lo contrario, los datos enviados, incluso por
$_POST
, pueden ser interceptados. - Manejo de Datos en Formularios: Si estás procesando datos de formularios, asegúrate de usar el método adecuado (
POST
para datos sensibles,GET
para datos públicos). Además, recuerda siempre que debes manejar la seguridad de las sesiones adecuadamente. - Evitar el Uso de
$_GET
para Acciones Importantes: Evita usar$_GET
para acciones que modifiquen el estado del servidor, como eliminar registros o realizar compras, ya que estos parámetros podrían ser manipulados por los usuarios.
4.5. Ejemplo de Formulario y Envío de Datos
A continuación, un ejemplo completo de cómo utilizar $_GET
y $_POST
en un formulario:
<!-- Formulario utilizando GET para búsqueda -->
<form method="GET" action="buscar.php">
<input type="text" name="query" placeholder="Buscar producto">
<input type="submit" value="Buscar">
</form>
<!-- Formulario utilizando POST para inicio de sesión -->
<form method="POST" action="login.php">
<input type="text" name="usuario" placeholder="Nombre de usuario">
<input type="password" name="password" placeholder="Contraseña">
<input type="submit" value="Iniciar sesión">
</form>
PHP para GET
(buscar.php):
if (isset($_GET['query'])) {
$query = htmlspecialchars($_GET['query']);
echo "Resultados de búsqueda para: " . $query;
}
PHP para POST
(login.php):
if (isset($_POST['usuario']) && isset($_POST['password'])) {
$usuario = htmlspecialchars($_POST['usuario']);
$password = htmlspecialchars($_POST['password']);
echo "Inicio de sesión para el usuario: " . $usuario;
}
Resumen:
Las superglobales $_GET
y $_POST
son fundamentales para manejar los datos enviados desde los formularios en PHP. Utiliza $_GET
para datos públicos y pequeños que no sean sensibles y $_POST
para datos privados o grandes, como contraseñas. Siempre valida y sanitiza los datos para proteger tu aplicación y garantizar la seguridad de los usuarios.