Вы находитесь на странице: 1из 11

Sistema de login e senha com BD

Olá!!!!
Vou ensinar como fazer um sistema de login!
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???
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` )
);`
?>

Explicando:

CREATE TABLE `tbl_membros` - criamos a tabela com o nome tbl_membros


Tudo que vem entre os ( ) é os campos;
Código - INT (somente números) com limite para 5 caracteres, acho que até 99999
usuários está bom né? E o NOT NULL para que ela não fique em branco,
AUTO_INCREMENT é para ela automaticamente numerar (1,2,3,4,...)
Nome - VARCHAR (Alpha númerico, letras, números e caracteres especiais) com 75
caracteres no máximo, ...

2ºpasso - Agora que temos a tabela criada, vamo para a página de cadastro dos usuários.
Vamos fazer um formulário com os seguintes campo: Nome, Login, Senha, Repetir
Senha e o Email, lembrando que o usuário não digita o campo código, ele é
automaticamente inserido no MySQL.
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>&amp;nbsp;</td>
<td>&amp;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 erremos 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:

config.php

<?
$host = "localhost"; //endereço do seu servidor MySQL
$database = "cf_login"; //o database que conterá sua
tabela, muitas vezes seu próprio login
$tabela = "tbl_membros"; //o nome de sua tabela
$login_db = "cf_login"; //login usado no MySQL
$senha_db = "abc"; //senha usado no MySQL
?>

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:
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."; //se o login
já existir, ele adiciona o erro
}

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

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

if ( $senha != $senha2 ) {
$errors .= "Você digitou 2 senhas diferentes.";
//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>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>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:$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.

4º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.

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

Agora criaremos a página que irá verificar se a senha digitada é correta ou não. Outra
coisa, essa página também não deve conter códigos html, pelo fato de ser criados
cookies, você deve deletar todo o conteúdo da página antes de fazer esse código

confirmar_login.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 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 ) {
setcookie ("login", $login); //grava o cookie com o login
setcookie ("senha", $senha); //grava o cookie com a senha
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
}
?>
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.

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>&amp;nbsp;</td>
<td>&amp;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>

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

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 = "endereco@provedor.com.br"; //remetente do


email, coloque o email do seu site

mail($email, "Recuperação de Senha",$msg,"From:


$Remetente"); //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
}
?>

Tenho que comentar novamente? Acho que sim né, pra gravar bem, é melhor você
entender esse script ao invés de copia-lo. Temos pronto nosso sistema já, o que nos resta
é? é? é? Restringir o acesso a algumas páginas, bem, vamos fazer uma página com os
scripts, e mesmo assim, temos que editar as páginas que queremos que fiquem
"trancadas". Também podemos fazer sem edita-las, mas ficaria um sistema bem menos
seguro. Vamos agora criar a página com a restrição:

acesso.php
<?
include "config.php"; //carregamos o arquivo de
configuração

$nome = $HTTP_COOKIE_VARS["login"]; //pegamos o cookie


login, gravado anteriormente com o login
$pass = $HTTP_COOKIE_VARS["senha"]; //pegamos o cookie
senha, gravado anteriormente com o login

$db = mysql_connect ($host, $login_db, $senha_db);


//conectamos ao mysql
$basedados = mysql_select_db($database); //conectamos ao
database

$confirmacao = mysql_query("SELECT * FROM `$tabela` WHERE


login = '$nome' AND senha = '$pass'", $db); //verificamos
se o conteudo dos cookies esta correto
$contagem = mysql_num_rows($confirmacao); //resulta da
pesquisa acima

//aqui finalizamos assim essa página, a comparação iremos


fazer nas páginas com acesso restrito
?>

Essa página "acesso.php" também não pode conter códigos html, agora iremos ver como
colocar essa restrição de acesso nas páginas, veja um exemplo:
5ºpasso - Teste!
Temos uma página somente com o texto "OI!" centralizado, esse é o código:

teste.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html>
<head>
<title>Teste de Acesso</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
</head>

<body>

<div align="center">OI!</div>

</body>
</html>

O que temos que fazer é, Adicionar um IF no começo dessa página e um ELSE no final,
caso não esteja logado, ficando assim:

teste.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html>
<head>
<title>Teste de Acesso</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
</head>

<body>
<?
if ( $contagem == 1 ) {
//aqui deixe aberto, pois iremos fechar somente no final da
página
?>
<div align="center">OI!</div>
<?
} else {
echo "Você não está logado."; //aqui que terminamos o
IF que iniciamos na página
}
?>
</body>
</html>

Caso deseje fazer um botão para Logout, crie a página logout.php, com as seguintes
ações:

logout.php
<?
setcookie("login","",time()-3600);
setcookie("senha","",time()-3600);?>

E para efetuar o Logout, você somente precisa colocar um link em suas página para essa
pagina

Bem, creio que acabamos (se não esqueci nenhuma parte), espero ter ajudado quem
passava por dificuldades com esse tipo de sistema, e que com base nele pode ser
aplicado bem mais coisas, como por exemplo, criptografar os cookies de senha, para ter
uma melhor segurança para seus usuários.

Вам также может понравиться