PHP Web Básico
Superglobais e formulários
Em PHP, superglobais são arrays especiais disponíveis em qualquer escopo do script. Elas armazenam dados da requisição, como parâmetros de URL ($_GET), dados de formulários ($_POST), cookies ($_COOKIE) e sessões ($_SESSION).
Quando um formulário HTML é enviado com método GET, os dados aparecem na URL e ficam acessíveis via $_GET. Com método POST, os dados vão no corpo da requisição e ficam em $_POST. É fundamental validar e sanitizar esses dados antes de usá-los, pois eles vêm do usuário e podem conter código malicioso.
A função filter_input() permite obter um valor de $_GET ou $_POST já filtrado, aplicando filtros como FILTER_VALIDATE_EMAIL ou FILTER_SANITIZE_STRING. Já htmlspecialchars() converte caracteres especiais em entidades HTML, evitando ataques de XSS ao exibir dados do usuário na página.
Neste card, você vai aprender a receber dados de formulários com segurança, validar campos obrigatórios e exibir os valores de volta na tela sem riscos.
Pontos-chave
$_GETe$_POSTsão superglobais que capturam dados enviados pelo cliente.filter_input()valida e sanitiza entradas de forma segura.- Sempre valide se os campos obrigatórios foram preenchidos e se o formato é válido.
- Use
htmlspecialchars()ao exibir dados do usuário para prevenir XSS.
<?php
// Exemplo: formulário simples com validação e exibição segura
// Inicializa variáveis
$nome = $email = '';
$erros = [];
// Verifica se o formulário foi enviado via POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Obtém e filtra os dados
$nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_SPECIAL_CHARS);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
// Validações
if (empty($nome)) {
$erros[] = 'O nome é obrigatório.';
}
if ($email === false || $email === null) {
$erros[] = 'E-mail inválido.';
}
}
?>
<!DOCTYPE html>
<html>
<head><title>Formulário Seguro</title></head>
<body>
<h1>Cadastro</h1>
<?php if ($erros): ?>
<ul style="color: red;">
<?php foreach ($erros as $erro): ?>
<li><?= htmlspecialchars($erro) ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<form method="post">
Nome: <input type="text" name="nome" value="<?= htmlspecialchars($nome ?? '') ?>"><br>
E-mail: <input type="text" name="email" value="<?= htmlspecialchars($email ?? '') ?>"><br>
<button type="submit">Enviar</button>
</form>
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$erros): ?>
<p>Cadastro realizado com sucesso para <strong><?= htmlspecialchars($nome) ?></strong> (<?= htmlspecialchars($email) ?>)</p>
<?php endif; ?>
</body>
</html>