Nenhum produto encontrado nessa seleção.
Com o conhecimento adquirido ao longo de nosso curso de PHP gratuito, já podemos criar um sistema de login simples com PHP. Não vamos utilizar OOP (Object-oriented programming), porque você ainda não viu essa parte da linguagem (será assunto para as próximas aulas), porém, este é um grande desafio para que você teste seus conhecimentos.
Vamos utilizar praticamente tudo visto nas aulas anteriores, eu diria que até um pouco mais. Mesmo assim, vou deixar links para as novidades que aparecerem ao longo desse artigo.
Então vamos lá.
Download
Antes de continuar, se quiser baixar o código descrito neste artigo para acompanhar, ou utilizar:
A pasta está compactada como ZIP, basta descompactar e seguir as instruções desse artigo.
Como funcionará o login simples com PHP?
Nosso sistema de login poderá ser utilizado de duas formas:
- Bloqueando o arquivo inteiro: Isso significa que o usuário que não estiver logado no sistema, não conseguirá ver o conteúdo do arquivo.
- Bloquear partes do arquivo: O usuário que não estiver logado poderá ver partes do arquivo, porém, você ainda poderá bloquear partes do que desejar.
Vamos fazer uma verificação na base de dados a cada carregamento de página. Tal consulta irá verificar se os dados do usuário estão corretos e atualizará os dados da sessão PHP, ou seja, se você alterar o nome do usuário na base de dados, esses dados serão atualizados na próxima atualização de página. Porém, se você alterar o usuário ou a senha, o usuário será deslogado imediatamente.
Para a senha, vamos utilizar a função crypt do PHP, que vai criptografar a senha no banco de dados e manter os usuários seguros.
Para fazer isso, vamos dividir nosso sistema de login em alguns arquivos menores, cada um com uma função específica.
Vamos ver como isso funciona na prática.
O banco de dados e a tabela
A primeira coisa que precisamos fazer é criar um banco de dados, uma tabela e um usuário com permissão de acesso a tais dados.
Observação: Se você tiver dúvidas sobre a criação de bancos de dados, dê uma olhada em nossa aula "Crie tabelas e bases de dados no phpMyAdmin".
Crie um banco de dados chamado "sistema_login".
Comando MySQL
CREATE DATABASE `sistema_login` CHARACTER SET utf8;
Crie um usuário chamado "admin_db", com senha "senha_234887", e permissão na base de dados que acabamos de criar.
Comando MySQL
CREATE USER 'admin_db'@'localhost' IDENTIFIED BY 'senha_234887'; FLUSH PRIVILEGES; GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE ON `sistema_login`.* TO 'admin_db' @'localhost';
Crie uma tabela com os seguintes campos:
- user_id (O ID do usuário, chave primária);
- user (O usuário para login);
- user_name (O nome do usuário);
- user_password (A senha).
Comando MySQL
CREATE TABLE `sistema_login`.`usuarios` ( `user_id` INT (11) NOT NULL AUTO_INCREMENT COMMENT 'ID do Usuário', `user` VARCHAR (255) NOT NULL COMMENT 'Usuário', `user_name` VARCHAR (255) NOT NULL COMMENT 'Nome do usuário', `user_password` VARCHAR (255) NOT NULL COMMENT 'Senha', PRIMARY KEY (`user_id`) ) CHARSET = utf8 ;
O comando MySQL acima mostra os dados dos campos da tabela.
Os arquivos necessários
Agora vamos criar cada arquivo separadamente na seguinte estrutura:
login | config.php | redirect.php | sair.php | verifica_login.php index.php login.php
Cada um dos arquivos tem um papel para nosso sistema de login simples com PHP, veja:
- config.php – Arquivo de configuração geral (variáveis e base de dados);
- redirect.php – Redireciona para a página de login (não requerido);
- sair.php – Desloga o usuário;
- verifica_login.php – Verifica se o usuário está logado;
- login.php – Formulário de login;
- index.php – Arquivo para simulação de todos os arquivos que precisarão de login.
Dentro da pasta que disponibilizei para download, ainda existe uma outra pasta chamada "cria-usuarios". Ela contém um simples formulário para gerenciar os usuários na base de dados. Não vou entrar em detalhes sobre ela neste artigo, porém, tudo que existe dentro dela já foi descrito em nosso curso de PHP gratuito.
Agora vamos ver os detalhes de cada arquivo.
Criando um sistema de login simples com PHP
Os arquivos que vou detalhar abaixo estão diretos na raiz da pasta criada, ou seja, index.php e login.php.
index.php
Este arquivo foi criado para testar nosso sistema de login. Ele não poderá ser acessado sem login, portanto, utilizaremos uma linha para incluir o arquivo redirect.php. Quando um usuário que não está logado no sistema tentar acessá-lo, será redirecionado imediatamente para a página de login.
<?php // Inclui o arquivo de configuração include('login/config.php'); // Inclui o arquivo de verificação de login include('login/verifica_login.php'); // Se não for permitido acesso nenhum ao arquivo // Inclua o trecho abaixo, ele redireciona o usuário para // o formulário de login include('login/redirect.php'); ?> Olá <b><?php echo $_SESSION['nome_usuario']?></b>, <a href="login/sair.php">clique aqui</a> para sair.
O cabeçalho dos seus outros arquivos que precisam de login poderão ser uma cópia do código acima.
Caso o arquivo inteiro não precise ser bloqueado, você pode remover a linha:
include('login/redirect.php');
E bloquear a parte que precisar da seguinte maneira:
<?php // Inclui o arquivo de configuração include('login/config.php'); // Inclui o arquivo de verificação de login include('login/verifica_login.php'); ?> <p>Conteúdo livre</p> <?php if ( $_SESSION['logado'] === true ):?> <p>Este conteúdo só estará disponível para usuários logados</p> <?php endif; ?> <p>Conteúdo livre</p>
Agora veja o formulário de login.
login.php
O formulário de login é bastante simples. Ele só inclui um pequeno trecho PHP, que será necessário para mostrar erros (caso ocorram) para o usuário.
<?php // Inicia a sessão session_start(); ?> <!doctype html> <html> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <form action="index.php" method="post"> <table> <tr> <td>Usuário</td> </tr> <tr> <td><input type="text" name="usuario" required></td> </tr> <tr> <td>Senha</td> </tr> <tr> <td><input type="password" name="senha" required></td> </tr> <tr> <td><a href="cria-usuarios/">Criar usuário</a></td> </tr> <?php if ( ! empty( $_SESSION['login_erro'] ) ) :?> <tr> <td style="color: red;"><?php echo $_SESSION['login_erro'];?></td> <?php $_SESSION['login_erro'] = ''; ?> </tr> <?php endif; ?> <tr> <td><input type="submit" value="Entrar"></td> </tr> </table> </form> </body> </html>
Perceba que não temos muitos segredos no formulário acima, porém, estamos utilizando um formulário para HTTP POST:
config.php
Este é o arquivo de configuração do nosso sistema de login simples com PHP.
Nele vamos iniciar a sessão e configurar duas variáveis que vamos precisar para verificar se o usuário está logado, ou se ocorreu algum erro durando o login:
<?php // Inicia a sessão session_start(); // Variável que verifica se o usuário está logado if ( ! isset( $_SESSION['logado'] ) ) { $_SESSION['logado'] = false; } // Erro do login $_SESSION['login_erro'] = false; ?>
O trecho de código acima contém conteúdo da aula 24:
Em seguida, vamos configurar nossa conexão com a base de dados:
<?php /** * PDO - Conexão com a base de dados - Aula 28 * http://www.todoespacoonline.com/w/2014/07/23/pdo-em-php/ */ // Variáveis da conexão $base_dados = 'sistema_login'; $usuario_bd = 'admin_db'; $senha_bd = 'senha_234887'; $host_db = 'localhost'; $charset_db = 'UTF8'; $conexao_pdo = null; // Concatenação das variáveis para detalhes da classe PDO $detalhes_pdo = 'mysql:host=' . $host_db . ';'; $detalhes_pdo .= 'dbname='. $base_dados . ';'; $detalhes_pdo .= 'charset=' . $charset_db . ';'; // Tenta conectar try { // Cria a conexão PDO com a base de dados $conexao_pdo = new PDO($detalhes_pdo, $usuario_bd, $senha_bd); } catch (PDOException $e) { // Se der algo errado, mostra o erro PDO print "Erro: " . $e->getMessage() . "<br/>"; // Mata o script die(); } ?>
O trecho de código acima contém conteúdo da aula 28:
Agora vamos verificar o login.
verifica_login.php
Este arquivo faz a verificação de várias coisas, por exemplo:
- Se existe conexão PDO;
- Se o usuário está vindo do formulário de login ou se já está logado;
- Se os dados do usuário estão setados e têm valor;
- Se os dados do usuário estão corretos;
Também vamos fazer a configuração das variáveis da sessão para carregar por todas as páginas necessárias.
Veja por partes:
Verifica a conexão:
// Verifica se estamos conectados ao BD if ( ! isset( $conexao_pdo ) || ! is_object( $conexao_pdo ) ) { exit('Erro na conexão com o banco de dados.'); }
Verifica se os dados estão vindo do formulário de login (HTTP POST) ou se o usuário já está logado ($_SESSION):
// Une $_SESSION e $POST para verificação if ( isset( $_POST ) && ! empty( $_POST ) ) { $dados_usuario = $_POST; } else { $dados_usuario = $_SESSION; }
Verifica se os dados do usuário têm algum valor; se sim, verifica no banco de dados se os dados estão corretos, e configura as variáveis da sessão:
// Verifica se os campos de usuário e senha existem // E se não estão em branco if ( isset ( $dados_usuario['usuario'] ) && isset ( $dados_usuario['senha'] ) && ! empty ( $dados_usuario['usuario'] ) && ! empty ( $dados_usuario['senha'] ) ) { // Faz a consulta do nome de usuário na base de dados $pdo_checa_user = $conexao_pdo->prepare('SELECT * FROM usuarios WHERE user = ? LIMIT 1'); $verifica_pdo = $pdo_checa_user->execute( array( $dados_usuario['usuario'] ) ); // Verifica se a consulta foi realizada com sucesso if ( ! $verifica_pdo ) { $erro = $pdo_checa_user->errorInfo(); exit( $erro[2] ); } // Busca os dados da linha encontrada $fetch_usuario = $pdo_checa_user->fetch(); // Verifica se a senha do usuário está correta if ( crypt( $dados_usuario['senha'], $fetch_usuario['user_password'] ) === $fetch_usuario['user_password'] ) { // O usuário está logado $_SESSION['logado'] = true; $_SESSION['nome_usuario'] = $fetch_usuario['user_name']; $_SESSION['usuario'] = $fetch_usuario['user']; $_SESSION['user_id'] = $fetch_usuario['user_id']; } else { // Continua deslogado $_SESSION['logado'] = false; // Preenche o erro para o usuário $_SESSION['login_erro'] = 'Usuário ou senha inválidos'; } }
Observação: Se tiver dúvidas, leia nossa aula sobre estruturas condicionais em PHP.
Pode tomar um tempo para você conseguir entender o que acontece no trecho de código acima, porém, é bastante simples. Apenas leia os comentários e, se tiver dúvidas, verifique as aulas anteriores.
Vamos ver o restante dos arquivos.
redirect.php
Este arquivo simplesmente verifica se o usuário está logado ou não; se não, redireciona para a página de login; se sim, não faz nada:
<?php if ( $_SESSION['logado'] != true ) { header('location: ' . dirname( $_SERVER['PHP_SELF'] ) . '/login.php'); }
Por fim, o arquivo final, sair!
sair.php
O arquivo sair.php simplesmente destrói a sessão e redireciona para a página de login:
<?php // Inicia a sessão session_start(); // Destrói a sessão $_SESSION = array(); session_destroy(); // Redireciona para o login.php header('location: ../login.php');
Simples assim.
Download
Novamente, recomendo que baixe os arquivos desse aula para estudos posteriores:
Concluindo
Este artigo é voltado para o lado educacional, ou seja, para que você veja como pode juntar partes do que você aprendeu em nosso curso de PHP gratuito e criar um sistema que faça algo útil.
Porém, você pode utilizar os trechos de código e a ideia acima para criar seu próprio sistema de login em PHP.
Ainda vamos avançar muito em PHP, portanto, se você está com dúvidas, não hesite em perguntar nos comentários. Faremos questão de ajudar no que estiver em nosso alcance.