1 - Vamos começar pela lógica. Para a pessoa confirmar o cadastro, teria que ter base em alguma coisa, certo? Então eu vou usar a função md5. O que ela faz? ela gera número grandes, malucos, criptografados.
Usaremos assim:
$chave = md5(uniqid( time() . $_SERVER['REMOTE_ADDR'] . rand(0, 9) ));
o que este codigo faz? ele gera números criptografados, mas não pode ser so md5 e pronto, tem que ser algo randomico, pois será adicionado no banco de dados e este codigo gerado não pode ser igual a de ninguém.
Agora vamos começar o código.
Eu vou usar os seguintes campos, será um exemplo.
login
senha
nome
cidade
estado
Estes serão os campos que eu vou usar para demonstrar para vocês.
Do lado de cada função terá um explicação.
O codigo vai ficar assim:
<? // Script desenvolvido por Glauco Maschio // www.GlaucoMaschio.com.br // Início do código. include "config.php"; // Inclui o arquivo de configuração. $db = mysql_connect ($host, $login_db, $senha_db); // Aqui selecionamos os campos do config.php. $basedados = mysql_select_db($db); // OBS: Caso os dados do seu config não sejam iguais, mude acima. $pesquisar = mysql_query("SELECT * FROM `usuarios` WHERE login = '$login'", $db); // Aqui conferimos se o login que a pessoa digitou já existe. $y = mysql_num_rows($pesquisar); // Resultado if ( $y == 1 ) { $msg .= "Infelizmente o Login que você escolheu já existe. Escolha outro.<br>"; // Caso exista, está mensagem aparecerá. } if ( $login == "" ) { $msg .= "Você não digitou um Login.<br>"; // Caso o campo login tenha ficado em branco. } if ( $senha == "" ) { $msg .= "Você não digitou uma Senha.<br>"; // Caso o campo senha tenha ficado em branco. } if ( $senha2 != $senha ) { $msg .= "Você digitou duas Senhas diferentes.<br>"; // Caso a pessoa tenha digitado duas senhas diferentes. } if ( $nome == "" ) { $msg .= "Você não digitou o seu Nome.<br>"; // Caso o campo nome tenha ficado em branco. } if ( $email == "" ) { $msg .= "Você não digitou o seu E-mail.<br>"; // Caso o campo email tenha ficado em branco. } if ( $cidade == "" ) { $msg .= "Você não digitou a sua Cidade.<br>"; // Caso o campo cidade tenha ficado em branco. } if ( $estado == "" ) { $msg .= "Você não digitou o sue Estado.<br>"; // Caso o campo estado tenha ficado em branco. } // Agora nós vamos ver se o e-mail que a pessoa digitou não existe no banco de dados. $pesq = mysql_query("SELECT * FROM `usuarios` WHERE email = '$email'", $db); $pesquisar_email = mysql_num_rows($pesq); if ( $pesquisar_email == 1 ) { $msg .= "O E-mail digitado já está cadastrado.<br>"; // Se o email já estiver cadastrado aparece está mensagem. } if ( $msg == "" ) { // Caso não tenha ocorrido nenhum erro ele executa as funções abaixo. // Gera a chave para validação no e-mail. $chave = md5(uniqid( time() . $_SERVER['REMOTE_ADDR'] . rand(0, 9) )); // Gera a data do registro para se ter um controle. $data_registro = date("Y-m-d"); // Não mude, pois ela será acertada abaixo. $data = substr($data_registro,8,2) . "/" .substr($data_registro,5,2) . "/" . substr($data_registro,0,4); // Fica no formato 08/10/2004. // Insere os dados no banco de dados $x = mysql_query("INSERT INTO `vip` (login, senha, email, nome, cidade, estado, data, chave) VALUES ('$login','$senha','$email','$nome','$cidade','$estado','$data','$chave')", $db); // Quando a pessoa termina de se cadastrar aparece está mensagem. if ( $x == 1 ) { echo "Cadastrado com Sucesso! Foi enviado uma confirmação para o seu e-mail e após confirmado você poderá se logar no site."; // Se ocorrer um erro no servidor aparece está mensagem. } else { echo "Ocorreu um erro em nosso servidor, desculpe."; } // Caso ocorra erros, ele lista eles abaixo. } else { echo "Ocorreram os seguintes erros:<br><br> $msg</font>"; } // Envia o e-mail para a pessoa. $assunto = "Codigo de Confirmação"; // Assunto do E-mail. $fname = "Nome do seu Site"; // Nome do seu site. $femail = "Contato@SeuSite.com.br"; // E-mail do seu site. $destino = "\"$login\" <$email>"; // Login e o email da pessoa que se cadastrou. $confirmail = ' <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Ola '.$login.'!</p> <p>Abaixo está o seu codigo de confirmação:</p> <p><strong><a href="http://www.seusite.com.br/validar.php?chave='.$chave.'">http://www.seusite.com.br/validar.php?chave='.$chave.'</a></strong></p> <p>Entre neste endereço para ativar o seu cadastro.</p> <p>Atenciosamente, Seu Site.</p> </font></p>'; // Mensagem que vai para a pessoa. $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; $headers .= "From: \"$fname\" <$femail>\r\n"; if (!mail($destino, $assunto, $confirmail, $headers)) // Fim do código. ?>
Acho que está bem explicado né?
O que está faltando agora?
o validar.php .. só que antes disso.. lembre-se que a chave foi inserida no banco de dados junto com o cadastro da pessoa. Quando ela apertar em confirmar, ele vai conferir a chave que está no banco de dados com a que está no e-mail.
o validar.php é algo bem simples, só um update

<?
include "config.php";
$conexao = mysql_connect($host, $login_db, $senha_db);
mysql_select_db($db, $conexao);
mysql_query("UPDATE `usuarios` SET ativo = 'sim' WHERE chave = '".$chave."'");
printf("Seu cadastro foi Confirmado e Ativado!", mysql_affected_rows());
mysql_query("COMMIT");
?>
Lembrando algumas coisas.Tabela usada - usuarios ... caso a sua seja diferente basta mudar.
Tabela da chave - Lugar aonde a chave vai ser gravada é chave mesmo e o lugar aonde vai ficar gravado se ela confirmou ou não é Ativo.
Config.php - Eu usei host, login_db, senha_db e db ... Caso o seu seja diferente é so mudar.
Se você quiser limitar as suas páginas, para só cadastrados que tenham confirmado o cadastro você põe no seu select assim
WHERE ativo = 'sim'
dúvidas, sugestões postem ae
vlw
Espero ter ajudado o pessoal que precisa

Edição feita por: _tHeFlAsH_, 08/10/2004, 17:35.