W3docs

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=en

Quando 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 HTML

Os 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 ficamQuery string da URLCorpo da requisição
Visível na URLSimNão
Marcável como favorito / compartilhávelSimNão
Limite de tamanhoLimitado pelo comprimento da URL (~2 KB)Efetivamente muito maior
Use paraPesquisas, filtros, paginação, navegaçãoLogins, 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.

Prática

Prática
Quais das afirmações a seguir são verdadeiras sobre o método GET do PHP?
Quais das afirmações a seguir são verdadeiras sobre o método GET do PHP?
Was this page helpful?