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> </td>
<td> </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"> </font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> </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> </td>
<td> </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...