W3docs

Comprensión de los Superglobales de PHP $_GET

PHP ofrece varios superglobales que facilitan el acceso a información de distintas fuentes de forma simple y unificada.

PHP proporciona varios superglobales que facilitan la lectura de información de distintas fuentes de forma simple y unificada. Uno de ellos es $_GET — el array que PHP rellena con los datos encontrados en la cadena de consulta (query string) de la URL de la solicitud actual. Este capítulo explica qué contiene $_GET, cómo lo rellena PHP, cómo leerlo de forma segura y cuándo usarlo en lugar de $_POST.

¿Qué es $_GET?

$_GET es un superglobal de PHP: un array asociativo que está disponible automáticamente en todos los ámbitos (dentro de funciones, clases y archivos) sin necesidad de usar la palabra clave global. PHP lo rellena con los pares nombre/valor que se encuentran después del ? en la URL de la solicitud — la cadena de consulta. Las claves son los nombres de los parámetros y los valores son sus contenidos (decodificados desde la URL).

Dado que los datos residen en la URL, son visibles, guardables como marcadores y compartibles. Esto hace que $_GET sea ideal para elementos que un usuario puede querer enlazar — una consulta de búsqueda, un número de página, un ID de producto — y una mala opción para información sensible o de gran tamaño.

¿Cómo funciona $_GET?

Se pasan variables añadiéndolas a la URL como parámetros de consulta, en pares key=value separados por &:

http://example.com/script.php?greeting=hello&lang=en

Cuando se ejecuta el script, PHP analiza la cadena de consulta y rellena $_GET. El array resultante tiene este aspecto:

// $_GET after the request above
[
    'greeting' => 'hello',
    'lang'     => 'en',
]

Los valores son siempre string (o arrays — véase más abajo), incluso cuando parecen numéricos. ?page=2 te devuelve el string "2", no el entero 2, así que convierte o valida antes de hacer aritmética.

Cómo leer $_GET de forma segura

Comprueba siempre que una clave existe antes de usarla — un parámetro ausente genera un aviso y te devuelve null. Usa isset() o el operador de fusión null ??:

<?php
// Defensive read with a default value
$greeting = $_GET['greeting'] ?? 'Hi';
echo htmlspecialchars($greeting);   // safe to print in HTML

Los datos en $_GET provienen directamente del cliente, así que nunca los des por válidos sin más. Valida y sanea antes de usarlos:

<?php
// Validate that "id" is a positive integer
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);

if ($id === false || $id === null) {
    echo 'Invalid or missing id';
} else {
    echo "Loading product #$id";
}

Cuando se imprime la entrada del usuario de vuelta en una página, pásala por htmlspecialchars() para prevenir ataques de cross-site scripting (XSS). Cuando se use en SQL, utiliza sentencias preparadas en lugar de concatenarla en la consulta. Consulta filter_input() y filter_var() para conocer el conjunto completo de filtros de validación.

Recuperación de datos de formulario con GET

Un formulario HTML cuyo method es get envía sus campos como parámetros de consulta, que luego aparecen en $_GET:

<form action="search.php" method="get">
    <input type="text" name="q" placeholder="Search...">
    <button type="submit">Search</button>
</form>

Al enviar apple, el navegador accede a search.php?q=apple, y en search.php:

<?php
$query = trim($_GET['q'] ?? '');

if ($query !== '') {
    echo 'Results for: ' . htmlspecialchars($query);
} else {
    echo 'Please enter a search term.';
}

Para un tutorial más detallado, consulta Manejo de Formularios en PHP y Validación de Formularios en PHP.

Parámetros de array y agrupados

Repite un nombre con [] y PHP agrupa los valores en un sub-array — muy útil para casillas de verificación y filtros de selección múltiple:

http://example.com/filter.php?color[]=red&color[]=blue
<?php
// $_GET['color'] is now an array: ['red', 'blue']
foreach ($_GET['color'] ?? [] as $color) {
    echo htmlspecialchars($color) . PHP_EOL;
}

GET vs POST

$_GET$_POST
Dónde residen los datosCadena de consulta de la URLCuerpo de la solicitud
Visible en la URLNo
Guardable como marcador / compartibleNo
Límite de tamañoLimitado por la longitud de la URL (~2 KB)Efectivamente mucho mayor
Usar paraBúsquedas, filtros, paginación, navegaciónInicios de sesión, subidas de archivos, todo lo que cambia datos

Usa GET para leer — solicitudes que no modifican el estado del servidor y que el usuario puede querer repetir o compartir. Usa POST para escribir — enviar contraseñas, crear registros o enviar grandes volúmenes de datos. Si necesitas un punto único que lea de cualquier método, consulta $_REQUEST.

Usos comunes

  • Resultados de búsqueda — pon la consulta en la URL para que los usuarios puedan guardarla como marcador o compartir sus resultados.
  • Páginas dinámicas — pasa un parámetro ?id= o ?page= para controlar qué contenido se muestra.
  • Filtrado y ordenación — codifica los filtros activos en la URL para que el estado persista al actualizar la página.

Conclusión

$_GET te ofrece una forma simple y unificada de leer datos pasados en la cadena de consulta de la URL. Es ideal para solicitudes de solo lectura y compartibles como búsquedas y paginación, pero dado que sus valores son visibles y provienen del cliente, valida, sanea y escapa siempre antes de usarlos. Para datos que modifican el estado del servidor o deben mantenerse privados, usa $_POST en su lugar.

Práctica

Práctica
¿Cuáles de las siguientes afirmaciones son verdaderas sobre el método GET de PHP?
¿Cuáles de las siguientes afirmaciones son verdaderas sobre el método GET de PHP?
Was this page helpful?