Deuzebranaweb suporte Host
php

Criando um sistema de login com PHP e MySQL

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
DROP TABLE IF EXISTS `usuarios`;
2
CREATE TABLE IF NOT EXISTS `usuarios` (
3
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
4
`nome` varchar(100) NOT NULL,
5
`usuario` varchar(50) NOT NULL,
6
`senha` varchar(50) NOT NULL,
7
PRIMARY KEY (`id`),
8
UNIQUE KEY `usuario` (`usuario`)
9
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
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

2

3

4

5

6

7

8

9

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:

01
// Inclui o arquivo com o sistema de segurança
02
include(“seguranca.php”);
03

04
// Verifica se um formulário foi enviado
05
if ($_SERVER[‘REQUEST_METHOD’] == ‘POST’) {
06
// Salva duas variáveis com o que foi digitado no formulário
07
// Detalhe: faz uma verificação com isset() pra saber se o campo foi preenchido
08
$usuario = (isset($_POST[‘usuario’])) ? $_POST[‘usuario’] : ”;
09
$senha = (isset($_POST[‘senha’])) ? $_POST[‘senha’] : ”;
10

11
// Utiliza uma função criada no seguranca.php pra validar os dados digitados
12
if (validaUsuario($usuario, $senha) == true) {
13
// O usuário e a senha digitados foram validados, manda pra página interna
14
header(“Location: index.php”);
15
} else {
16
// O usuário e/ou a senha são inválidos, manda de volta pro form de login
17
// Para alterar o endereço da página de login, verifique o arquivo seguranca.php
18
expulsaVisitante();
19
}
20
}
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:

001
/**
002
* Sistema de segurança com acesso restrito
003
*
004
* Usado para restringir o acesso de certas páginas do seu site
005
*
006
* @author Thiago Belem
007
* @link http://thiagobelem.net/
008
*
009
* @version 1.0
010
* @package SistemaSeguranca
011
*/
012

013
// Configurações do Script
014
// ==============================
015
$_SG[‘conectaServidor’] = true; // Abre uma conexão com o servidor MySQL?
016
$_SG[‘abreSessao’] = true; // Inicia a sessão com um session_start()?
017

018
$_SG[‘caseSensitive’] = false; // Usar case-sensitive? Onde ‘thiago’ é diferente de ‘THIAGO’
019

020
$_SG[‘validaSempre’] = true; // Deseja validar o usuário e a senha a cada carregamento de página?
021
// Evita que, ao mudar os dados do usuário no banco de dado o mesmo contiue logado.
022

023
$_SG[‘servidor’] = ‘localhost’; // Servidor MySQL
024
$_SG[‘usuario’] = ‘root’; // Usuário MySQL
025
$_SG[‘senha’] = ”; // Senha MySQL
026
$_SG[‘banco’] = ‘test’; // Banco de dados MySQL
027

028
$_SG[‘paginaLogin’] = ‘login.php’; // Página de login
029

030
$_SG[‘tabela’] = ‘usuarios’; // Nome da tabela onde os usuários são salvos
031
// ==============================
032

033
// ======================================
034
// ~ Não edite a partir deste ponto ~
035
// ======================================
036

037
// Verifica se precisa fazer a conexão com o MySQL
038
if ($_SG[‘conectaServidor’] == true) {
039
$_SG[‘link’] = mysql_connect($_SG[‘servidor’], $_SG[‘usuario’], $_SG[‘senha’]) or die(“MySQL: Não foi possível conectar-se ao servidor [“.$_SG[‘servidor’].”].”);
040
mysql_select_db($_SG[‘banco’], $_SG[‘link’]) or die(“MySQL: Não foi possível conectar-se ao banco de dados [“.$_SG[‘banco’].”].”);
041
}
042

043
// Verifica se precisa iniciar a sessão
044
if ($_SG[‘abreSessao’] == true) {
045
session_start();
046
}
047

048
/**
049
* Função que valida um usuário e senha
050
*
051
* @param string $usuario – O usuário a ser validado
052
* @param string $senha – A senha a ser validada
053
*
054
* @return bool – Se o usuário foi validado ou não (true/false)
055
*/
056
function validaUsuario($usuario, $senha) {
057
global $_SG;
058

059
$cS = ($_SG[‘caseSensitive’]) ? ‘BINARY’ : ”;
060

061
// Usa a função addslashes para escapar as aspas
062
$nusuario = addslashes($usuario);
063
$nsenha = addslashes($senha);
064

065
// Monta uma consulta SQL (query) para procurar um usuário
066
$sql = “SELECT `id`, `nome` FROM `”.$_SG[‘tabela’].”` WHERE “.$cS.” `usuario` = ‘”.$nusuario.”‘ AND “.$cS.” `senha` = ‘”.$nsenha.”‘ LIMIT 1″;
067
$query = mysql_query($sql);
068
$resultado = mysql_fetch_assoc($query);
069

070
// Verifica se encontrou algum registro
071
if (empty($resultado)) {
072
// Nenhum registro foi encontrado => o usuário é inválido
073
return false;
074

075
} else {
076
// O registro foi encontrado => o usuário é valido
077

078
// Definimos dois valores na sessão com os dados do usuário
079
$_SESSION[‘usuarioID’] = $resultado[‘id’]; // Pega o valor da coluna ‘id do registro encontrado no MySQL
080
$_SESSION[‘usuarioNome’] = $resultado[‘nome’]; // Pega o valor da coluna ‘nome’ do registro encontrado no MySQL
081

082
// Verifica a opção se sempre validar o login
083
if ($_SG[‘validaSempre’] == true) {
084
// Definimos dois valores na sessão com os dados do login
085
$_SESSION[‘usuarioLogin’] = $usuario;
086
$_SESSION[‘usuarioSenha’] = $senha;
087
}
088

089
return true;
090
}
091
}
092

093
/**
094
* Função que protege uma página
095
*/
096
function protegePagina() {
097
global $_SG;
098

099
if (!isset($_SESSION[‘usuarioID’]) OR !isset($_SESSION[‘usuarioNome’])) {
100
// Não há usuário logado, manda pra página de login
101
expulsaVisitante();
102
} else if (!isset($_SESSION[‘usuarioID’]) OR !isset($_SESSION[‘usuarioNome’])) {
103
// Há usuário logado, verifica se precisa validar o login novamente
104
if ($_SG[‘validaSempre’] == true) {
105
// Verifica se os dados salvos na sessão batem com os dados do banco de dados
106
if (!validaUsuario($_SESSION[‘usuarioLogin’], $_SESSION[‘usuarioSenha’])) {
107
// Os dados não batem, manda pra tela de login
108
expulsaVisitante();
109
}
110
}
111
}
112
}
113

114
/**
115
* Função para expulsar um visitante
116
*/
117
function expulsaVisitante() {
118
global $_SG;
119

120
// Remove as variáveis da sessão (caso elas existam)
121
unset($_SESSION[‘usuarioID’], $_SESSION[‘usuarioNome’], $_SESSION[‘usuarioLogin’], $_SESSION[‘usuarioSenha’]);
122

123
// Manda pra tela de login
124
header(“Location: “.$_SG[‘paginaLogin’]);
125
}
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
include(“seguranca.php”); // Inclui o arquivo com o sistema de segurança
2
protegePagina(); // Chama a função que protege a página
Quando vocês quiserem exibir o nome do usuário logado, é só fazer isso:

1
echo “Olá, ” . $_SESSION[‘usuarioNome’];
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.

http://blog.thiagobelem.net/criando-um-sistema-de-login-com-php-e-mysql/

Related posts

Interspire E-mail Marketing 6 – Script PHP

Eduardo
12 anos ago

Criando seu primeiro widget no WordPress

Eduardo
12 anos ago

install FILEINFO ou outros PHP Modules WHM muito bom?

Eduardo
11 anos ago
Sair da versão mobile