Superglobales y manejo de formularios
Leer datos de la petición con los arrays superglobales de PHP, y manejar de forma segura el envío de un formulario HTML.
3 min de lectura
Todo lo que transporta una petición web — campos de formulario, parámetros de consulta en la URL, cookies, archivos subidos — llega a PHP a través de un conjunto de arrays integrados llamados superglobales, disponibles en cualquier ámbito sin necesitar global ni un parámetro.
$_GET y $_POST
<?php
// URL: /search.php?query=php+course
echo $_GET['query']; // "php course"<form action="/login.php" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<button type="submit">Log in</button>
</form><?php
// login.php
$username = $_POST['username'];
$password = $_POST['password'];$_GET contiene los parámetros de la cadena de consulta de la URL; $_POST contiene los datos enviados desde un formulario con method="post". Ambos son arrays asociativos indexados por el atributo name de cada campo — que coincida con el name del formulario HTML es lo que hace que un campo aparezca bajo una clave determinada.
Nunca confíes directamente en $_GET/$_POST
<?php
$email = $_POST['email'] ?? '';
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Invalid email address.";
exit;
}Todo valor en $_GET y $_POST es entrada cruda, sin validar, de un cliente que no controlas — valídalo siempre antes de usarlo, y nunca lo pases directamente a una consulta de base de datos ni lo muestres en HTML sin escaparlo (ambos temas se cubren en la lección de seguridad). ?? protege contra la ausencia total de la clave, algo que ocurre siempre que un campo del formulario se deja en blanco o la petición no fue un envío de formulario real.
$_SERVER: información sobre la propia petición
<?php
echo $_SERVER['REQUEST_METHOD']; // "GET" or "POST"
echo $_SERVER['HTTP_USER_AGENT'];
echo $_SERVER['REQUEST_URI'];$_SERVER contiene metadatos sobre la petición y el entorno del servidor — el método HTTP, las cabeceras, la ruta solicitada — usado comúnmente para ramificar la lógica según cómo se accedió a una ruta (por ejemplo, mostrar un formulario en GET, procesarlo en POST).
$_SESSION y $_COOKIE
<?php
session_start();
$_SESSION['user_id'] = 42;
echo $_SESSION['user_id']; // available on subsequent requests from the same browsersession_start() debe llamarse antes de leer o escribir $_SESSION — es el mecanismo integrado de PHP para persistir datos (como "¿este usuario ha iniciado sesión?") a lo largo de varias peticiones del mismo visitante, respaldado por un ID de sesión almacenado en una cookie. $_COOKIE lee las cookies directamente, mientras que setcookie() establece una.
Un ejemplo completo de manejo de formulario
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['name'] ?? '');
if ($name === '') {
$error = "Name is required.";
} else {
$_SESSION['name'] = $name;
header("Location: /welcome.php");
exit;
}
}header("Location: ...") envía una redirección HTTP — debe llamarse antes de que se haya enviado cualquier otra salida al navegador, razón por la cual exit la sigue inmediatamente: nada después de una redirección debería seguir ejecutándose ni intentar imprimir más salida. Este patrón (validar, y luego mostrar un error o redirigir en caso de éxito) es la columna vertebral de prácticamente todo manejador de formularios PHP tradicional, antes de que las abstracciones de petición/respuesta de un framework se encarguen de la misma tarea de forma más segura.
Pon a prueba lo que acabas de aprender
4 preguntas rápidas. Respóndelas todas correctamente para desbloquear la siguiente lección.
Puedes hacer el cuestionario sin una cuenta — iniciar sesión solo hace que tu resultado cuente para tu progreso.