Superglobais — $_GET e $_POST
Você está agora exatamente na fronteira entre o servidor e o navegador. As superglobais são os pacotes de entrega integrados do PHP — a cada solicitação, o navegador agrupa os dados do usuário e os envia; o PHP os desempacota nessas variáveis, prontas para serem usadas em qualquer parte do seu script.
1. O que são superglobais?
Superglobais são variáveis embutidas do PHP que podem ser acessadas em qualquer escopo sem a necessidade da palavra-chave global. Todas elas começam com $_ e estão sempre disponíveis.
| Superglobal | Participações | Uso comum |
|---|---|---|
$_SERVER |
Informações sobre o servidor e o ambiente de execução | Obter a URL atual, detectar HTTPS |
$_GET |
Parâmetros de consulta da URL | Paginação ?page=2, pesquisa ?q=PHP |
$_POST |
Dados de formulário enviados via POST | Credenciais de login, cadastros |
$_FILES |
Dados do arquivo enviado | Envio de avatares |
$_COOKIE |
Cookies do navegador | Recurso “Lembrar-me” |
$_SESSION |
Dados de sessão no lado do servidor | Persistência do estado de login |
2. $_SERVER
$_SERVER é um array repleto de informações sobre o servidor e as solicitações:
<?php
// Basic info
echo $_SERVER['REQUEST_METHOD']; // GET or POST
echo $_SERVER['REQUEST_URI']; // /myphp/page.php?id=1
echo $_SERVER['HTTP_HOST']; // localhost
echo $_SERVER['SERVER_NAME']; // localhost
echo $_SERVER['SERVER_PORT']; // 80
echo $_SERVER['REMOTE_ADDR']; // 127.0.0.1 (user's IP)
echo $_SERVER['HTTP_USER_AGENT']; // User's browser info
echo $_SERVER['SCRIPT_NAME']; // /myphp/page.php
echo $_SERVER['PHP_SELF']; // /myphp/page.php
// Detect HTTPS
$isHttps = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on';
// Build the current full URL
$currentUrl = ($isHttps ? "https" : "http") . "://"
. $_SERVER['HTTP_HOST']
. $_SERVER['REQUEST_URI'];
echo $currentUrl; // http://localhost/myphp/demo.php
?>
$_SERVER['REMOTE_ADDR'] fornece o endereço IP do usuário (embora possa ser o IP do proxy, caso haja um entremeado). $_SERVER['HTTP_USER_AGENT'] permite detectar o tipo de navegador, mas não confie nisso para nada crítico — os user agents são facilmente falsificados.
3. $_GET — Parâmetros de consulta da URL
Adicione pares ?key=value a uma URL e o PHP os converte automaticamente em $_GET:
http://localhost/search.php?q=PHP&page=2&sort=newest
↑ ↑ ↑
$_GET['q'] $_GET['page'] $_GET['sort']
<?php
// search.php
$keyword = $_GET['q'] ?? "No search term provided";
$page = $_GET['page'] ?? 1;
$sort = $_GET['sort'] ?? "relevance";
echo "Search term: {$keyword}<br>";
echo "Page {$page}<br>";
echo "Sort by: {$sort}<br>";
?>
▶ Exemplo: Links de paginação
<?php
$page = (int)($_GET['page'] ?? 1);
$perPage = 20;
echo "<h3>Products — Page {$page}</h3>";
// Generate pagination links
for ($i = 1; $i <= 5; $i++) {
$active = ($i == $page) ? "style='font-weight:bold;color:red'" : "";
echo "<a href='?page={$i}' {$active}>{$i}</a> ";
}
?>
$_GET são sempre cadeias de caracteres ("2", e não 2). Converta-os usando (int) ou intval() antes de usá-los em cálculos matemáticos.
4. $_POST — Dados do formulário
$_POST recebe dados enviados por formulários que utilizam method="POST". Esse é o principal padrão de interação no desenvolvimento web:
▶ Exemplo: Como lidar com o envio de um formulário
<?php
// Check if this is a POST request
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['name'] ?? '');
$message = trim($_POST['message'] ?? '');
if ($name && $message) {
echo "<h3>Message received!</h3>";
echo "<p><strong>{$name}:</strong> {$message}</p>";
} else {
echo "<p style='color:red'>Please fill in all fields</p>";
}
}
?>
<form method="POST" action="">
<p>
<label>Name:</label>
<input type="text" name="name" value="<?= $_POST['name'] ?? '' ?>">
</p>
<p>
<label>Message:</label>
<textarea name="message"><?= $_POST['message'] ?? '' ?></textarea>
</p>
<button type="submit">Submit</button>
</form>
action="" envia os dados para a mesma página — um padrão comum em que um único arquivo PHP exibe o formulário e processa o envio.
5. GET x POST
| GET | POST | |
|---|---|---|
| Localização dos dados | String de consulta da URL (visível) | Corpo da solicitação HTTP (oculto) |
| Tamanho dos dados | ~2048 caracteres | Teoricamente ilimitado |
| Pode ser adicionado aos favoritos / compartilhado | ✅ Sim | ❌ Não |
| Cache do navegador | Em cache | Não está em cache |
| Ideal para | Pesquisa, paginação, filtros | Login, cadastro, modificação de dados |
| Segurança | Parâmetros expostos na URL | Relativamente mais seguro (mas não criptografado) |
GET → "Show me page 2 of the catalog" → Best for queries
POST → "Here are my login credentials" → Best for mutations
▶ Exemplo: $_REQUEST (Não recomendado)
<?php
// $_REQUEST merges $_GET + $_POST + $_COOKIE
// Don't use it! It's unsafe and you can't tell where the data came from
$unreliable = $_REQUEST['name'] ?? '';
// Always use explicit $_GET or $_POST
?>
❓ Perguntas Frequentes
P: O $_GET pode passar matrizes? R: Sim.
?tags[]=PHP&tags[]=MySQLgera$_GET['tags'] = ['PHP', 'MySQL'].?user[name]=John&user[age]=25cria uma matriz aninhada.
P: Onde estão os parâmetros POST? Eles não estão na URL. R: Os parâmetros POST são transmitidos no corpo da solicitação HTTP. Abra as Ferramentas do Desenvolvedor do seu navegador → guia Rede para verificá-los.
P: Já vi sites em que tanto
?key=valaparece na URL quanto um formulário POST. Como isso é possível? R: Um padrão comum é um formulário comaction="page.php?id=1"— oid=1é enviado via GET, enquanto os campos do formulário são enviados via POST. Uma única solicitação pode conter ambos.
📖 Resumo
$_SERVERfornece informações sobre o servidor — URL, IP, método de solicitação e muito mais$_GETcaptures URL query parameters (?key=val, used for search and pagination)$_POSTcaptura os envios de formulários (method="POST", usado para login e cadastro)- GET é usado para operações de leitura (consultas); POST é usado para operações de gravação (mutações)
- Nunca use GET para senhas ou outros dados confidenciais
- Use
$_GET['key'] ?? 'default'para acessar os parâmetros com segurança - Evite
$_REQUEST— ele mistura as fontes de dados
📝 Exercícios
- Crie
greet.php: aceite um parâmetro de URL?name=YourNamee exiba “Olá, SeuNome!”. Se nenhum nome for fornecido, exiba “Olá, Convidado!”. - Crie uma página de demonstração de paginação: aceite
?page=N, exiba “Você está na página N” e gere links para as páginas de 1 a 10. - Crie um formulário de livro de visitas (usando POST): os envios aparecem abaixo do formulário. Armazene as mensagens em um arquivo (dica:
file_put_contents+file_get_contents).



