Formulário de cadastro e confirmação de e-mail com PHP
Autor: Claudeci Goularte | Publicado: 2010-01-29T14:03:00-02:00

Neste post, tentarei passar uma forma simples e rápida de criarmos uma página de cadastro, com envio de e-mail de link para confirmação do mesmo. Nesta página faremos de uma forma bem simles mesmo, mas você pode alterar o código da forma que desejar. Pois a minah intenção não será de elaborar o melhor código possível, mas sim, ajudar a ter uma noção de como fazer.


Seja sempre curioso, esqueça do Ctrl V e Ctrl C, tente digitar novamente o código para decorar, ou melhor, aprender a lógica criada na página, assim poderemos contruir uma web melhor. Mas enquanto isso não acontece, vamos ao código.

Eu estou utilizando a Classe PHPMAILER, você pode fazer o download do arquivo PHPMAILER cliacando aqui.

Com a classe em sua máquina, vamos criar nosso banco de dados mysql. Execute o script abaixo:

CREATE DATABASE `teste`;
USE `teste`;

CREATE TABLE `cadastro` (
`cadastrocod` INT (5) UNSIGNED ZEROFILL AUTO_INCREMENT, 
`nome_user` VARCHAR (150), 
`email_user` VARCHAR (150), 
`confir_email_user` CHAR (1) DEFAULT 'N', 
PRIMARY KEY(`cadastrocod`)
) TYPE = MyISAM;

Agoa com o banco de dados e nossa tabela criada, faça uma conexao com ela (esta parte não explicarei neste post), feita a conexao, vamos a página que interessa. Segue o código abaixo:
cadastro.php

