🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

[Introdução ao PHP] O Coração de um Site! Como Receber Dados de Formulários

Um "Formulário de Contato" é essencial para qualquer site. É uma janela vital que conecta os operadores do site com os visitantes, permitindo que você receba perguntas e feedback — verdadeiramente o coração de um site. No entanto, muitas pessoas podem achar difícil, pensando: "Quero criar um formulário, mas como recebo os dados inseridos?"

Este artigo explicará cuidadosamente o processo central de "receber dados de um formulário HTML com PHP e exibi-los em uma página de confirmação" de uma maneira que até mesmo os iniciantes possam entender. Desta vez, usando um formulário de e-mail simples com três campos —`name`, `email`, `message`— como exemplo, aprenderemos como implementar tanto o formulário de entrada quanto a tela de confirmação em um único arquivo. Preparamos um código que funciona apenas copiando e colando, então, por favor, experimente a alegria de fazer as coisas "funcionarem"!

Para preparar seu ambiente para rodar o PHP (ambiente de desenvolvimento), se você ainda não configurou o XAMPP, por favor, consulte [Introdução ao PHP] Um Guia Completo para Baixar e Instalar o XAMPP!. Após a instalação, basta colocar seu arquivo PHP na pasta especificada (como `htdocs`), e você estará pronto!

1. Como Funcionam os Formulários Web: HTML e PHP Trabalhando Juntos

Um formulário web é composto, em geral, por duas partes.

  1. HTML: A parte "visual" onde os usuários inserem texto.
  2. PHP: A parte "dos bastidores" que recebe и processa os dados enviados.

Primeiro, vamos dar uma olhada na tag <form> do HTML. Este é o corpo do formulário.

<!-- Especificar o destino de envio de dados (action) e o método (method) -->
<form action="receive.php" method="POST">
    <!-- Cada campo de entrada recebe um "nome (name)" para receber os dados no PHP -->
    <p>Nome: <input type="text" name="user_name"></p>
    <p>E-mail: <input type="email" name="user_email"></p>
    <p><button type="submit">Enviar</button></p>
</form>

As partes importantes são `method="POST"` e o atributo `name` de cada campo de entrada. `POST` é um método seguro para enviar dados sem exibi-los na URL, e é comumente usado para formulários. O nome atribuído ao atributo `name` se torna a "chave" para receber os dados no lado do PHP.

No lado do PHP, você usa uma variável especial chamada `$_POST` (uma variável superglobal) para receber os dados. Ao especificar o atributo `name` do HTML como a chave, como em `$_POST['user_name']`, você pode recuperar o valor inserido.

<?php
// Exibe os dados enviados do campo de entrada chamado "user_name"
echo $_POST['user_name'];

// Exibe os dados enviados do campo de entrada chamado "user_email"
echo $_POST['user_email'];

// Verifica todos os dados enviados via POST (para depuração)
print_r($_POST);
?>

Essa colaboração entre HTML e PHP é o mecanismo básico dos formulários web.

2. Na Prática! Criando um Formulário de Entrada e Tela de Confirmação em um Único Arquivo

Agora, vamos implementar a funcionalidade de um formulário de entrada e uma tela de confirmação em um único arquivo PHP. A vantagem deste método é que o gerenciamento de arquivos se torna mais simples. O código a seguir é uma amostra completa que você pode copiar e colar em um arquivo para verificar imediatamente sua operação em um navegador.

