PHP

Em por

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 wink !!! 

Veja Também:

Artigos Relacionados a categoria: PHP

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

Já temos 6 comentário(s). DEIXE O SEU :)
Rodrigo

Rodrigo

Muito bom. Artigo muito esclarecedor.
★☆☆☆☆ DIA 04.12.14 10h12 RESPONDER
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 11h12 RESPONDER
N/A
Enviando Comentário Fechar :/
carol

carol

Muito bom
★☆☆☆☆ DIA 04.12.14 13h12 RESPONDER
N/A
Enviando Comentário Fechar :/
Maycon

Maycon

Opa valeuu ae, me ajudou muitoooooo!
★☆☆☆☆ DIA 14.04.15 17h04 RESPONDER
N/A
Enviando Comentário Fechar :/
mensolution

mensolution

Obrigado, Blog muito interessante !!!
★☆☆☆☆ DIA 29.05.15 13h05 RESPONDER
N/A
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 09h35 RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Enviando Comentário Fechar :/

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

Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite e veja agora mesmo e tenha um site de qualidade para o seu negócio!

[contato]
Ver o Portfólio Agora