Formulário com validação com Captcha

Neste exemplo de formulário em PHP vamos utilizar o Captcha que força o usuário a digitar o código correto mostrado na tela antes de enviar o e-mail pelo formulário do site. Se o usuário digitar o código informado errado, o sistema Captcha vai gerar outro não permitindo o envio do e-mail.

Caso deseja mais informações sobre Captcha, acesse http://pt.wikipedia.org/wiki/CAPTCHA.



Arquivo contato

O arquivo HTML foi criado em PHP já que precisamos verificar se existe uma requisição POST para dar o include do arquivo enviar.php, onde este mostrara as mensagens de erro ou envio no próprio arquivo contato.php.

<?php 
$nome = "";
$email = "";
$assunto = "";
$msg = "";

?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
<title>Formulário de Contato</title>
</head>
<body>
<?php 
	//Se existir uma requisição POST da o include da página enviar.php
	 if ($_SERVER['REQUEST_METHOD'] == 'POST'){
		   include("enviar.php");
	 }
?>
<br /><br />
<form  name="contato" id="formcontato" method="POST" action="contato.php">
<h1>Contato</h1><br/>
  <fieldset style="border:0;">
     
	  <label>Nome:</label>
	  <input name="nome" type="text" id="nome" size="30" maxlength="50" value="<?php echo $nome; ?>" /><br /><br />
	  <label>E-mail:</label>
	  <input name="email" type="text" id="email" size="30" maxlength="100" value="<?php echo $email; ?>" /><br /><br />
	  <label>Assunto:</label>
	  <input name="assunto" type="text" id="assunto" size="30" maxlength="20" value="<?php echo $assunto; ?>"/><br /><br />
	  <label>Mensagem:</label><br /><br />
	  <textarea rows="5" cols="23" id="msg" name="msg"><?php echo $msg;?></textarea><br /><br />
	  <img id="captcha" src="/formcaptcha/securimage/securimage_show.php" alt="CAPTCHA Image" /><br/><br/>
	  Digite o código acima<br/>
	  <input type="text" name="captcha_code" id="captcha_code" size="10" maxlength="6" /> <br/>
	  <input  type="submit" name="enviar" value="Enviar" /> 
  </fieldset> 
 </form>

</body>
</html>

Arquivo de envio

No arquivo enviar.php verificamos primeiro se os campos estão preenchidos e também se o código Captcha é válido, caso usuário deixe de preencher algum campo no formulário mostra o erro no arquivo enviar.php no próprio formulário de contato, caso todos os campos estejam preenchidos corretos ai coloca o formulário como não visível e mostra a mensagem que o e-mail foi enviado com sucesso ou o erro no procedimento do envio. Para usar este formulário com Captcha acesse o site e baixe os arquivos necessários para validar o Captcha http://www.phpcaptcha.org/download/

<?php

$erro = "";
 
	if ($_SERVER['REQUEST_METHOD'] == 'POST'){
				
				
			/*Variaveis do Formulario*/
			$nome = trim($_POST['nome']);/*recebe os dados digitados no campo "nome"*/
			$email = trim($_POST['email']);/*recebe os dados digitados no campo "email"*/
			$assunto = trim($_POST['assunto']);/*recebe os dados digitados no campo "assunto"*/
			$msg= trim($_POST['msg']);/*recebe os dados digitados no campo "mensagem"*/



				if($nome == ""){
				$erro = "Preencha campo nome"."<br />";
				
				}

				 //Verifica se o e-mail é válido 
				$emailPattern = '/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i'; 
				if (!preg_match($emailPattern, $email)) { 
					$erro .= "Por favor verifique o endereço de e-mail"."<br />"; 
				  
				}
				
				if($msg == ""){
					$erro .= "Preencha campo mensagem"."<br />";
				
				}

				
				if(isset($erro)){ 
					echo $erro;
					
				}
				
				//Parte que válida o código captcha
				include_once $_SERVER['DOCUMENT_ROOT'] . '/formcaptcha/securimage/securimage.php';

				$securimage = new Securimage();
      
				if ($securimage->check($_POST['captcha_code']) == false) {
					echo 'Digite corretamente o código<br />';
				}else{
				    $captchaValida = "ok";
				}
				//Fim válida captcha
				
				//Se não tem nenhum erro e captcha é válida faz o procedimento de envio do e-mail
				if(empty($erro) && isset($captchaValida)){
				
				//Bloco que envia o e-mail
					$emailMsg  = "<font face=\"Arial\" size=\"2\"><h3>Contato Site:</h3>";
					$emailMsg .= "Data: " . date("d/m/Y H:i:s") . "<br />";
					$emailMsg .= "---------------------------------<br /><br />";
					$emailMsg .= "<b> Nome     : </b>" . $nome . "<br />";
					$emailMsg .= "<b> E-mail   : </b>" . $email . "<br />";
					$emailMsg .= "<b> Assunto  : </b>" . $assunto. "<br />";
					$emailMsg .= "<b> Mensagem : </b>" . $msg . "<br />";



					$emailMsg .= "<br />---------------------------------<br /><br />";
					$emailMsg .= "IP Cliente: " . $_SERVER["REMOTE_ADDR"]  . "<br /></font>";


					$headers  = 'MIME-Version: 1.0' . "\r\n";
					$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
					$headers .= 'From: Contato Site <'.$email.'>' . "\r\n";
					
					$subject ="teste";
					$destinatario ="coloque aqui o e-mail que vair receber os e-mails";
					$envio = mail($destinatario, $subject, $emailMsg, $headers);

						if($envio){
						  echo "<span>".$nome." Mensasgem enviada</span>";
							}else{
						  echo "<span>".$nome." Ouve um erro ao enviar o e-mail tente novamente</span>";
						}
				   //Fim bloco e-mail
				
?>
						<script type="text/javascript"> 
						
						//<![CDATA[
						
						//Se não tem erro não mostra o formulário contato
						$(document).ready(function(){ 
							
							$('#formcontato').hide();
																								
						});
						
						// ]]>
						 
						</script>

<?php
				}
				

		  
				
	}//Fim do POST
?>