<!DOCTYPE html>
<html lang="pt">
<head>
    <meta charset="UTF-8">
    <title>Formulário de Contato</title>
    <style>
        body { font-family: sans-serif; line-height: 1.7; padding: 20px; max-width: 600px; margin: auto; }
        .form-group { margin-bottom: 15px; }
        label { display: block; margin-bottom: 5px; font-weight: bold; }
        input[type="text"], input[type="email"], textarea {
            width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box;
        }
        textarea { height: 120px; }
        .confirmation-table { width: 100%; border-collapse: collapse; }
        .confirmation-table th, .confirmation-table td { border: 1px solid #ddd; padding: 12px; text-align: left; }
        .confirmation-table th { background-color: #f2f2f2; width: 30%; }
        button { padding: 10px 20px; border: none; background-color: #007bff; color: white; border-radius: 4px; cursor: pointer; }
        button:hover { background-color: #0056b3; }
    </style>
</head>
<body>

    <?php
    // Ramifica o processo dependendo se há uma requisição POST
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        // --- Exibe a tela de confirmação ---
        $name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
        $email = htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8');
        $message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
    ?>
        <h1>Confirmação dos Dados Inseridos</h1>
        <p>Se o conteúdo a seguir estiver correto, por favor, pressione o botão de envio.</p>
        <table class="confirmation-table">
            <tr>
                <th>Nome</th>
                <td><?php echo $name; ?></td>
            </tr>
            <tr>
                <th>E-mail</th>
                <td><?php echo $email; ?></td>
            </tr>
            <tr>
                <th>Conteúdo da Mensagem</th>
                <td><?php echo nl2br($message); ?></td>
            </tr>
        </table>
        <p>*Nota: Esta amostra não realiza o envio real de e-mail.</p>

    <?php } else { ?>
        // --- Exibe o formulário de entrada ---
        <h1>Contato</h1>
        <form action="" method="POST">
            <div class="form-group">
                <label for="name">Nome</label>
                <input type="text" id="name" name="name" required>
            </div>
            <div class="form-group">
                <label for="email">E-mail</label>
                <input type="email" id="email" name="email" required>
            </div>
            <div class="form-group">
                <label for="message">Conteúdo da Mensagem</label>
                <textarea id="message" name="message" required></textarea>
            </div>
            <button type="submit">Confirmar Dados</button>
        </form>
    <?php } ?>

</body>
</html>

O ponto principal deste código é a ramificação condicional `if ($_SERVER['REQUEST_METHOD'] === 'POST')`. A variável `$_SERVER['REQUEST_METHOD']` armazena o método de acesso à página (GET ou POST).

Além disso, ao deixar o atributo `action` do formulário vazio, como `action=""`, os dados são enviados para o próprio arquivo. Isso permite que você represente duas telas com um único arquivo.

3. Pontos a Serem Observados (Validação de Entrada)

Em um site real, é possível que os usuários não insiram nada ou enviem dados maliciosos. Portanto, um processo chamado **validação**, que verifica se os dados recebidos são os esperados, é essencial.

Aqui, vamos adicionar uma validação simples para verificar se cada campo não está vazio.

<?php
// Processamento do lado da tela de confirmação (dentro da declaração if)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $errors = []; // Array para armazenar mensagens de erro

    // Validação do nome
    if (empty($name)) {
        $errors[] = 'O nome é obrigatório.';
    }

    // Validação do e-mail
    if (empty($email)) {
        $errors[] = 'O e-mail é obrigatório.';
    } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = 'O formato do e-mail está incorreto.';
    }

    // Validação do conteúdo da mensagem
    if (empty($message)) {
        $errors[] = 'O conteúdo da mensagem é obrigatório.';
    }

    // Ramifica o processo dependendo se há erros
    if (!empty($errors)) {
        // Se houver erros: exibe as mensagens de erro
        echo '<h1>Erro de Entrada</h1>';
        echo '<ul style="color: red;">';
        foreach ($errors as $error) {
            echo '<li>' . htmlspecialchars($error) . '</li>';
        }
        echo '</ul>';
        echo '<a href="javascript:history.back();">Voltar ao formulário</a>';
    } else {
        // Se não houver erros: exibe a tela de confirmação
        // ... (código de exibição da tela de confirmação do exemplo anterior) ...
    }
}
?>

Neste exemplo, usamos `empty()` para verificar se cada entrada não está vazia, e a útil função `filter_var()` para validar se o formato do e-mail está correto. Isso cria um fluxo mais prático onde mensagens de erro são exibidas se houver erros, e o usuário prossegue para a tela de confirmação se não houver.

4. Resumo e Próximos Passos

Neste artigo, aprendemos o mecanismo básico dos formulários web e todo o processo desde o recebimento de dados com PHP até a exibição de uma tela de confirmação. A variável `$_POST` e a ramificação do processo com uma declaração `if` são as partes centrais da criação de um formulário. A funcionalidade de envio de e-mail é um pouco mais complexa, pois envolve configurações do servidor, mas se você dominar este fluxo da entrada à confirmação, poderá aplicá-lo a qualquer formulário.

Quanto aos próximos passos, eles incluem:

Abordaremos esses tópicos em detalhes em outra ocasião. Por enquanto, tente criar seu próprio formulário original com base neste código!