Anda di halaman 1dari 5

23/06/2016 Criando um sistema de login com PHP e MySQL ­ Thiago Belem / Blog

Criando um sistema de login com PHP e MySQL

Encontrou um problema no conteúdo? Por favor, deixe seu comentário!

Hoje vou ensinar a criar um sistema de login simples usando PHP e MySQL.

É recomendável que você já tenha um conhecimento prévio de HTML e, se possível, PHP e MySQL para
tornar as coisas mais fáceis.

Nosso sistema será bem simples: um arquivo chamado seguranca.php, que deverá ser incluído no topo do seu
site (em todas as páginas) e que faz a conexão com o banco de dados e que possui algumas funções usadas
para redirecionar o visitante para o formulário de login (login.php) caso ele não esteja logado.

Vamos ao trabalho:

O que iremos definir primeiro é a tabela usada para armazenar os usuários do sistema:

1 CREATE TABLE IF NOT EXISTS `usuarios` (
2   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
3   `nome` varchar(100) NOT NULL,
4   `usuario` varchar(50) NOT NULL,
5   `senha` varchar(50) NOT NULL,
6   PRIMARY KEY (`id`),
7   UNIQUE KEY `usuario` (`usuario`)
8 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

usuarios.sql hosted with ❤ by GitHub view raw

Execute esse bloco SQL no seu banco de dados para criar a tabela usada pelo sistema.

Depois disso, vamos ao formulário de login que você colocará dentro de um arquivo chamado login.php:

1 <form method="post" action="valida.php">
2   <label>Usuário</label>
3   <input type="text" name="usuario" maxlength="50" />
4   
5   <label>Senha</label>
6   <input type="password" name="senha" maxlength="50" />
7   
8   <input type="submit" value="Entrar" />
9 </form>

login.html hosted with ❤ by GitHub view raw

Esse formulário, com apenas dois campos, manda pra página valida.php, que é um pequeno PHP que
receberá os dados enviados pelo formulário, fará a validação deles e mandará o visitante ou pra página
interna (index.php) ou de volta pra página de login (login.php).

Esse é o codigo fonte do arquivo valida.php:

http://blog.thiagobelem.net/criando­um­sistema­de­login­com­php­e­mysql 1/15
23/06/2016 Criando um sistema de login com PHP e MySQL ­ Thiago Belem / Blog

1 <?php
2 // Inclui o arquivo com o sistema de segurança
3 require_once("seguranca.php");
4
5 // Verifica se um formulário foi enviado
6 if ($_SERVER['REQUEST_METHOD'] == 'POST') {
7   // Salva duas variáveis com o que foi digitado no formulário
8   // Detalhe: faz uma verificação com isset() pra saber se o campo foi preenchido
9   $usuario = (isset($_POST['usuario'])) ? $_POST['usuario'] : '';
10   $senha = (isset($_POST['senha'])) ? $_POST['senha'] : '';
11
12   // Utiliza uma função criada no seguranca.php pra validar os dados digitados
13   if (validaUsuario($usuario, $senha) == true) {
14     // O usuário e a senha digitados foram validados, manda pra página interna
15     header("Location: index.php");
16   } else {
17     // O usuário e/ou a senha são inválidos, manda de volta pro form de login
18     // Para alterar o endereço da página de login, verifique o arquivo seguranca.php
19     expulsaVisitante();
20   }
21 }

valida.php hosted with ❤ by GitHub view raw

A estrutura do seu site, até esse ponto, deve estar dessa forma:

../pasta_do_seu_site/index.php » Página intera a ser protegida
../pasta_do_seu_site/login.php » Página com o formulário de login
../pasta_do_seu_site/valida.php » Página que faz a validação dos dados do formulário

Agora vamos criar o arquivo seguranca.php na mesma pasta dos demais arquivos:

1 <?php
2 /**
3 * Sistema de segurança com acesso restrito
4 *
5 * Usado para restringir o acesso de certas páginas do seu site
6 *
7 * @author Thiago Belem <contato@thiagobelem.net>
8 * @link http://thiagobelem.net/
9 *
10 * @version 1.0
11 * @package SistemaSeguranca
12 */
13
14 //  Configurações do Script
15 // ==============================
16 $_SG['conectaServidor'] = true;    // Abre uma conexão com o servidor MySQL?
17 $_SG['abreSessao'] = true;         // Inicia a sessão com um session_start()?
18
19 $_SG['caseSensitive'] = false;     // Usar case‐sensitive? Onde 'thiago' é diferente de 'THIAGO'
20
21 $_SG['validaSempre'] = true;       // Deseja validar o usuário e a senha a cada carregamento de página?

http://blog.thiagobelem.net/criando­um­sistema­de­login­com­php­e­mysql 2/15
23/06/2016 Criando um sistema de login com PHP e MySQL ­ Thiago Belem / Blog

22 // Evita que, ao mudar os dados do usuário no banco de dado o mesmo contiue logado.
23
24 $_SG['servidor'] = 'localhost';    // Servidor MySQL
25 $_SG['usuario'] = 'root';          // Usuário MySQL
26 $_SG['senha'] = '';                // Senha MySQL
27 $_SG['banco'] = 'test';            // Banco de dados MySQL
28
29 $_SG['paginaLogin'] = 'login.php'; // Página de login
30
31 $_SG['tabela'] = 'usuarios';       // Nome da tabela onde os usuários são salvos
32 // ==============================
33
34 // ======================================
35 //   ~ Não edite a partir deste ponto ~
36 // ======================================
37
38 // Verifica se precisa fazer a conexão com o MySQL
39 if ($_SG['conectaServidor'] == true) {
40   $_SG['link'] = mysql_connect($_SG['servidor'], $_SG['usuario'], $_SG['senha']) or die("MySQL: Não foi po
41   mysql_select_db($_SG['banco'], $_SG['link']) or die("MySQL: Não foi possível conectar‐se ao banco de dad
42 }
43
44 // Verifica se precisa iniciar a sessão
45 if ($_SG['abreSessao'] == true)
46   session_start();
47
48 /**
49 * Função que valida um usuário e senha
50 *
51 * @param string $usuario ‐ O usuário a ser validado
52 * @param string $senha ‐ A senha a ser validada
53 *
54 * @return bool ‐ Se o usuário foi validado ou não (true/false)
55 */
56 function validaUsuario($usuario, $senha) {
57   global $_SG;
58
59   $cS = ($_SG['caseSensitive']) ? 'BINARY' : '';
60
61   // Usa a função addslashes para escapar as aspas
62   $nusuario = addslashes($usuario);
63   $nsenha = addslashes($senha);
64
65   // Monta uma consulta SQL (query) para procurar um usuário
66   $sql = "SELECT `id`, `nome` FROM `".$_SG['tabela']."` WHERE ".$cS." `usuario` = '".$nusuario."' AND 
67   $query = mysql_query($sql);
68   $resultado = mysql_fetch_assoc($query);
69
70   // Verifica se encontrou algum registro
71   if (empty($resultado)) {
72     // Nenhum registro foi encontrado => o usuário é inválido
73     return false;

http://blog.thiagobelem.net/criando­um­sistema­de­login­com­php­e­mysql 3/15
23/06/2016 Criando um sistema de login com PHP e MySQL ­ Thiago Belem / Blog

74   } else {
75     // Definimos dois valores na sessão com os dados do usuário
76     $_SESSION['usuarioID'] = $resultado['id']; // Pega o valor da coluna 'id do registro encontrado no MyS
77     $_SESSION['usuarioNome'] = $resultado['nome']; // Pega o valor da coluna 'nome' do registro encontrado
78
79     // Verifica a opção se sempre validar o login
80     if ($_SG['validaSempre'] == true) {
81       // Definimos dois valores na sessão com os dados do login
82       $_SESSION['usuarioLogin'] = $usuario;
83       $_SESSION['usuarioSenha'] = $senha;
84     }
85
86     return true;
87   }
88 }
89
90 /**
91 * Função que protege uma página
92 */
93 function protegePagina() {
94   global $_SG;
95
96   if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
97     // Não há usuário logado, manda pra página de login
98     expulsaVisitante();
99   } else if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
100     // Há usuário logado, verifica se precisa validar o login novamente
101     if ($_SG['validaSempre'] == true) {
102       // Verifica se os dados salvos na sessão batem com os dados do banco de dados
103       if (!validaUsuario($_SESSION['usuarioLogin'], $_SESSION['usuarioSenha'])) {
104         // Os dados não batem, manda pra tela de login
105         expulsaVisitante();
106       }
107     }
108   }
109 }
110
111 /**
112 * Função para expulsar um visitante
113 */
114 function expulsaVisitante() {
115   global $_SG;
116
117   // Remove as variáveis da sessão (caso elas existam)
118   unset($_SESSION['usuarioID'], $_SESSION['usuarioNome'], $_SESSION['usuarioLogin'], $_SESSION['usuarioSen
119
120   // Manda pra tela de login
121   header("Location: ".$_SG['paginaLogin']);
122 }

vailda.php hosted with ❤ by GitHub view raw

http://blog.thiagobelem.net/criando­um­sistema­de­login­com­php­e­mysql 4/15
23/06/2016 Criando um sistema de login com PHP e MySQL ­ Thiago Belem / Blog

Não vou poder explicar todas as funções do arquivo pq é muita coisa.. Mas todas elas estão devidamente
comentadas e documentadas… É só olhar.

Com esse arquivos nós já nos conectamos automaticamente ao servidor MySQL, então se você usar outra
forma pra fazer a conexão, vá na parte de configurações do seguranca.php e defina a variável
$_SG['conectaServidor'] pra falso (false). O mesmo acontece pra sessão com a variável
$_SG['abreSessao'].

Agora é só incluir essas linhas no topo de cada arquivo que deverá ter o acesso restrito:

1 <?php
2 include("seguranca.php"); // Inclui o arquivo com o sistema de segurança
3 protegePagina(); // Chama a função que protege a página

gistfile1.php hosted with ❤ by GitHub view raw

Quando vocês quiserem exibir o nome do usuário logado, é só fazer isso:

1 <?php
2 echo "Olá, " . $_SESSION['usuarioNome'];

gistfile1.php hosted with ❤ by GitHub view raw

Veja mais sobre escrever e pegar valores da sessão (coisa que acontece muito nesse sistema de login) no
tópico Aprendendo a usar sessões no PHP.

Viram como é fácil?

Pra quem quiser um tutorial mais explicado e detalhado recomendo: Como criar um Sistema de Login com
Níveis de Permissão (passo­a­passo).

Nota: Alguns de vocês devem ter notado que durante essa semana, no post Criando Sistemas
Seguros, falei sobre não usar nomes óbvios para tabelas de usuários. Mas esse exemplo é
apenas explicativo, você pode mudar o nome da tabela de usuários se preferir e depois é só
alterar a variável no bloco de configurações dentro do seguranca.php.

Veja aqui como criar um sistema de login usando classes (Orientação a Objetos) e que funciona no PHP 4 e
PHP 5.

Escrito por

Thiago Belem

Publicado 09 Mar 2009

51 Comments Thiago Belem / Blog   Login

  Recommend  7 ⤤ Share Ordenar por Melhor avaliado

Join the discussion…

Gustavo de Souza  •  um ano atrás
http://blog.thiagobelem.net/criando­um­sistema­de­login­com­php­e­mysql 5/15

Anda mungkin juga menyukai