Entendendo os Superglobais PHP $_GET
O PHP oferece superglobais que facilitam o acesso a dados de diferentes fontes. Saiba como usar $_GET de forma segura.
O PHP oferece vários superglobais que facilitam a leitura de informações de diferentes fontes de forma simples e unificada. Um deles é o $_GET — o array que o PHP preenche com os dados encontrados na query string da URL da requisição atual. Este capítulo explica o que o $_GET contém, como o PHP o popula, como lê-lo com segurança e quando usá-lo em vez do $_POST.
O que é $_GET?
$_GET é um superglobal do PHP: um array associativo disponível automaticamente em todos os escopos (dentro de funções, classes e arquivos) sem precisar da palavra-chave global. O PHP o preenche com os pares nome/valor encontrados após o ? na URL da requisição — a query string. As chaves são os nomes dos parâmetros e os valores são seus conteúdos (decodificados da URL).
Como os dados ficam na URL, eles são visíveis, marcáveis como favoritos e compartilháveis. Isso torna o $_GET ideal para coisas que um usuário pode querer vincular — uma consulta de pesquisa, um número de página, um ID de produto — e uma escolha inadequada para qualquer coisa sensível ou volumosa.
Como o $_GET funciona?
Você passa variáveis acrescentando-as à URL como parâmetros de consulta, em pares chave=valor separados por &:
http://example.com/script.php?greeting=hello&lang=enQuando o script é executado, o PHP analisa a query string e popula o $_GET. O array resultante se parece com isto:
// $_GET after the request above
[
'greeting' => 'hello',
'lang' => 'en',
]Os valores são sempre strings (ou arrays — veja abaixo), mesmo quando parecem numéricos. ?page=2 retorna a string "2", não o inteiro 2, portanto converta ou valide antes de fazer operações aritméticas.
Como ler o $_GET com segurança
Sempre verifique se uma chave existe antes de usá-la — um parâmetro ausente dispara um aviso e retorna null. Use isset() ou o operador de coalescência nula ??:
<?php
// Defensive read with a default value
$greeting = $_GET['greeting'] ?? 'Hi';
echo htmlspecialchars($greeting); // safe to print in HTMLOs dados no $_GET vêm diretamente do cliente, portanto nunca confie neles. Valide e sanitize antes de usar:
<?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";
}Ao imprimir entradas do usuário em uma página, passe-as pelo htmlspecialchars() para evitar cross-site scripting (XSS). Ao usá-las em SQL, utilize prepared statements em vez de concatená-las na consulta. Veja filter_input() e filter_var() para o conjunto completo de filtros de validação.
Recuperando dados de formulário com GET
Um formulário HTML cujo method é get envia seus campos como parâmetros de consulta, que então aparecem no $_GET:
<form action="search.php" method="get">
<input type="text" name="q" placeholder="Search...">
<button type="submit">Search</button>
</form>Enviar apple leva o navegador a search.php?q=apple, e em search.php:
<?php
$query = trim($_GET['q'] ?? '');
if ($query !== '') {
echo 'Results for: ' . htmlspecialchars($query);
} else {
echo 'Please enter a search term.';
}Para um guia mais detalhado, consulte Manipulação de Formulários PHP e Validação de Formulários PHP.
Parâmetros em array e agrupados
Repita um nome com [] e o PHP agrupa os valores em um sub-array — útil para checkboxes e filtros de seleção múltipla:
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 | |
|---|---|---|
| Onde os dados ficam | Query string da URL | Corpo da requisição |
| Visível na URL | Sim | Não |
| Marcável como favorito / compartilhável | Sim | Não |
| Limite de tamanho | Limitado pelo comprimento da URL (~2 KB) | Efetivamente muito maior |
| Use para | Pesquisas, filtros, paginação, navegação | Logins, uploads de arquivos, qualquer coisa que altere dados |
Use GET para leitura — requisições que não alteram o estado do servidor e que o usuário pode querer repetir ou compartilhar. Use POST para escrita — envio de senhas, criação de registros ou envio de payloads grandes. Se você precisar de um único ponto que leia de qualquer método, consulte $_REQUEST.
Usos comuns
- Resultados de pesquisa — coloque a consulta na URL para que os usuários possam marcar ou compartilhar seus resultados.
- Páginas dinâmicas — passe um parâmetro
?id=ou?page=para controlar qual conteúdo é renderizado. - Filtragem e ordenação — codifique os filtros ativos na URL para que o estado sobreviva a uma atualização.
Conclusão
O $_GET oferece uma maneira simples e unificada de ler dados passados na query string da URL. É ideal para requisições somente leitura e compartilháveis, como pesquisas e paginação, mas como seus valores são visíveis e vêm do cliente, sempre valide, sanitize e escape-os antes de usar. Para dados que alteram o estado do servidor ou devem permanecer privados, use $_POST.