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
<?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
?>
💡 Dica: $_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:

TEXT
http://localhost/search.php?q=PHP&page=2&sort=newest
                              ↑          ↑       ↑
                         $_GET['q'] $_GET['page'] $_GET['sort']
PHP
<?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>";
?>
PHP
<?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> ";
}
?>
▶ Experimente
💡 Dica: Os valores em $_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
<?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>
▶ Experimente
💡 Dica: 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)
TEXT
GET  →  "Show me page 2 of the catalog"    → Best for queries
POST →  "Here are my login credentials"     → Best for mutations
💡 Dica: Esta é a regra de ouro — use GET para operações de leitura e POST para operações de gravação. Nunca, jamais coloque senhas, números de cartão de crédito ou quaisquer dados confidenciais em uma string de consulta GET — eles acabarão no histórico do navegador, nos logs do servidor e nos cabeçalhos de referência.

▶ Exemplo: $_REQUEST (Não recomendado)

PHP
<?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
?>
▶ Experimente

❓ Perguntas Frequentes

P: O $_GET pode passar matrizes? R: Sim. ?tags[]=PHP&tags[]=MySQL gera $_GET['tags'] = ['PHP', 'MySQL']. ?user[name]=John&user[age]=25 cria 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=val aparece na URL quanto um formulário POST. Como isso é possível? R: Um padrão comum é um formulário com action="page.php?id=1" — o id=1 é enviado via GET, enquanto os campos do formulário são enviados via POST. Uma única solicitação pode conter ambos.

📖 Resumo

📝 Exercícios

  1. Crie greet.php: aceite um parâmetro de URL ?name=YourName e exiba “Olá, SeuNome!”. Se nenhum nome for fornecido, exiba “Olá, Convidado!”.
  2. 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.
  3. 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).
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%