Início

Responsive Web Development

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>
Como PHP recebe dados do formulário
Do formulário HTML ao PHP: o ciclo completo

Atributos essenciais do <form>

AtributoFunção
nameIdentifica o formulário na página (pode haver múltiplos)
methodMétodo HTTP de envio: get ou post
actionURL do script que receberá os dados; sem ele, envia para a própria página
submitBotão que dispara a submissão

GET vs POST

GETPOST
Onde os dados ficamNa URL: ?nome=Ana&email=…No corpo da requisição — invisível na URL
SegurançaInseguro — dados visíveis e alteráveis pelo usuárioMais seguro — dados ocultos
Superglobal PHP$_GET[‘campo’]$_POST[‘campo’]
Uso recomendadoPesquisas, filtros (dados não sigilosos)Cadastros, logins, dados sensíveis
Interatividade Web: Formulários HTML e PHP — ciclo Browser → Servidor, comparação GET vs POST, captura com $_GET e $_POST
Formulários HTML + PHP: GET vs POST

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

FiltroTipoO que faz
FILTER_VALIDATE_EMAILValidateVerifica se é e-mail válido (retorna valor ou false)
FILTER_VALIDATE_INTValidateVerifica se é inteiro válido
FILTER_VALIDATE_URLValidateVerifica se é URL válida
FILTER_SANITIZE_NUMBER_INTSanitizeExtrai apenas dígitos e sinais + -
FILTER_SANITIZE_EMAILSanitizeRemove caracteres inválidos de e-mail
FILTER_SANITIZE_STRINGSanitizeRemove 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.