Artigo: Sistema de Login com Banco de Dados - Gigasystems

PHP

Em por

sistema-de-login-com-banco-de-dados
Sistema de Login com Banco de Dados

No artigo de hoje vamos aprender a criar um sisteminha simples de Login com usuário e senha, porém totalmente funcional, na qual você poderá implementa-lo de acordo com seu sistema.

Sistema de Login

Primeiro passo é você criar seu Banco de Dados com a tabela user para podermos realizar a consulta sobre ela. Vou mostrar o exemplo que utilizei nesse sistema.

Lembrando que você pode criar seu BD da forma que desejar, caso ainda não saiba como criar um Banco de Dados, acesse nosso artigo sobre Criar Banco de Dados.

 CREATE DATABASE postlogin; USE postlogin; CREATE TABLE IF NOT EXISTS `users` ( `id_users` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(200) COLLATE utf8_unicode_ci NOT NULL, `email` varchar(200) COLLATE utf8_unicode_ci NOT NULL, `pass` varchar(200) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id_users`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

E para exemplo inseri um dado qualquer na tabela users.

 INSERT INTO `users` (`id_users`, `nome`, `email`, `pass`) VALUES (1, 'Leonardo Martins', 'leo.piracaia@hotmail.com', '1234');

Feito nosso BD com sucesso, vamos criar nossa classe de conexão para fazermos o link de nossa aplicação com o Banco de Dados criado.

Crie uma pasta chamada class e crie nosso arquivo (.php) dentro dessa pasta chamado (Conexao.class.php). Vale salientar que por métodos de boa prática, sempre que seu arquivo for uma classe, referenciar no nome do arquivo (.class.php) também, isso o ajudará na organização de seu sistema.

 <?php class Conexao { private $data = array(); //variavel da classe Base protected $pdo = null; public function __set($name, $value){ $this->data[$name] = $value; } public function __get($name){ if (array_key_exists($name, $this->data)) { return $this->data[$name]; } $trace = debug_backtrace(); trigger_error( 'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'], E_USER_NOTICE); return null; } //método que retorna a variável $pdo public function getPdo() { return $this->pdo; } //método construtor da classe function __construct($pdo = null) { $this->pdo = $pdo; if ($this->pdo == null) $this->conectar(); } //método que conecta com o banco de dados public function conectar() { try{ $this->pdo = new PDO("mysql:host=localhost;dbname=postlogin", "root", "", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); }catch (PDOException $e) { print "Error!: " . $e->getMessage() ."<br/>"; die(); } } //método que desconecta public function desconectar() { $this->pdo = null; } public function select($sql){ $stmt = $this->pdo->prepare($sql); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } } ?>

Importante não esquecer de mudar os parâmetros de acesso como servidor, usuário e senha de acesso ao seu servidor local.

Criado nossa classe vamos criar nosso index.php, na qual será a nossa tela de Login de interação com o usuário.

 <!DOCTYPE HTML> <html lang="pt-BR"> <head> <meta charset="UTF-8"/> <title>Sistema Login</title> <link rel="stylesheet" type="text/css" href="css/style.css" /> </head> <body> <article> <form name="form_pesquisa" id="form_pesquisa" method="post" action=""> <div id="login-box"> <H2>Login</H2> Entre com seus dados corretamente para acessar o sistema. <br/> <br/> <div id="login-box-name">Email:</div> <div id="login-box-field"> <input name="email" class="form-login" title="Username" value="" size="30" /> </div> <div id="login-box-name">Password:</div> <div id="login-box-field"> <input name="pass" type="password" class="form-login" title="Password" value="" size="30"/> </div> <br/> <span class="login-box-options"> <input type="checkbox" name="remember" value="1"> Remember Me <a href="#" style="margin-left:30px;">Forgot password?</a> </span> <input type="submit" value="" class="bt-enviar"/> <input type="hidden" name="acao" value="logar"/> </div> </form> </article> </body> </html>

Feito nosso arquivo HTML, vamos inserir no final do arquivo, abaixo de todas as tags, um pequeno código em php, na qual ele será o responsável por chamar nossa classe e passar os valores dos input por parâmetros para nosso método Validar_Usuario e realizarmos a consulta a nossa tabela users.

 <?php $action = isset($_POST['acao']) ? trim($_POST['acao']) : ''; if(isset($action) && $action != ""){ switch($action){ case 'logar': //requerimos nossa classe de autenticação passando os valores dos inputs como parâmetros require_once('class/Autentica.class.php'); //instancio a classse para podermos usar o método nela contida $Autentica = new Autentica(); //setamos $Autentica->email = $_POST['email']; $Autentica->pass = $_POST['pass']; //chamamos nosso método if($Autentica->Validar_Usuario()){ echo "<script type='text/javascript'> location.href='logado.php' </script>"; }else{ echo "<script type='text/javascript'> alert('ATEN\u00c7\u00c4O, Login ou Senha inv\u00e1lidos...');location.href='index.php' </script>"; } break; } } ?>

Nesse trecho de código acontece o seguinte:

  • Setamos uma variável action para fazermos o controle do if, caso não seja pressionado o botão submit, essa var terá valor vazio e sendo assim não validará nossa condição.
  • Após pressionado o botão Logar, o action receberá o valor de logar, então nosso if não será mais vazio, e sendo assim entrará nele. Feito isso ele verifica em nosso switch case seu valor e se estiver tudo ok passa para a próxima etapa.
  • Requerimos nossa classe Autentica.class.php, caso haja dúvidas sobre classes com php acesse nosso artigo sobre Criar classe com PHP.
  • Instanciamos nossa classe, e setamos as var email e pass através dos métodos mágicos php, para saber mais sobre os métodos mágicos php acesse nosso artigo Métodos Mágicos PHP.
  • Feito tudo isso, vamos chamar nosso método de autenticação dos valores passados para a classe, e colocamos ele dentro do if pois, se o retorno de nossa classe for true, significa que foi válido e o Login foi feito com sucesso, agora se for false, alguma coisa deu errado como, Login ou senha inválidos ou algum erro de script.

Nosso método Validar_Usuario ficará assim:

 public function Validar_Usuario(){ //instancio minha classe conexão que foi herdada $pdo = new Conexao(); //chamamos nosso método select da classe conexão que nos retornará um conjunto de dados $resultado = $pdo->select("SELECT * FROM users WHERE email = '".$this->email."' AND pass = '".$this->pass."'"); //desconectamos $pdo->desconectar(); //agora vamos resgatar os valores obtidos pelo nosso método através do foreach //verificamos se houve registros dentro de nossa var se sim entra no if if(count($resultado)){ foreach ($resultado as $res) { //estartamos nossa sessão para podermos usar os dados do usuario em nossa aplicação através de //session, na qual podemos usar para controle de verificar se o user está logado ou não, mostrar o nome do user na tela e etc. session_start(); ob_start(); //setamos as session com os valores obtido da tabela $_SESSION['id_users'] = $res['id_users']; $_SESSION['nome'] = $res['nome']; $_SESSION['email'] = $res['email']; $_SESSION['pass'] = $res['pass']; $_SESSION['logado'] = 'S'; } //se tudo ocorrer bem retornamos true, ou seja verdade return true; }else{ //se algo deu errado retornamos false return false; } }

Beleza pura, se nosso método nos retornar true, nossa aplicação vai nos redirecionar para outra página, vamos então criar nossa página por exemplo, (logado.php), na qual ela vai nos mostrar se conseguimos fazer o Login corretamente ou não e ter um botão de logout(sair) do sistema.

Ah e lembram que eu disse das SESSION que seria importante para controle de acesso, na qual só poderá entrar na página logado.php quem realmente estiver logado, se não a pessoa será redirecionada para a tela de Login, pois bem vamos lá.

Para isso vamos criar um pequeno código em PHP e inseri-lo no começo da página logout.php, que fará essa verificação das session criadas ao logar.

 <?php //starta a sessão session_start(); ob_start(); //resgata os valores das session em variaveis $id_users = isset($_SESSION['id_users']) ? $_SESSION['id_users']: ""; $nome_user = isset($_SESSION['nome']) ? $_SESSION['nome']: ""; $email_users = isset($_SESSION['email']) ? $_SESSION['email']: ""; $pass_users = isset($_SESSION['pass']) ? $_SESSION['pass']: ""; $logado = isset($_SESSION['logado']) ? $_SESSION['logado']: "N"; //varificamos e a var logado contém o valos (S) OU (N), se conter N quer dizer que a pessoa não fez o login corretamente //que no caso satisfará nossa condição no if e a pessoa sera redirecionada para a tela de login novamente if ($logado == "N" && $id_users == ""){ echo "<script type='text/javascript'> location.href='index.php' </script>"; exit(); } ?>

Feito isso add ocódigo HTML da página logado.php que ficará assim:

 <!DOCTYPE HTML> <html lang="pt-BR"> <head> <meta charset="UTF-8"/> <title>Sistema Login</title> </head> <body> <center> <article> <h1><?php echo $nome_user;?> voc&ecirc; est&aacute; logado...</h1> <a href="logout.php"><input type="button" value="Sair"/></a> </article> </center> </body> </html>

E perceba que ele imprime na tela através do PHP a nossa var nome do usuário e mostra o nosso botão logout.

Lembrando que é só um exemplo, você pode implementar da forma que desejar para se adequar ao seu projeto em si.

Bem fácil não é ?? Mas e agora se eu quiser sair do sistema, como faço ???

Simples através do botão sair você será redirecionado para um outro arquivo que vamos criar agora, chamado logout.php, ele será o responsável por destruir nossa session e redirecionarmos para tela inicial novamente, sem que possamos tentar acessa-la via URL.

Nossa página logout ficará assim:

 <?php //inicia a sessao e destroi todos os dados gravados em cache etc session_start(); ob_start(); $_SESSION = array(); if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } @session_destroy(); echo "<script type='text/javascript'> alert('Saindo do sistema...');location.href='index.php' </script>"; ?>

Pronto nosso sistema de Login está completo !!!

Para baixar o arquivo funcional completo clique AQUI...

Dúvidas, críticas ou sugestões comentem abaixo, e bons estudos =) !!! 

Olá, deixe seu comentário para Sistema de Login com Banco de Dados

Já temos 14 comentário(s). DEIXE O SEU :)
paulo ricardo

paulo ricardo

você pode por gentileza liberar uma de cadastro no banco de phpmyadminis nesse mesmo conjunto, dentro da mesma pastad esse projeto ?
tipo ainda não é cadastrado ? ai redirecionado pro cadastro
★★★★★DIA 21.08.22 21h18RESPONDER
N/A
Enviando Comentário Fechar :/
Clebs Franco

Clebs Franco

Olá amigos... eu tenho zero conhecimento em sistemas web
Preciso criar um sistema que eu possa
-Autenticar usuários
-Enviar arquivos (vários de uma vez só)
-Liberar e bloquear envio de documentos por período
Ex.: por padrão o sistema bloqueia o envio de arquivos, mas entre os dia 1 e 5 do mês o adminstrador libera o envio.

Se alguem tiver interesse em me ajudar... me mande um email
clebsfranco@hotmail.com
★★★★★DIA 17.08.20 11h12RESPONDER
N/A
Enviando Comentário Fechar :/
cleudiney Brandão

cleudiney Brandão

Já conseguiu? Eu desenvolvo.
★★★★★DIA 17.10.22 10h59RESPONDER
N/A
Enviando Comentário Fechar :/
Ricardo Amarante

Ricardo Amarante

Como faço um sistema de login onde não necessita colocar senha apenas nome de usuário ( Nick Nane )
★★★★★DIA 16.08.20 23h39RESPONDER
N/A
Enviando Comentário Fechar :/
Fernando Silva

Fernando Silva

Olá, Leonardo tudo bem?
ficou muito bom seu projeto!
Eu preciso de alem do login ter um nivel de administrador e tambem uma outra tabela para que o usuário crie pedidos e um php que exibe apenas os pedidos do usuario logado.
Teria como você me ajudar ?
★★★★★DIA 17.07.20 19h58RESPONDER
cleudiney Brandão
Enviando Comentário Fechar :/
cleudiney Brandão

cleudiney Brandão

eu desenvolvo.
★★★★★DIA 17.10.22 10h59RESPONDER
N/A
Enviando Comentário Fechar :/
jan_ matias

jan_ matias

Irmao
obrigado pelo e-mail, fui tomar uma coca-cola, voltei baixei o arquivo completo e deu tudo certo, gosto de entender o porque disso ou daquilo, mas teu arquivo salvou o projeto
OBRIGADO POR TUDO!!
★★★★★DIA 15.07.20 14h34RESPONDER
Leonardo Martins
Enviando Comentário Fechar :/
Victorio Bormolini

Victorio Bormolini

Excelente Post, Bem esclarecedor!
Uma dúvida, o banco é limitado criar até seis usuários? Estou criando 10 usuários, porém, quando se passa de seis, o sistema não permite logar e informa que o usuário e senha não conferem.
★★★★★DIA 30.01.18 08h36RESPONDER
jose alves
Enviando Comentário Fechar :/
Ronaldo CB

Ronaldo CB

Òtimo exemplo, mas como faço para centralizar ele na página, tanto na horizontal como na vertical?
★★★★★DIA 26.04.17 09h35RESPONDER
Marcos Martins, errewr rwre
Enviando Comentário Fechar :/
mensolution

mensolution

Obrigado, Blog muito interessante !!!
★☆☆☆☆DIA 29.05.15 13h05RESPONDER
N/A
Enviando Comentário Fechar :/
Maycon

Maycon

Opa valeuu ae, me ajudou muitoooooo!
★☆☆☆☆DIA 14.04.15 17h04RESPONDER
jose alves
Enviando Comentário Fechar :/
Carol Bianchi

Carol Bianchi

Muito bom
★☆☆☆☆DIA 04.12.14 13h12RESPONDER
N/A
Enviando Comentário Fechar :/
Joao

Joao

Muito bom, espero que continue sempre crescendo para a busca verdadeira do sentido da vida
★☆☆☆☆DIA 04.12.14 11h12RESPONDER
N/A
Enviando Comentário Fechar :/
Rodrigo

Rodrigo

Muito bom. Artigo muito esclarecedor.
★☆☆☆☆DIA 04.12.14 10h12RESPONDER
N/A
Enviando Comentário Fechar :/
Enviando Comentário Fechar :/

Veja Também:

Artigos Relacionados a categoria: PHP

Soluções

...CURTIU? AINDA NÃO VIU NOSSO PORTFÓLIO?


Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite, veja agora mesmo nossos Cases de Sucesso e tenha seu site nos padrões atuais preparado para maioria dos dispositivos e navegadores.

Usamos cookies para manter o site seguro, registrar e personalizar sua navegação. Para mais detalhes sobre essa atividade, acesse nossa Politica de Privacidade

Entendi