Formulário de cadastro e confirmação de e-mail com PHP

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

<?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 = " 
<html> 
<body> 
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.<br><br>
<a href='http://www.seusite.com.br/cadastro.php?email_confirm=".$_POST['email']."' target='_blank'>Ativar/Validar e-mail</a><br><br>
Atenciosamente,<br>
Admin.
</body> 
</html>"; 
/*INSTANCIA A OBJETOS*/ 
$mail = new PHPMailer(); 
/*MANDAR VIA SMTP*/ 
$mail->IsSMTP(); 
/*SERVIDOR SMTP*/ 
$mail->Host = "mail.seusite.com.br"; 
/*HABILITA SMTP AUTENTICADO - NAO ALTERAR */ 
$mail->SMTPAuth = true; 
/*USUARIO DESTE SERVIDOR SMTP*/ 
$mail->Username = "seuemail@seusite.com.br"; 
/*SENHA USUARIO DESTE SERVIDOR SMTP*/ 
$mail->Password = "*****"; 
/*E-MAIL UTILIZADO PARA ENVIO, PODER SER O MESMO DO USERNAME*/ 
$mail->From = 'seuemail@seusite.com.br'; 
$mail->FromName = 'seuemail@seusite.com.br'; //Ex: nome_aqui (email@dominio.com) 
/*WRAP SET O TAMANHO DO TEXTO POR LINHA*/ 
$mail->WordWrap = 50; 
/*ENVIAR EM HTML*/ 
$mail->IsHTML(true); 
/*INFORMANDO O E-MAIL DO REMETENTE*/ 
$mail->AddReplyTo('seuemail@seusite.com.br','seuemail@seusite.com.br'); 
/*LISTA DE ENDEREÇOS QUE DEVE SER MANDADO O E-MAIL*/ 
$mail->AddAddress($_POST['email'],'Sr(a).'.$_POST['nome']); 
$msg = $html; 
/*O ASSUNTO DO E-MAIL*/ 
$mail->Subject = "Confirmacao de Cadastro"; 
/*ADICIONANDO O HTML NO CORPO DO E-MAIL*/ 
$mail->Body = $msg; 
/*DEFININDO A LINGUAGEM*/ 
$mail->SetLanguage("br", "phpmailer/language/"); 
/*ENVIANDO E RETORNANDO STATUS DO ENVIO*/ 
if(!$mail->Send()){ 
/*ERRO NO ENVIO*/ 
echo "Ocorreu um erro no envio do e-mail. Erro: ".$mail->ErrorInfo; //FUNCAO INFORMA O ERRO OCORRIDO // 
exit; 
} 
/*FECHA ENVIO DE PHPMAILER*/
}
}
?>
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fixa de Cadastro</title>
<style>
body{font-family:Arial; font-size:12px;}
form{background:#CCCCCC; border:solid 1px; width:500px; padding:10px;}
</style>
</style>
</head>
<body>
<?
if(isset($erro)){//IF 0
foreach($erro as $erros){
echo $erros.'<br><br>';
}
?>
<a href="<?=$_SERVER['PHP_SELF']?>">voltar a ficha de cadastro</a>
<?
}else{//ELSE IF 0
if($_SERVER["REQUEST_METHOD"] != "POST" && !isset($_GET['email_confirm'])){ //IF 1
?>
Ol&aacute;, seja bem vindo. Preencha o formul&aacute;rio abaixo e cadastre-se gratuitamente.<br><br>
<form action="<?=$_SERVER['PHP_SELF']?>?cadastrar" method="post">
<div style="float:left; width:50px;">Nome:</div><div><input type="text" name="nome" value="" maxlength="100" size="40"/></div>
<div style="float:left; width:50px;">E-mail:</div><div><input type="text" name="email" value="" maxlength="100" size="50"/></div>
<div style="width:50px; margin-top:10px;"><input type="submit" value="cadastrar"></div>
</form>
<?
}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()>0){//IF 3
?>
Seu e-mail foi confirmado e seu cadastro foi ativado!
<?
}else{//ELSE IF 3
?>
Este e-mail não consta em nossos registros.
<?
}//FECHA IF 3
}else{ //ELSE IF 2
?>
Seu cadastro foi realizado com sucesso!<br><br> Enviamos uma confirma&ccedil;&atilde;o de cadastro para o e-mail informado.<br><br> Clique no link contido no e-mail para ativar seu cadastro!
<?
} //FECHA IF 2
}else{
?>
Pedido inválido
<?
}
} //FECHA IF 1
}//FECHA IF 0
?>
</body>
</html>

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.

4 comentários:

Anônimo disse...

Claudeci Boa Tarde,não estou conseguindo baixar o phpmailer, voce pode me ajudar sou novato na programação e estou afim de aprender PHP

Claudeci Goularte disse...

Olá, você pode baixar o phpmailer pelo link a seguir...
http://sourceforge.net/projects/phpmailer/

Anônimo disse...

Olá GOULART

Meu nome é wilson

Gostaria de saber se é possivel fazer um envio de e-mail para duas pessoas. SENDO ASSIM

QUANDO A PESSOA entrar no site e enviar, saira dois e-mail um para mim e outro para uma segunda pessoa, sem que esta segunda pessoa fique sabendo quem enviou o e-mail
Somente eu estivesse estes dados.

Se puder me ajudar vou ficar eternamente grato.

Abraços......

wilson
8650-4344 tim
wilsonmafei@ig.com.br

Anônimo disse...

Fatal error: Call to undefined function Abre_Conexao() in /home/rifaele/public_html/testemail/cadastro.php on line 3

amigo como posso corrigir este erro se poder mim ajudar estou tentando mas conto com sua ajuda.
meu e-mail e hdinfoonline@uol.com.br

Postar um comentário

Leia as regras:
Todos comentários são lidos e moderados previamente.
são publicados aqueles que respeitam as regras abaixo:

-Seu comentário precisa ter relação com o assunto do post;
-Não inclua links desnecessários no conteúdo do seu comentário
-Se quiser deixar sua URL, comente usando a opção Comentar como:OpenID

OBS: comentários dos leitores não refletem as opniões do blog.