&lt;?php
include 'conexao.php';
Abre_Conexao();
if($_SERVER["REQUEST_METHOD"] == "POST"){ //IF 1
mysql_query("Insert Into cadastro (`nome_user`,`email_user`) Values ('".$_POST['nome']."','".$_POST['email']."')");
if(mysql_affected_rows()==0){
$erro[] = 'Não foi possível realizar o cadastro';
}else{
/*ENVIANDO COM PHPMAILER*/
/* INCLUI A PÁGINA DA CLASS*/ 
include("phpmailer/class.phpmailer.php"); 
/*CORPO DO E-MAIL*/ 
$html = " 
&lt;html&gt; 
&lt;body&gt; 
Olá ".$_POST['nome'].", seu cadastro foi realizado, mas para ter acesso ao conteúdo, clique no link abaixo para confirmar seu endereço de e-mail.&lt;br&gt;&lt;br&gt;
&lt;a href='http://www.seusite.com.br/cadastro.php?email_confirm=".$_POST['email']."' target='_blank'&gt;Ativar/Validar e-mail&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Atenciosamente,&lt;br&gt;
Admin.
&lt;/body&gt; 
&lt;/html&gt;"; 
/*INSTANCIA A OBJETOS*/ 
$mail = new PHPMailer(); 
/*MANDAR VIA SMTP*/ 
$mail-&gt;IsSMTP(); 
/*SERVIDOR SMTP*/ 
$mail-&gt;Host = "mail.seusite.com.br"; 
/*HABILITA SMTP AUTENTICADO - NAO ALTERAR */ 
$mail-&gt;SMTPAuth = true; 
/*USUARIO DESTE SERVIDOR SMTP*/ 
$mail-&gt;Username = "seuemail@seusite.com.br"; 
/*SENHA USUARIO DESTE SERVIDOR SMTP*/ 
$mail-&gt;Password = "*****"; 
/*E-MAIL UTILIZADO PARA ENVIO, PODER SER O MESMO DO USERNAME*/ 
$mail-&gt;From = 'seuemail@seusite.com.br'; 
$mail-&gt;FromName = 'seuemail@seusite.com.br'; //Ex: nome_aqui (email@dominio.com) 
/*WRAP SET O TAMANHO DO TEXTO POR LINHA*/ 
$mail-&gt;WordWrap = 50; 
/*ENVIAR EM HTML*/ 
$mail-&gt;IsHTML(true); 
/*INFORMANDO O E-MAIL DO REMETENTE*/ 
$mail-&gt;AddReplyTo('seuemail@seusite.com.br','seuemail@seusite.com.br'); 
/*LISTA DE ENDEREÇOS QUE DEVE SER MANDADO O E-MAIL*/ 
$mail-&gt;AddAddress($_POST['email'],'Sr(a).'.$_POST['nome']); 
$msg = $html; 
/*O ASSUNTO DO E-MAIL*/ 
$mail-&gt;Subject = "Confirmacao de Cadastro"; 
/*ADICIONANDO O HTML NO CORPO DO E-MAIL*/ 
$mail-&gt;Body = $msg; 
/*DEFININDO A LINGUAGEM*/ 
$mail-&gt;SetLanguage("br", "phpmailer/language/"); 
/*ENVIANDO E RETORNANDO STATUS DO ENVIO*/ 
if(!$mail-&gt;Send()){ 
/*ERRO NO ENVIO*/ 
echo "Ocorreu um erro no envio do e-mail. Erro: ".$mail-&gt;ErrorInfo; //FUNCAO INFORMA O ERRO OCORRIDO // 
exit; 
} 
/*FECHA ENVIO DE PHPMAILER*/
}
}
?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Fixa de Cadastro&lt;/title&gt;
&lt;style&gt;
body{font-family:Arial; font-size:12px;}
form{background:#CCCCCC; border:solid 1px; width:500px; padding:10px;}
&lt;/style&gt;
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?
if(isset($erro)){//IF 0
foreach($erro as $erros){
echo $erros.'&lt;br&gt;&lt;br&gt;';
}
?&gt;
&lt;a href="&lt;?=$_SERVER['PHP_SELF']?&gt;"&gt;voltar a ficha de cadastro&lt;/a&gt;
&lt;?
}else{//ELSE IF 0
if($_SERVER["REQUEST_METHOD"] != "POST" &amp;&amp; !isset($_GET['email_confirm'])){ //IF 1
?&gt;
Ol&amp;aacute;, seja bem vindo. Preencha o formul&amp;aacute;rio abaixo e cadastre-se gratuitamente.&lt;br&gt;&lt;br&gt;
&lt;form action="&lt;?=$_SERVER['PHP_SELF']?&gt;?cadastrar" method="post"&gt;
&lt;div style="float:left; width:50px;"&gt;Nome:&lt;/div&gt;&lt;div&gt;&lt;input type="text" name="nome" value="" maxlength="100" size="40"/&gt;&lt;/div&gt;
&lt;div style="float:left; width:50px;"&gt;E-mail:&lt;/div&gt;&lt;div&gt;&lt;input type="text" name="email" value="" maxlength="100" size="50"/&gt;&lt;/div&gt;
&lt;div style="width:50px; margin-top:10px;"&gt;&lt;input type="submit" value="cadastrar"&gt;&lt;/div&gt;
&lt;/form&gt;
&lt;?
}else{
if(isset($_POST['nome'])||isset($_POST['email'])||$_GET['email_confirm']){
if(isset($_GET['email_confirm'])){//IF 2
$sql_cadastros = mysql_query("Update `cadastro` Set `confir_email_user`='S' Where email_user='".$_GET['email_confirm']."'")or die(mysql_error());
if(mysql_affected_rows()&gt;0){//IF 3
?&gt;
Seu e-mail foi confirmado e seu cadastro foi ativado!
&lt;?
}else{//ELSE IF 3
?&gt;
Este e-mail não consta em nossos registros.
&lt;?
}//FECHA IF 3
}else{ //ELSE IF 2
?&gt;
Seu cadastro foi realizado com sucesso!&lt;br&gt;&lt;br&gt; Enviamos uma confirma&amp;ccedil;&amp;atilde;o de cadastro para o e-mail informado.&lt;br&gt;&lt;br&gt; Clique no link contido no e-mail para ativar seu cadastro!
&lt;?
} //FECHA IF 2
}else{
?&gt;
Pedido inválido
&lt;?
}
} //FECHA IF 1
}//FECHA IF 0
?&gt;
&lt;/body&gt;
&lt;/html&gt;

Este código utiliza a mesma página realizar toda operação, mas ode optar utilizar mais de uma. Está ai a dica, qualquer dúvida, comente.