Validando formulário de E-mail com PHP

Novo aqui no site? Talvez gostaria de assinar o
RSS feed do site?

Publicado em: 14/01/2008
Área: PHP
Visualizações: 7.330
Comentário(s): 10

imprimir envie por e-mail compartilhe
Boa noite a todos!

Em primeiro lugar, gostaria de desejar um Feliz 2008 a todos.
Estou voltando das férias agora, e já deixo um artigo muito útil para todos.

Desde que lançei meu artigo sobre a criação de um formulário de e-mail com resposta automática:

http://www.oficinadanet.com.br/artigo/640/formulario_de_email_em_php_com_resposta_automatica

Recebi centenas de e-mails de teste dos leitores do site. Mas uma coisa me chamou a atenção: 99% das pessoas deixaram algum campo sem preenchimento, ou não os preencheram corretamente. Então tive a idéia de criar uma validação simples, porém eficaz para este formulário.

Quando decidi fazer, pensei logo no Javascript, pois me daria velocidade. Mas essa linguagem não é segura para validações, uma vez que qualquer pessoa pode desativar o Javascript através das opções do navegador. Nesse caso, a melhor solução é validar o formulário pelo próprio PHP.

Segue abaixo o código com o acréscimo da validação. Logo após virá a explicação:

<?php

/* Enviar E-mail com Resposta Automática
* Desenvolvido por: Gabriel Pinheiro
* Data: 04/12/2007
*/


// Recebendo os dados passados pela página "form_contato.php"

