PHP
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.
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ê está 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 =) !!!
Gigasystems Login:
Informe seu e-mail abaixo para continuar!
XVeja Também:
Artigos Relacionados a categoria: PHP
Cotações para compra e venda de Moedas estrangeiras com PHP
27 July de 2016
Gerenciador de dependências Composer
14 January de 2016
Erro ao acessar um arquivo externo com o comando file_get_content
04 November de 2015
Baixando anexo do email no servidor com IMAP e PHP
27 August de 2015
Olá, deixe seu comentário para Sistema de Login com Banco de Dados
paulo ricardo
tipo ainda não é cadastrado ? ai redirecionado pro cadastro
Clebs Franco
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
cleudiney Brandão
Ricardo Amarante
Fernando Silva
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 ?
cleudiney Brandão
jan_ matias
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!!
Victorio Bormolini
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.
Ronaldo CB
mensolution
Maycon
Carol Bianchi
Joao
Rodrigo