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;
Cadastro de Usuários
Primeiramente temos que criar nossa tabela no mysql com os campos que vamo usar, aqui teremos os campo: Codigo, Nome, login, Email e senha, gerando o seguite código:
CREATE TABLE `tbl_membros` ( `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, …
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> </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 erremos em um ponto, teremos que conferir em todas as páginas, essa parte ajudaria como um include de menus.
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 = "mysql.dominio.com.br"; //endereço do seu servidor MySQL $database = "wmonline"; //o database que conterá sua tabela, muitas vezes seu próprio login $tabela = "tbl_membros"; //o nome de sua tabela $login_db = "wmonline"; //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.<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.
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"> </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>
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=java script: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> </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>
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\n"); //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:
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 (Thanks Stormbringer, ele que me respondeu sobre criptografia).
Beleza galera, quem quiser esses arquivos e mais esse tutorial, tenho em txt, está junto no zip que coloco pra download aqui.
Bom dia, procurei entender o código e até as partes iniciais consegui compreender, porém quando testo no navegador da erro 404 , logo após cadastrar.php. Quando evio o cadastro da erro, alguém ajuda?
Ola, os erros de login e senha e porque as variáveis que recebe dos formulários tem que conter “$_POST[…]” exemplo: $confirmacao = mysql_query(“SELECT * FROM `$tabela` WHERE login = ‘$_POST[login]’ AND senha = ‘$_POST[senha]'”, $db); sem isso o php não entende o que veio do formulário!!! tem que alterar todo que recebe de formulário. Espero ter ajudado!
Está dando erro será que alguém pode me ajuda?
Quando alguém vai se cadastrar da esse erro:
“”Ocorreu os seguintes erros ao tentar se cadastrar:
Você não digitou um login
Você não digitou uma senha””
Consegui resolver esse agora, mas agora da o seguinte erro : “erro você digitou 2 senhas diferentes” :/
se consewgiu resolver passa a solução ai….
Nem tentei mais mexer com esse sistema aí, agora avancei mais no PHP e já consigo criar meu próprio sistema.
Boa tarde, cara de todos que procurei o seu é o mais completo que achei, sou iniciante em php, estou usando o ultimo php versao 5.5, esta dando erro de deprecated nas conexoes, infelizmente ainda nao tenho conhecimento o suficiente para resolver, consegui resolver somente a conexao, mas os selects e inserts nao, teria como voce dar uma ajuda.
Boa noite a todos, eu postei relatando que o email de reenvio da senha estava chegando com o Login, Email e com a Senha estava em branco.
Pois bem, estudando o código eu descobri um pequeno erro no pacote de download disponibilizado no arquivo enviar_senha.php na linha 29 tem o código $msg .= "Senha : " . $mensagem . chr(13) . chr(10); e para reenviar a senha basta substituir na linha 29 o . $mensagem por . $senha que funcionará perfeitamente.
Caro administrador e caros leitores boa noite, quero parabenizar por tão excelente material.
Pois bem, fiz tudo como foi falado no tutorial e funcionou perfeitamente, exceto a parte de recuperação da senha.
Quando solicito o reenvio da senha para o email cadastrado, somente chega no email o login e o email cadastrado e a senha vem em branco.
Poderiam me ajudar a resolver esse problema?
Fiz a tabela exatamente igual mas quando vou salva-la aparece esse erro:
#1067 – Invalid default value for 'codigo'.
O que devo fazer?
ótimo artigo parabéns continue postando.
Eu não estou conseguindo abrir a página teste. Eu logo, aparece a mensagem de que estou logado, mas quando vou abrir o teste.php aparece a mensagem de que não estou logado.
Bom, na hora de contar ele conta sé é 1, ele tem que verificar sé é maior que 0
Olá, não compreendi como funciona o contador na última página(teste.php) para liberar ou não o conteúdo oculto, veja minha dúvida.
Como chamar uma função PHP com base na variável $contador se a mesma ainda não foi definida nesta página? Para isso não teríamos que chamar(talvez com include) a página cuja qual atribui valor a respectiva variável? Penso que se usarmos apenas o IF como foi dito uma mensagem de erro será retornada dizendo que a vairável não foi declarada, estou errado?
Boa tarde, para que o pessoal perceba o codigo é nessessário que esteja completo! Mas, pelo que vejo, a maioria das pessoas que estão a colocar as duvidas não percebem nada de programação. Criar um sistema de login e cadastro de usuarios é das coisas mais simples de se fazer em php. O que vejo é muitos usuarios não querem ter um pouco de paciencia nem vontade de aprender, limitam-se a copiar os codigos e pronto, já está, isso não é ser programador. Isso é apenas copiar, nada mais. Agora, para entenderem melhor, convem também terem força de vontade para aprender e ir á carga, existem muitos toturiais, livros, E-books, video-aulas, pratiquem, agarrem num codigo e rinquem com ele, tentem inventar e alterar o que está feito. Só assim é que irão aprender.
Boas tenho um problema com o "enviar_cadastro.php aparecem os seguintes erros :
Warning: mysql_connect() [function.mysql-connect]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/London' for '1.0/DST' instead in C:webrootPAPenviar_registo.php on line 3
Warning: mysql_connect() [function.mysql-connect]: php_network_getaddresses: getaddrinfo failed: Este anfitrião não é conhecido. in C:webrootPAPenviar_registo.php on line 3
Warning: mysql_connect() [function.mysql-connect]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/London' for '1.0/DST' instead in C:webrootPAPenviar_registo.php on line 3
Warning: mysql_connect() [function.mysql-connect]: [2002] php_network_getaddresses: getaddrinfo failed: Este anfitrião não é conhecido. (trying to connect via tcp://http:3306) in C:webrootPAPenviar_registo.php on line 3
podem-me ajudar?
ta dizendo que a vriavel error nao era definida nesta parte aqui:
if ($error == "" )
{
$inserir="insert into utilizadores(nome,pass,idade,email) values ('".$nome."','".$pass."','".$idade."','".$email."')";
if ($inserir == 1 )
{
echo "<div align=center><font size=2 face=Verdana, Arial, Helvetica, sans-serif>Registado com sucesso.</font></div>";
}
else
{
echo "<div align=center><font size=2 face=Verdana, Arial, Helvetica, sans-serif>Ocorreu um erro no servidor ao tentar se registar.</font></div>";
}
}
else
{
echo "<div align=center><font size=2 face=Verdana, Arial, Helvetica, sans-serif>Ocorreu os seguintes erros ao tentar se registar:'".$error."'</font></div>";
}
Bom eu criei todos os codigos instalei e tudo, mas na hora de cadastrar usuario diz que eu não digitei uma senha, e nem o login, sendo que eu preenchi todos os campos
a mim diz isto:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, string given in C:xampphtdocswebsite_sb13registo1.php on line 24
Notice: Undefined variable: error in C:xampphtdocswebsite_sb13registo1.php on line 51
o meu está dando o mesmo erro. vc conseguiu ajeitar
Boa tarde!. to tendo um problema aqui na hora de logar e na recuperação de senha. sempre aparece o recado dizendo que o login ou senha estão errados.
como faço para solucionar esse problema?
Ótimo sistma de login:
index.html
Faça o login
Login:
Senha:
ou faça o Cadastro
<a>
login.html
Login
Senha
ou Cadastre-se
login.php
<?php
$user = $_POST['user'];
$pass = $_POST['pass'];
include("bd.php");
if($valida[$user]==$pass){
setcookie("logado", "1");
echo "location.href='main.php'";
}
else{
echo "";
echo "Usuário ou senha incorretos!";
echo "";
echo "";
echo "Clique aqui para tentar novamente.";
echo "";
}
?>
logout.php
Deslogado
function deleteCookie(nome){
var exdate = new Date();
exdate.setTime(exdate.getTime() + (-1 * 24 * 3600
* 1000));
document.cookie = nome + "=" + escape("")+ ((-1
== null) ? "" : "; expires=" + exdate);
}
Você foi deslogado!
deleteCookie("logado");
main.php
<?php
if(IsSet($_COOKIE["logado"])){}
else{
echo '';
exit;
}
?>
Sair
cadastro.html
Nome:
Login:
Senha:
ou faça o Login
cadastro.php
<?php
session_start("logado");
include("bd.php");
$nome = $_POST['nome'];
$login = $_POST['login'];
$senha = $_POST['senha'];
$bd = fopen("bd.php","a+");
$varval = "valida[";
$new = "";
fputs($bd, $new);
fclose($bd);
echo "location.href='sucesso.html'";
?>
crie um arquivo no bloco de notas chamado BD.PHP
Caro amigo,
Sou leigo no assunto, uso o Uolhost… como eu poderia criar esse sistema de login?
Tenho um site (novo ainda – http://www.chumanas.com) voltado para o público vestibulando (meus alunos) e gostaria de criar uma área restrita para que alguns materiais protegidos por direitos autorais fossem disponibilizados somente a eles.
Atenciosamente,
Augusto Silva
contato@chumanas.com
Olá, coloquei o código mas não está funcionando aqui. Para os usuários se cadastrarem aparece um erro:
""Ocorreu os seguintes erros ao tentar se cadastrar:
Você não digitou um login
Você não digitou uma senha""
e para reecuperar a senha, ocorre outro erro tambem.
Peço que entre em contato comigo atraves do e-mail, assim ficaria mais fácil explicar.
Abraços.
Estou com o mesmo problema, vc conseguiu resolver?
Excelente material… porém senti falta de uma coisa…a passagem dos dados do form para o códgio PHP….. queria entender como no seu código é passado…
De qualquer forma … abaixo a solução que usei.
//Variáveis recebidas do formulário
$nome = $_POST['nome'];
$login = $_POST['login'];
$senha = $_POST['senha'];
$senha2 = $_POST['senha2'];
$email = $_POST['email'];
Este código deverá ser inserido para "enviar_cadastro.php" já os demais é só usar como base esse e incluir nos demais.
[]´s
Leandro, acredito que ele fez dessa forma pq nas configurações do php.ini ele deve ter ativado o register globals