$recebenome = $_POST['nome" target="_blank">;
$recebemail = $_POST['email" target="_blank">;
$recebemsg  = $_POST['mensagem" target="_blank">;


/* Validando os dados do formulário
* Adicionado dia 14/01/2008
* Por: Gabriel Pinheiro
*/

// Proibindo que os campos fiquem em branco

if (($recebenome == "") || ($recebemail == "") || ($recebemsg == ""))
  {
    echo "<script>alert('Nenhum campo pode ficar em branco.');</script>";
echo "<script>history.go(-1);</script>";
  }


// Validando o campo com E-mail

if (substr_count($recebemail,"@") == 0 || substr_count($recebemail,".") == 0)
  {
   echo "<script>alert('Por favor, utilize um e-mail válido');</script>";
   echo "<script>history.go(-1);</script>";
   }

// Definindo os cabeçalhos do e-mail
$headers = "Content-type:text/html; charset=iso-8859-1";

// Vamos definir agora o destinatário do email, ou seja, VOCÊ ou SEU CLIENTE

$para = "gabrielmpinheiro@gmail.com";

// Definindo o aspecto da mensagem

$mensagem   = "<h3>De:</h3> ";
$mensagem  .= $recebenome . $recebemail;
$mensagem  .= "<h3>Assunto:</h3>";
$mensagem  .= "Mensagem do Site";
$mensagem  .= "<h3>Mensagem</h3>";
$mensagem  .= "<p>";
$mensagem  .= $recebemsg;
$mensagem  .= "</p>";

// Enviando a mensagem para o destinatário

$envia =  mail($para,"E-mail do Site",$mensagem,$headers);
  
// Envia um e-mail para o remetente, agradecendo a visita no site, e dizendo que em breve o e-mail será respondido.

$mensagem2  = "<p>Olá <strong>" . $recebenome . "</strong>. Agradeçemos sua visita e a oportunidade de recebermos o seu contato. Em até 48 horas você receberá no e-mail fornecido a resposta para sua questão.</p>";
$mensagem2 .= "<p>Observação - Não é necessário responder esta mensagem.</p>";

$envia =  mail($recebemail,"Sua mensagem foi recebida!",$mensagem2,$headers);


// Exibe na tela a mensagem de sucesso, e depois redireciona devolta para a página de contato.
  
echo "Mensagens Recebidas com Sucesso!";
echo "<meta http-equiv='refresh' content='2;URL=form_contato.php'>";


?>


O trecho da linha 23 até a linha 27 faz uma verificação nas variáveis, e utilizo o operador OR "||" para que qualquer dos campos que não tiver conteúdo faça a mensagem de erro aparecer.

Já o trecho das linhas 32 a 36 varrem a variável que tem o e-mail à procura do símbolo arroba "@" e do símbolo ".", que são obrigatórios em 100% dos e-mails. Se não os encontrar, ele retornará um erro também.

Vale lembrar de que este método não é 100% eficaz, uma vez que existem milhares de técnicas avançadas para a validação de formulários. Porém, com esse pequeno código, você terá uma redução drástica no número de e-mails recebidos sem remetente, por exemplo.

Se quiserem ver o formulário funcionando, acessem o endereço:
http://www.gabrielpinheiro.com/tutoriais/email/form_contato.php

Forte abraço e até a próxima

veja mais
Preencha o formulário para comentar:
Nome:*

E-mail:* (não será exibido)

Site: (http://)

Comentário:*

Deseja receber os comentários no e-mail?

Anti-spam: (nova imagem)





Gabriel Pinheiro

   - Publicado em: 23/01/2008 - 09:06

Olá pessoal! Nas linhas em que temos o seguinte: $recebenome = $_POST['nome" target="_blank">; $recebemail = $_POST['email" target="_blank">; $recebemsg = $_POST['mensagem" target="_blank">; porfavor, o correto é: $recebenome = $_POST['nome']; $recebemail = $_POST['email']; $recebemsg = $_POST['mensagem']; Houve algum bug na hora de registrar o artigo, por favor, acertem este pedaço de código. Valeu e Abraços!

 

Adriana

   - Publicado em: 04/05/2008 - 21:16

Olá, fiz alguns testes neste formulário e percebi que quando deixamos de preencher algum campo ele manda a mensagem que é necessário efetuar a correção, so que mesmo assim a mensagem é enviado para o email. Não te como só enviar a mensagem quando todos os campos estiverem corretos? Grata Adriana

 

Geraldo

   - Publicado em: 23/05/2008 - 09:34

Quando desativado o javascript isso não irá funcionar, já que continua utilizando js.

 

Guilherme

   - Publicado em: 27/05/2008 - 17:48

Quando o visitante recebe o email recebe de "Nobody". Como eu altero o remetente da mensagem ao visitante?

 

Leandro

   - Publicado em: 16/06/2008 - 22:36

Coloca um exit ao final de cada instrução if If bla bla bla { echo1; echo2; exit; } havia colocado o código na integra, mas o formulário deste site não permitiu o envio por motivo de segurança.

 

Leandro

   - Publicado em: 07/07/2008 - 21:14

Adriana, Coloca um exit ao final de cada instrução if If bla bla bla { echo1; echo2; exit; } havia colocado o código na integra, mas o formulário deste site não permitiu o envio por motivo de segurança.

 

Luiz Roberto Abrantes

   - Publicado em: 04/09/2008 - 19:41

Existiria alguma outra forma de validação do e-mail? Pois assim, qqr coisa que tenha @ é dado como válido... Este tópico está muito bom, acertei de primeira a configuração de meu formulário.

 

Luiz Roberto Abrantes

   - Publicado em: 04/09/2008 - 20:49

Outra pergunta, naquela resposta que aparece na tela, tem como colocarmos uma imagem? Seja, gif, jpg, ou gif animada? Abços

 

Lionel Bruno Mello

   - Publicado em: 29/10/2008 - 14:37

Embaixo de cada verificação esta faltando o "return false;" para que os dados não sejam enviados mesmo com campos em branco, ex.: if (($nome == "") || ($email_user == "") || ($data_nasc == "")) { echo "<script>alert('Nenhum campo pode ficar em branco.');</script>"; echo "<script>history.go(-1);</script>"; return false; } tem que ser colocado o return false no final das duas validações para que o php não envie os dados mesmo se algum campo estiver em branco. Abraços, Lionel Mello.

 

Beto Lima

   - Publicado em: 08/11/2008 - 11:19

Ola Gabriel, queria parabenizar pelo form...bem bom mesmo. Queria saber uma coisa, eu implantei ele no meu site e funciona beleza. Só tem um porém, quando recebo o email, o campo De: aparece assim: Nobody. e o email deste fica assim: nobody@kamotini.kinghost.net Há uma forma de eu mudar isso, tipo colocar meu email ali? Obrigado

 

Autor da matéria
Gabriel Pinheiro
Gabriel Pinheiro é estudante de Sistemas de Informação pelo Centro Universitário São Camilo - ES. Possui 4 anos de experiência com Internet, tendo atuado como W.

Todas as matérias de Gabriel Pinheiro

Publicidade
Seguir o Oficina da Net
RSS

RSS

RSS
Top matérias do mês
Matérias relacionadas
Tags
» php
» e-mail
» javascript
»

© 2005 - 2009 - Oficina da Net - v 4.0 - É proibida a reprodução parcial ou completa do conteúdo deste site sem autorização por escrito. Resolução adequada: 1024x768px.