[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.
- HTML: A parte "visual" onde os usuários inserem texto.
- 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).
- Quando você abre a página pela primeira vez: é um acesso normal, então é `GET`. A declaração `if` é `false`, e o formulário de entrada dentro do bloco `else` é exibido.
- Quando você envia o formulário: ele é enviado com `method="POST"`, então a declaração `if` é `true`, e a tela de confirmação é exibida.
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:
- O processo de enviar um e-mail de fato usando a função `mb_send_mail()` do PHP quando o botão "Enviar" é pressionado na tela de confirmação.
- Validação mais avançada (limites de caracteres, permitir apenas tipos específicos de caracteres, etc.).
- Redirecionamento para uma "página de agradecimento" após a conclusão do envio.
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!