HTML form: GET, POST, action e name com um exemplo PHP
O HTML <form> agrupa controles de entrada em um formulário enviado a um servidor. action seleciona o endereço de processamento e method seleciona o método de envio. GET coloca os valores na query da URL e POST coloca-os no corpo da requisição, mas o POST por si só não criptografa os dados.
Os papéis de action, method e name
action é o endereço que o navegador solicita. Se omitido, o formulário é enviado para o endereço do documento atual. O método padrão é get, adequado para pesquisas e recuperações que não alteram o estado. Criação e atualizações geralmente usam post, com autenticação, autorização e validação de solicitação do lado do servidor.
O id de um controle o identifica no documento e associa seu rótulo; name é a chave de dados enviada. Entradas comuns sem nome são omitidas, assim como controles desativados e botões de rádio ou caixas de seleção não marcados. Não aninhe um formulário dentro de outro.
Prepare o formulário completo de prática
Para verificar o servidor de recebimento também, abrir apenas um arquivo HTML não é suficiente. Crie uma pasta de prática vazia em um ambiente local com PHP 8.x instalado e salve ambos os arquivos abaixo nessa pasta. Este exemplo exibe valores recebidos; ele não armazena dados, envia e-mails ou modifica contas.
O primeiro arquivo é index.html. O segundo botão de envio usa formmethod para que os mesmos inputs possam ser comparados usando GET e POST.
<!doctype html>
<html lang="pt">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Prática de formulários GET e POST</title>
</head>
<body>
<h1>Comparar métodos de requisição</h1>
<form action="receive.php" method="get">
<p>
<label for="query">Termo de busca</label>
<input type="text" id="query" name="q" maxlength="80" required>
</p>
<p>
<label for="note">Nota</label>
<textarea id="note" name="note" maxlength="300"></textarea>
</p>
<button type="submit">Verificar com GET</button>
<button type="submit" formmethod="post">Verificar com POST</button>
<button type="reset">Redefinir</button>
</form>
</body>
</html>
O segundo arquivo é receive.php. Ele lê strings da coleção de inputs para o método de requisição e rejeita arrays ou comprimentos inválidos. A saída é escapada para seu contexto em HTML.
<?php
declare(strict_types=1);
header('Content-Type: text/html; charset=UTF-8');
$method = $_SERVER['REQUEST_METHOD'];
if ($method !== 'GET' && $method !== 'POST') {
header('Allow: GET, POST');
http_response_code(405);
exit('Método de requisição não suportado.');
}
$input = $method === 'POST' ? $_POST : $_GET;
$q = $input['q'] ?? '';
$note = $input['note'] ?? '';
if (!is_string($q) || !is_string($note) || trim($q) === '' ||
strlen($q) > 320 || strlen($note) > 1200) {
http_response_code(400);
exit('Confira as strings do termo de busca e da nota.');
}
function h(string $text): string {
return htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
?>
<!doctype html>
<html lang="pt">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Resultado recebido</title>
</head>
<body>
<h1>Resultado recebido</h1>
<p>Método de requisição: <?= h($method) ?></p>
<p>Termo de busca: <?= h($q) ?></p>
<p>Nota: <?= h($note) ?></p>
<p><a href="index.html">Voltar ao formulário</a></p>
</body>
</html>
HTML maxlength e a verificação de comprimento do servidor usam medidas diferentes. Este exemplo de servidor limita os bytes com strlen; ele não reproduz uma política completa de contagem de caracteres. Valide entradas importantes de acordo com as regras reais de aplicação do servidor.
Execute o exemplo e compare GET com POST
Na pasta que contém ambos os arquivos, execute este comando e abra http://127.0.0.1:8000/index.html. Se o php não for encontrado, verifique o caminho de instalação e a configuração do PATH. O servidor embutido do PHP é para desenvolvimento local e prática, não para produção.
php -S 127.0.0.1:8000
- Submissões com um termo de pesquisa vazio são bloqueadas pela validação obrigatória.
- Digite HTML como o termo de pesquisa e Practice como a nota, depois envie com GET. A consulta da URL contém q e note, e a resposta mostra GET como o método.
- Volte ao formulário e digite os mesmos valores, depois envie com POST. Os valores de entrada não são adicionados à URL, e a resposta mostra POST. As ferramentas de desenvolvedor podem mostrar o corpo no painel Network.
- Envie
<b>Practice</b>na nota. A resposta mostra as tags como texto, sem negrito. Depois, encerre o servidor com Ctrl+C no terminal.
Verifique os métodos de envio, segurança e falhas comuns
O conteúdo do POST permanece visível nas ferramentas de desenvolvedor e para o servidor; HTTPS é necessário para proteger os dados em trânsito. Consultas GET podem permanecer em endereços, histórico ou registros, então não coloque valores sensíveis, como senhas, nelas. As verificações HTML required e maxlength ajudam os usuários, mas não substituem a validação no servidor.
Formulários de upload de arquivos geralmente precisam de method="post" e enctype="multipart/form-data". A codificação padrão é application/x-www-form-urlencoded. O manuseio real de arquivos também exige verificações de tamanho, tipo e local de armazenamento, além deste exercício de entrada de string.
Para uma resposta 404, verifique o caminho de ação relativo e o nome do arquivo. Para valores ausentes, verifique o nome e se o servidor lê a coleção para o método de requisição correto. Defina explicitamente type="button" para botões de ação comuns para evitar envio acidental. Resetar restaura os padrões originais, em vez de sempre deixar os campos vazios. Consulte a referência de formulário MDN e o tutorial de formulários PHP.




