W3docs

Comprendiendo las superglobales de PHP: La variable $_REQUEST

La variable $_REQUEST de PHP combina $_GET, $_POST y $_COOKIE en un único array para acceder a datos del cliente con facilidad.

El lenguaje PHP tiene muchas variables integradas, llamadas superglobales, que proporcionan una forma conveniente de acceder a datos de diversas fuentes en tus scripts. Una de las superglobales más utilizadas es la variable $_REQUEST, que combina los valores de las variables $_GET, $_POST y $_COOKIE en un único array.

En este artículo, profundizaremos en la variable $_REQUEST, explorando sus propiedades, casos de uso y mejores prácticas para trabajar con ella en tus scripts PHP.

¿Qué es la variable $_REQUEST?

La variable $_REQUEST es una superglobal de PHP — un array asociativo que está disponible automáticamente en cada ámbito de tu script. Contiene datos enviados al servidor a través de varios medios, como solicitudes GET y POST, o cookies. Combina los datos de las variables $_GET, $_POST y $_COOKIE en un único array.

El orden en que se fusionan estas fuentes está controlado por las directivas request_order y variables_order en php.ini. Esto importa porque si la misma clave existe en más de una fuente, la última fuente listada en request_order prevalece. El valor predeterminado en la mayoría de las instalaciones modernas es GP (GET, luego POST), lo que significa que los valores POST sobrescriben los valores GET con el mismo nombre, y las cookies no se incluyen en absoluto:

; php.ini
request_order = "GP"   ; only $_GET and $_POST feed $_REQUEST

Dado que este comportamiento depende de la configuración del servidor, nunca asumas que $_REQUEST contiene datos de cookies a menos que hayas verificado la configuración de request_order.

Cuándo usar la variable $_REQUEST

La variable $_REQUEST es útil cuando deseas acceder a datos enviados por el cliente, independientemente del método utilizado. Por ejemplo, si quieres procesar un formulario enviado por el usuario, puedes usar la variable $_REQUEST para acceder a los valores enviados en el formulario, sin necesidad de saber si el formulario fue enviado usando el método GET o POST.

Aunque $_REQUEST puede incluir datos de cookies, es una práctica estándar acceder a las cookies directamente a través de $_COOKIE para mayor claridad y seguridad.

Cómo acceder a los datos en la variable $_REQUEST

Para acceder a los datos en la variable $_REQUEST, simplemente usa la notación de array, proporcionando la clave que corresponde al valor que deseas recuperar. Por ejemplo, si tienes un formulario con un campo de texto llamado "username", puedes acceder al valor enviado en el campo de la siguiente manera:

Ejemplo básico de lectura de un valor

$username = $_REQUEST['username'];
// Always validate and sanitize input before use

Dado que una clave puede estar ausente (por ejemplo, en la primera carga de la página antes de que se envíe un formulario), verifica primero que exista. El operador de fusión de null (??) es la forma más limpia de proporcionar un valor predeterminado:

$username = $_REQUEST['username'] ?? 'guest';
echo "Hello, " . htmlspecialchars($username);

Si olvidas la verificación de existencia y la clave está ausente, PHP emite una advertencia Undefined array key — así que protege siempre tus lecturas.

Un ejemplo completo de formulario

El valor real de $_REQUEST es que el mismo controlador funciona ya sea que el formulario use method="get" o method="post". El ejemplo a continuación renderiza un formulario y procesa su entrada independientemente del método:

<?php
// handler.php
if (isset($_REQUEST['name'])) {
    // Never trust raw input — escape it before output
    $name = htmlspecialchars(trim($_REQUEST['name']));
    echo "Welcome, {$name}!";
}
?>

<form method="post" action="handler.php">
    <input type="text" name="name" placeholder="Your name">
    <button type="submit">Submit</button>
</form>

Cambia method="post" a method="get" y el código PHP no cambia — esa es precisamente la conveniencia que ofrece $_REQUEST.

$_REQUEST vs $_GET vs $_POST

SuperglobalFuente de datosUsar cuando
$_GETCadena de consulta URL (?key=value)Sabes que los datos llegan a través de la URL (enlaces, búsqueda).
$_POSTCuerpo de la solicitud HTTPManejas envíos de formularios, cargas, o acciones que cambian el estado.
$_REQUEST$_GET + $_POST (+ $_COOKIE, según configuración)El método es genuinamente desconocido y debes aceptar cualquiera.

Para más información sobre los arrays dedicados, consulta los capítulos $_GET y $_POST, y manejo de formularios PHP para ejemplos completos.

Mejores prácticas para trabajar con la variable $_REQUEST

Al trabajar con la variable $_REQUEST, es importante seguir algunas mejores prácticas para garantizar que tus scripts sean seguros y confiables. Algunas de las mejores prácticas para trabajar con la variable $_REQUEST incluyen:

  • Valida y desinfecta todos los datos recibidos del cliente para asegurarte de que sean seguros de usar en tus scripts.
  • Prefiere superglobales específicas como $_GET o $_POST cuando el método de solicitud es conocido, ya que $_REQUEST generalmente se desaconseja en PHP moderno debido a posibles contaminaciones de parámetros y ambigüedad.
  • Evita usar la variable $_REQUEST al manejar datos sensibles, como contraseñas u otra información confidencial, para prevenir riesgos de seguridad.
  • Usa las funciones de filtro de PHP (por ejemplo filter_input() o filter_var()) para validar y desinfectar la entrada de forma estructurada y reutilizable.
  • Para las cookies, lee $_COOKIE directamente; para los datos de sesión usa $_SESSION — ninguno de los dos pertenece a rutas de código propensas a la contaminación de solicitudes.

Conclusión

La variable $_REQUEST proporciona una forma unificada de acceder a los datos del cliente independientemente del método de envío. Al comprender sus dependencias de configuración, posibles ambigüedades y mejores prácticas de seguridad, puedes usarla de manera efectiva en tus scripts PHP. Aunque el desarrollo moderno a menudo favorece el uso explícito de $_GET o $_POST, $_REQUEST sigue siendo una herramienta útil para manejar fuentes de entrada mixtas cuando se configura correctamente.

Práctica

Práctica
¿Cuáles son los arrays globales proporcionados en PHP para tratar con datos pasados a través de solicitudes HTTP?
¿Cuáles son los arrays globales proporcionados en PHP para tratar con datos pasados a través de solicitudes HTTP?
Was this page helpful?