quinta-feira, 4 de novembro de 2010

Cadastro de Usuário e Login - PHP

Fala galera sou John Wesley Kopke e vou utilizar este post para deixar um tutorial decadastro de usuário e login usando php.
Espero que gostem!

Bem, vamos primeiro ver tudo o que será passado nesse tutorial:
  • - vamos criar uma página de cadastro dos usuários;
  • - outra página para o login;
  • - gravar o login e senha em um cookie;
  • - outra página para recuperação de senha;
  • - aplicar a restrição nas páginas;
Vamos começar então: 

1ºpasso - Vamos criar uma tabela no MySQL:

<?
CREATE TABLE `tbl_usuarios` (
`codigo` INT( 5 ) NOT NULL AUTO_INCREMENT,
`nome` VARCHAR( 75 ) NOT NULL ,
`login` VARCHAR( 30 ) NOT NULL ,
`senha` VARCHAR( 30 ) NOT NULL ,
`email` VARCHAR( 50 ) NOT NULL ,
PRIMARY KEY ( `codigo` )
);`
?>


2ºpasso - Agora que temos a tabela criada, vamos para a página de cadastro dos usuários. Vamos fazer um formulário com os seguintes campo: 
  • Nome
  • Login
  • Senha
  • Repetir Senha
  • Email 
Lembrando que o usuário não digita o campo código, ele é automaticamente inserido no MySQL.

Nome do Arquivo: cadastrar.php

<form name="cadastrar" method="post" action="enviar_cadastro.php">
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="150"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Nome:</font></td>
<td width="250"><input name="nome" type="text" id="nome" maxlength="75"></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Login:</font></td>
<td><input name="login" type="text" id="login" maxlength="30"></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Senha:</font></td>
<td><input name="senha" type="password" id="senha" maxlength="30"></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Repetir
Senha:</font></td>
<td><input name="senha2" type="password" id="senha2" maxlength="30"></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Email:</font></td>
<td><input name="email" type="text" id="email" maxlength="50"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input name="enviar" type="submit" id="enviar" value="Enviar Cadastro">
<input name="limpar" type="reset" id="limpar" value="Limpar Dados">
</div></td>
</tr>
</table>
</form> 
 
Um simples formulário, nada de códigos, nada de scripts, aqui, muitos programadores gostam de enviar o formulário para a mesma página, e fazer vários IF, eu prefiro enviar o formulário para outra página que irá inserir os dados no MySQL (enviar_cadastro.php). Até essa parte acredito que não tenha nenhuma dúvida no ar, então, vamos para a página que irá introduzir esses usuários no banco de dados.

Mas primeiro, iremos fazer uma página php somente com as configurações do acesso ao banco de dados, pois iremos utiliza-lo várias vezes, e caso irremos em um ponto, teremos que conferir em todas as páginas, essa parte ajudaria como um include de menus. 

3ºpasso - Essa página não precisa ter nenhum código html, ou seja, crie uma página nova e apague todo o código fonte, iremos somente colocar umas váriaveis php nele, aqui segue o código da página:

Nome do arquivo: config.php 
 <?
$host = "localhost"; //endereço do seu servidor MySQL
$database = "sua base de dados"; //o database que conterá sua tabela, muitas vezes seu próprio login
$tabela = "tbl_usuarios"; //o nome de sua tabela
$login_db = "root"; //login usado no MySQL
$senha_db = "sua senha"; //senha usado no MySQL
?>
 

4ºpasso - Com essa nossa página de Configurações pronta, salve-a com o nome de config.php e agora vamos para a parte de inserir os usuários:

Nome do arquivo: enviar_cadastro.php

<?
include "config.php"; //aqui inserimos as váriaveis da página de configuração

$db = mysql_connect ($host, $login_db, $senha_db); //conectamos ao mysql
$basedados = mysql_select_db($database); //selecionamos o database escolhido

$pesquisar = mysql_query("SELECT * FROM `$tabela` WHERE login = '$login'", $db); //conferimos se o login escolhido já não foi cadastrado
$contagem = mysql_num_rows($pesquisar); //traz o resultado da consulta acima

if ( $contagem == 1 ) {
$errors .= "Login escolhido já cadastrado.<br>"; //se o login já existir, ele adiciona o erro
}

if ( $login == "" ) {
$errors .= "Você não digitou um login<br>"; //confere se o campo login não ficou vazio
}

if ( $senha == "" ) {
$errors .= "Você não digitou uma senha<br>"; //confere se o campo senha não ficou vazio
}

if ( $senha != $senha2 ) {
$errors .= "Você digitou 2 senhas diferentes.<br>"; //adiciona o erro caso o usuário digitou 2 senhas diferentes
}

if ( $errors == "" ) { //checa se houve ou não erros no cadastro

$cadastrar = mysql_query("INSERT INTO `$tabela` (nome, login, senha, email)
VALUES ('$nome','$login','$senha','$email')", $db); //insere os campos na tabela

if ( $cadastrar == 1 ) {
echo "<div align=center><font size=2 face=Verdana, Arial, Helvetica, sans-serif><br><br><br>Cadastro com sucesso.</font></div>"; //se cadastrou com sucesso o usuário aparece essa mensagem
} else {
echo "<div align=center><font size=2 face=Verdana, Arial, Helvetica, sans-serif><br><br><br>Ocorreu um erro no servidor ao tentar se cadastrar.</font></div>"; //caso houver um erro quanto as configurações aparece essa mensagem
}
} else {
echo "<div align=center><font size=2 face=Verdana, Arial, Helvetica, sans-serif>Ocorreu os seguintes erros ao tentar se cadastrar:<br><br>$errors</font></div>"; //mostra os erros do usuário, caso houver
}
?>

 
Esse é nosso código para cadastrar os usuários no banco de dados, parece meio complicado ao olhar assim, mas tem comentários ao lado de cada ação, o bom é você tentar entender esse código, não copia-lo e colar no seu, digamos que essa é a base dos sistemas de login. 

5ºpasso - Página de Login
Vamos fazer da mesma maneira do cadastro, uma página com um formulário simples, que envia para uma página os dados digitados.
 
Nome do arquivo: Login.php
<form name="login" method="post" action="confirmar_login.php">
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="150"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Login:</font></td>
<td width="250"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<input name="login" type="text" id="login">
</font></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Senha:</font></td>
<td><input name="senha" type="password" id="senha"></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&nbsp;</font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&nbsp;</font></td>
</tr>
<tr>
<td><div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<input name="entrar" type="submit" id="entrar" value="Entrar">
</font></div></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="senha.php">Esqueceu
a senha?</a> <a href="cadastrar.php">Cadastre-se</a></font></td>
</tr>
</table>
</form>
 

6ºpasso - Agora criaremos a página que irá verificar se a senha digitada é correta ou não. Uma vantagem de eu ter modificado todo o script para trabalhar com sessions em vez de cookies que você vai poder por html no meio da pagina.

Nome do arquivo: confirmar_login.php
<?
session_start();
include "config.php"; //inclui o arquivo de configurações

$db = mysql_connect ($host, $login_db, $senha_db); //conecta ao mysql
$basedados = mysql_select_db($database); //conecta a base de dados

$confirmacao = mysql_query("SELECT * FROM `$tabela` WHERE login = '$login' AND senha = '$senha' ", $db); //verifica se o login e a senha conferem
$contagem = mysql_num_rows($confirmacao); //traz o resultado da pesquisa acima
if ( $contagem == 1 ) {
$_SESSION['login'] = $login;
$_SESSION['senha'] = $senha;
echo "<script>location.href='index.php'</script>"; //entra na pagina restrita
echo "Usuário logado."; //se a senha digitada está correta, mostra a mensagem
} else {
echo "Login ou senha inválidos. <a href=javascript:history.go(-1)>Clique aqui para voltar.</a>"; //se a senha está incorreta mostra essa mensagem
}
?>
 


7ºpasso - Como o cadastro, poderá parecer meio confusa essa página, mas também aconselho que não copie o código, analise e faça você mesmo, com essas página já teriamos um sistema de login, mas queremos mais, caso nossos usuário não se lembrem da senha, não quero ele me incomodando no icq , então faremos uma página para que envie a senha no email cadastrado. E outra vez estaremos fazendo um formulário simples antes, e será enviado para outra página.

Nome do arquivo: senha.php
<form name="senha" method="post" action="enviar_senha.php">
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="150"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Login:</font></td>
<td width="250"><input name="login" type="text" id="login"></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Email:</font></td>
<td><input name="email" type="text" id="email"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input name="enviar" type="submit" id="enviar" value="Enviar minha Senha">
</div></td>
</tr>
</table>
</form>
 


8ºpasso - Agora com os campos Login e Email, podemos conferir no banco de dados e enviar a senha para o email cadastrado:

Nome do arquivo: enviar_senha.php
 <?
include "config.php"; //inclui o arquivo de configurações

$db = mysql_connect ($host, $login_db, $senha_db); //conecta ao mysql
$basedados = mysql_select_db($database); //conecta a base de dados

$confirmacao = mysql_query("SELECT * FROM `$tabela` WHERE login = '$login' AND email = '$email'", $db); //verifica se o login e a email conferem
while ($row = mysql_fetch_array($confirmacao)) {
$login = $row["login"]; //adiciona a variavel $login o login do usuario
$senha = $row["senha"]; //adiciona a variavel $senha a senha do usuario
$email = $row["email"]; //adiciona a variavel $email o email do usuario
}

$contagem = mysql_num_rows($confirmacao); //traz o resultado da pesquisa acima

if ( $contagem == 1 ) {
$msg = "Recuperação de senha" . chr(13) . chr(10);
$msg .= "Senha enviada em " . date("d/m/Y") . ", os dados seguem abaixo: " . chr(13) . chr(10) . chr(10);
$msg .= "Login : " . $login . chr(13) . chr(10);
$msg .= "Email : " . $email . chr(13) . chr(10);
$msg .= "Senha : " . $senha . chr(13) . chr(10);

$Remetente = "ensf@ensf.com.br"; //remetente do email, coloque o email do seu site

mail($email, "Recuperação de Senha",$msg,"From: $Remetenten"); //campos do email na ordem, email destinho (não deve ser alterada), assunto, conteudo (não deve ser alterado), remetente (também não altere)

echo "<div align=center><font size=2 face=Verdana, Arial, Helvetica, sans-serif>Sua senha foi enviada com sucesso para o email: $email.</font></div>"; //resposta se o email foi enviado com sucesso
} else {
echo "<div align=center><font size=2 face=Verdana, Arial, Helvetica, sans-serif>Seu login ou email está incorreto.</font></div>"; //resposta se não foi possivel enviar o email
}
?>
 


9ºpasso - Como proteger uma página para que a pessoa só possa ter acesso ao conteúdo somente quando fazer o login. É so colocar o este script nas páginas que pretende proteger.

Nome do arquivo: erro.php
<?
  session_start();
  session_unset();
  session_destroy();
  header("Location: login.php");
?>
 

10ºpasso - Logout, nen preciso falar o que é.
Nome do arquivo: logout.php 
<?
  session_start();
  session_unset();
  session_destroy();
  header("Location: login.php");
?>
 

11ºpasso - O codigo abaixo e obrigatório em todas as páginas protegidas que irão aparecer o nome
 <?  //todas as páginas que você quiser por o nome de quem ta logado tem  q por todo esse codigo no inicio, caso a pessoa aentre na pagina sem estar logado aparece uma caixa pedindo o login e senha, e se ela errar vai para uma pagina de erro

session_start();

if ( !isset($_SESSION['login']) ){

  echo "<script>location.href='erro.php';</script>";
}
?>
 
 
Essa linha abaixo que esta la na index1.php que é a responsavel de pegar o login da sessão
<?
  echo $_SESSION['login'];
?>
 ___________________________________________________________________________
Beleza pessoal é isso, o código está completo e está funcionando, não se esqueça de deixar um POST.
Abração, dúvidas? Pergunta ai...

3 comentários:

Beleza cara deu certinho aqui no meu site.
vlw pela força!

De nada cara, tamo ai para compartilhar conhecimento, talvez um dia preciso da sua ajuda.
abraço

o meu dá o seguinte erro:::::


Ocorreu os seguintes erros ao tentar se cadastrar:

Você não digitou um login
Você não digitou uma senha


pq isso tá acontecendo

Postar um comentário