Da trilha de PHP Este conceito ainda não saiu como card do dia. ir para o card de hoje

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

  • $_GET e $_POST sã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.
formulario_seguro.php
<?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>

Exercícios

  1. 1
    Fácil

    Recebendo nome via GET

    Crie um script PHP que leia o parâmetro nome da URL via $_GET e exiba uma saudação. Se o parâmetro não for informado, mostre "Olá, visitante!".

    Resolver
  2. 2
    Médio

    Validação de formulário POST

    Crie um formulário HTML com campos nome e email enviados via POST. Valide se ambos foram preenchidos e se o e-mail tem formato válido. Exiba mensagens de erro ou uma mensagem de sucesso com os dados escapados.

    Resolver
  3. 3
    Desafio

    Formulário completo com validação e feedback

    Crie um formulário de contato com campos nome, email e mensagem. Valide todos: nome não vazio, e-mail válido, mensagem com pelo menos 10 caracteres. Exiba erros específicos ou uma mensagem de sucesso com todos os dados escapados. Mantenha os valores digitados no formulário em caso de erro.

    Resolver

Continue estudando