UA13 — PHP: Formulários
Formulários são a principal interface entre o usuário e o servidor. O PHP captura os dados enviados via GET ou POST, valida, sanitiza e responde dinamicamente — é o ciclo fundamental de qualquer aplicação web interativa.
Formulários HTML + PHP — o ciclo
Formulários são a principal interface entre o usuário e o servidor web. O HTML monta o formulário; o PHP processa os dados recebidos no servidor. Cada campo do formulário vira uma chave no array $_GET ou $_POST.
<!-- HTML: formulário envia para si mesmo via POST -->
<form name="cadastro" method="post" action="cadastro.php">
<input type="text" name="nome" />
<input type="email" name="email" />
<input type="submit" name="enviar" value="Enviar" />
</form>
Atributos essenciais do <form>
| Atributo | Função |
|---|---|
name | Identifica o formulário na página (pode haver múltiplos) |
method | Método HTTP de envio: get ou post |
action | URL do script que receberá os dados; sem ele, envia para a própria página |
submit | Botão que dispara a submissão |
GET vs POST
| GET | POST | |
|---|---|---|
| Onde os dados ficam | Na URL: ?nome=Ana&email=… | No corpo da requisição — invisível na URL |
| Segurança | Inseguro — dados visíveis e alteráveis pelo usuário | Mais seguro — dados ocultos |
| Superglobal PHP | $_GET[‘campo’] | $_POST[‘campo’] |
| Uso recomendado | Pesquisas, filtros (dados não sigilosos) | Cadastros, logins, dados sensíveis |
Receber e verificar dados
// Verificar se o formulário foi submetido
if (isset($_POST['enviar']) && !empty($_POST)) {
// Ler campos individuais com valor padrão se ausente (null)
$nome = isset($_POST['nome']) ? $_POST['nome'] : null;
$email = isset($_POST['email']) ? $_POST['email'] : null;
// PHP 7+ — forma mais curta com null coalescing
$nome = $_POST['nome'] ?? null;
$email = $_POST['email'] ?? null;
// Percorrer todos os campos do POST
foreach ($_POST as $chave => $valor) {
echo "$chave: $valor<br>";
}
}
Campos checkbox e radio
Campos checkbox e radio não são enviados quando nenhuma opção está marcada — o índice nem existe no $_POST. Use sempre isset() antes de acessar:
$aceite = isset($_POST['aceite']) ? "Sim" : "Não";Para checkbox com múltipla seleção, declare o name como array no HTML: name="estados[]". O PHP receberá um array em $_POST['estados'] — percorra com foreach.
Tratamento e validação de dados
// Remover tags HTML e PHP (proteção contra XSS básico)
$nome = strip_tags($_POST['nome'] ?? '');
// Limpar todos os campos de uma vez
foreach ($_POST as $k => $v) {
$_POST[$k] = strip_tags($v);
}
// Verificar se é numérico (aceita ponto, não vírgula)
if (!is_numeric($_POST['idade'])) {
$erros[] = "Idade deve ser numérica";
}
// Sanitizar — extrair apenas inteiros e sinais + -
$idade = filter_var($_POST['idade'], FILTER_SANITIZE_NUMBER_INT);
// Validar e-mail
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$erros[] = "E-mail inválido";
}
// Verificar se campo obrigatório está preenchido
if (empty(trim($_POST['nome'] ?? ''))) {
$erros[] = "Nome obrigatório";
}
filter_var — principais filtros
| Filtro | Tipo | O que faz |
|---|---|---|
FILTER_VALIDATE_EMAIL | Validate | Verifica se é e-mail válido (retorna valor ou false) |
FILTER_VALIDATE_INT | Validate | Verifica se é inteiro válido |
FILTER_VALIDATE_URL | Validate | Verifica se é URL válida |
FILTER_SANITIZE_NUMBER_INT | Sanitize | Extrai apenas dígitos e sinais + - |
FILTER_SANITIZE_EMAIL | Sanitize | Remove caracteres inválidos de e-mail |
FILTER_SANITIZE_STRING | Sanitize | Remove tags HTML (deprecated no PHP 8.1) |
Práticas Modernas — Formulários PHP
Validação em duas camadas: HTML5 (required, type="email", min/max) valida no cliente; PHP valida no servidor. As duas são necessárias — nunca confie só no cliente.
CSRF protection: formulários POST devem incluir um token anti-CSRF para evitar requisições forjadas. Frameworks como Laravel e Symfony geram isso automaticamente via @csrf / CSRF middleware.
Prepared Statements: ao usar dados de formulário em SQL, nunca concatene strings — use PDO com bindParam() ou execute(['campo' => $valor]).
htmlspecialchars(): ao exibir de volta na página dados enviados pelo usuário, use htmlspecialchars($valor, ENT_QUOTES, 'UTF-8') para prevenir XSS.
Enctype multipart/form-data: obrigatório para upload de arquivos junto com $_FILES.
Dicas para a prova — UA13
- A interação usuário-servidor em páginas dinâmicas ocorre por meio de formulários HTML.
- Propriedades do
<form>: name, method, action. (Não:class,to,select,input.) - Sintaxe correta para leitura POST:
$_POST['nome'](colchetes e aspas). - Tratamento de dados via scripts PHP ocorre no servidor de aplicação web.
FILTER_SANITIZE_NUMBER_INT= extrai apenas números inteiros e sinais+/-; não valida, apenas limpa.GET: dados aparecem na URL — use apenas para dados não sigilosos.isset()verifica se variável existe;empty()verifica se está vazia.strip_tags()remove tags HTML/PHP do conteúdo enviado.
Referências bibliográficas desta UA
- Saraiva, M. O. Desenvolvimento de Sistemas com PHP. Porto Alegre: SAGAH, 2018.