English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá a usar os filtros PHP para limpar e validar os dados do formulário.
Como você viu no tutorial anterior, o processo de captura e exibição dos dados do formulário enviado é muito simples. Neste tutorial, você aprenderá a implementar um formulário de contato simples no seu site que permite aos usuários enviar comentários e feedback por e-mail. Usaremos o mesmoFunção PHP mail()para enviar e-mails.
Também implementaremos algumas funcionalidades básicas de segurança, como limpeza e validação do conteúdo da entrada do usuário, para que os usuários não possam inserir dados potencialmente maliciosos que possam comprometer a segurança do site ou danificar a aplicação.
Aqui está nosso script PHP multiuso, que executa as seguintes operações:
Ele exigirá que o usuário insira seus comentários sobre o site.
O mesmo script exibe o formulário de contato e trata os dados do formulário enviado.
O script limpa e valida a entrada do usuário. Se qualquer campo obrigatório (marcado*),ou devido a entrada incorreta que resultou em falha de validação, o formulário será redisplayado e uma mensagem de erro correspondente será exibida para o campo de formulário correspondente.
O script lembrará dos campos preenchidos pelo usuário e preencherá esses campos novamente ao redisplayar o formulário devido a erros de validação.
Se os dados enviados pelo usuário forem aceitáveis e tudo der certo, o e-mail será enviado para o administrador do site e uma mensagem de sucesso será exibida para o usuário.
Insira o seguinte código no arquivo "contact.php" e salve-o na raiz do projeto:
<?php //Função de filtragem de entrada do usuário function filterName($field){ //Limpar nome de usuário $field = filter_var(trim($field), FILTER_SANITIZE_STRING); //Verificar o nome do usuário if(filter_var($field, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){ return $field; } else{ return FALSE; } } function filterEmail($field){ //Limpar endereço de e-mail $field = filter_var(trim($field), FILTER_SANITIZE_EMAIL); // Verificar o endereço de e-mail se(filter_var($field, FILTER_VALIDATE_EMAIL)){ return $field; } else{ return FALSE; } } function filterString($field){ // Limpar a string $field = filter_var(trim($field), FILTER_SANITIZE_STRING); if(!empty($field)){ return $field; } else{ return FALSE; } } //Definir variáveis e inicializá-las com valores vazios $nameErr = $emailErr = $messageErr = ""; $name = $email = $subject = $message = ""; //Manter dados do formulário ao submeter if($_SERVER["REQUEST_METHOD"] == "POST"){ // Verificar o nome do usuário if(empty($_POST["name"])){ $nameErr = "Por favor, insira seu nome."; } else{ $name = filterName($_POST["name"]); if($name == FALSE){ $nameErr = "Por favor, insira um nome válido."; } } // Verificar o endereço de e-mail if(empty($_POST["email"])){ $emailErr = "Por favor, insira seu endereço de e-mail."; } else{ $email = filterEmail($_POST["email"]); if($email == FALSE){ $emailErr = "Por favor, insira um endereço de e-mail válido."; } } // Validar o assunto da mensagem if(empty($_POST["subject"])){ $subject = ""; } else{ $subject = filterString($_POST["subject"]); } // Verificar o comentário do usuário if(empty($_POST["message"])){ $messageErr = "Por favor, insira seu comentário."; } else{ $message = filterString($_POST["message"]); if($message == FALSE){ $messageErr = "Por favor, insira um comentário válido."; } } //Verifique os erros de entrada antes de enviar o e-mail if(empty($nameErr) && empty($emailErr) && empty($messageErr)){}} // Recipient email address $to = '[email protected]'; // Create email headers $headers = 'From: 'Reply-To: 'X-Mailer: PHP/' . phpversion(); // Sending email if(mail($to, $subject, $message, $headers)){ echo '<p class="success">Sua mensagem foi enviada com sucesso!';/p>'; } else{ echo '<p class="error">Não foi possível enviar o e-mail. Por favor, tente novamente!';/p>'; } } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8> <title>Contact Form</title> <style type="text/css"> .error{ color: red; } .success{ color: green; } </style> </head> <h2>Contacte-nos</h2> <p>Por favor, preencha este formulário e nos envie</p> <form action="contact.php" method="post"> <p> <label for="inputName">Name:<sup>*</sup></label> <input type="text" name="name" id="inputName" value="<?php echo $name; ?>"> <span class="error"><?php echo $nameErr; ?>/span> </p> <p> <label for="inputEmail">Email:<sup>*</sup></label> <input type="text" name="email" id="inputEmail" value="<?php echo $email; ?>"> <span class="error"><?php echo $emailErr; ?>/span> </p> <p> <label for="inputSubject">Assunto:</label> <input type="text" name="subject" id="inputSubject" value="<?php echo $subject; ?>"> </p> <p> <label for="inputComment">Mensagem:<sup>*</sup></label> <textarea name="message" id="inputComment" rows="5" cols="30><?php echo $message; ?>/textarea> <span class="error"><?php echo $messageErr; ?>/span> </p> <input type="submit" value="Enviar"> <input type="reset" value="Redefinir"> </form> </html>
Você pode pensar sobre o significado total do código. Bem, vamos direto ao ponto.
A função filterName() verifica se o valor de entrada é um nome. Os nomes válidos podem conter apenas caracteres alfabéticos (a-z, A-Z).
A função filterEmail() valida o valor de entrada como um endereço de e-mail.
A função filterString() limpa o valor de entrada apenas através da limpeza de tags HTML e caracteres especiais. Ela não valida nenhum valor de entrada.
dentro da marcação<form>A propriedade action="contact.php" do atributo especifica o mesmo arquivo contact.php para exibir o formulário e manipular os dados do formulário.
<input>e<textarea>da propriedade value contendo código PHP, por exemplo<?php echo $name; ?>ao validar erros no formulário, exibir valores preenchidos previamente.
.classe error contendo código PHP, por exemplo<span class="error"><?php echo $nameErr; ?>/span>Mostrar o erro do campo correspondente.
Para obter mais informações sobre limpeza e validação de filtros, consulteFiltros PHPReferência.
Atenção:Você precisa configurar o servidor de e-mail no computador para que a função PHP mail() funcione corretamente. Se você quiser apenas executar a validação do formulário, pode substituir a parte do e-mail por seu código personalizado.