Sistema de login com PHP e MySQLi
Tutorial atualizado: Sistema de Login com PHP e Criptografar a senha com API do PHP.
Como implementar um sistema de login em PHP com redirecionamento de nível de acesso e senha criptografada com MD5.
Para montar o layout do login será utilizado o Framework Bootstrap.
Baixar o código fonte: Clique aqui
Primeiramente vamos montar a página de login "index.php". No código abaixo somente está a estrutura do HTML sem a estruturação do layout. Para estilizar o layout será utilizado o framework Bootstrap. A página de login estilizada pode ser baixada no link disponível final deste artigo.
<?php
//Inicializado primeira a sessão para posteriormente recuperar valores das variáveis globais.
session_start();
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="author" content="Cesar Szpak">
<title>Celke - Login</title>
</head>
<body>
<!-- Criado o formulário para o usuário colocar os dados de acesso. -->
<form method="POST" action="valida.php">
<h2>Área Restrita</h2>
<label>Email</label>
<input type="email" name="email" placeholder="Email" required autofocus>
<label>Senha</label>
<input type="password" name="senha" placeholder="Senha" required>
<button type="submit">Acessar</button>
</form>
<p>
<?php
//Recuperando o valor da variável global, os erro de login.
if(isset($_SESSION['loginErro'])){
echo $_SESSION['loginErro'];
unset($_SESSION['loginErro']);
}?>
</p>
<p>
<?php
//Recuperando o valor da variável global, deslogado com sucesso.
if(isset($_SESSION['logindeslogado'])){
echo $_SESSION['logindeslogado'];
unset($_SESSION['logindeslogado']);
}
?>
</p>
</body>
</html>
Agora vamos validar os dados digitado pelo usuário. Vamos criar a página "valida.php".
<?php
session_start();
//Incluindo a conexão com banco de dados
include_once("conexao.php");
//O campo usuário e senha preenchido entra no if para validar
if((isset($_POST['email'])) && (isset($_POST['senha']))){
$usuario = mysqli_real_escape_string($conn, $_POST['email']); //Escapar de caracteres especiais, como aspas, prevenindo SQL injection
$senha = mysqli_real_escape_string($conn, $_POST['senha']);
$senha = md5($senha);
//Buscar na tabela usuario o usuário que corresponde com os dados digitado no formulário
$result_usuario = "SELECT * FROM usuarios WHERE email = '$usuario' && senha = '$senha' LIMIT 1";
$resultado_usuario = mysqli_query($conn, $result_usuario);
$resultado = mysqli_fetch_assoc($resultado_usuario);
//Encontrado um usuario na tabela usuário com os mesmos dados digitado no formulário
if(isset($resultado)){
$_SESSION['usuarioId'] = $resultado['id'];
$_SESSION['usuarioNome'] = $resultado['nome'];
$_SESSION['usuarioNiveisAcessoId'] = $resultado['niveis_acesso_id'];
$_SESSION['usuarioEmail'] = $resultado['email'];
if($_SESSION['usuarioNiveisAcessoId'] == "1"){
header("Location: administrativo.php");
}elseif($_SESSION['usuarioNiveisAcessoId'] == "2"){
header("Location: colaborador.php");
}else{
header("Location: cliente.php");
}
//Não foi encontrado um usuario na tabela usuário com os mesmos dados digitado no formulário
//redireciona o usuario para a página de login
}else{
//Váriavel global recebendo a mensagem de erro
$_SESSION['loginErro'] = "Usuário ou senha Inválido";
header("Location: index.php");
}
//O campo usuário e senha não preenchido entra no else e redireciona o usuário para a página de login
}else{
$_SESSION['loginErro'] = "Usuário ou senha inválido";
header("Location: index.php");
}
?>
Primeiro inicializado a sessão, em seguida é incluído a conexão com a base de dados.
Em seguida verificado se o campo e-mail e senha está diferente de vazio, entra no if para validar o login, caso um dos campos esteja vazio ou ambos, entra no else, cria um variável global e insere a mensagem de erro e redireciona o usuário para a página de login.
Recebe os dados dos campos "email" e "senha", verifica SQL injection, converte a senha em md5.
Busca com o SELECT os dados na tabela usuário com o MySQLi, também utiliza o WHERE. Encontrando o usuário na tabela, acessa o if, caso contrario acessa o else.
Acessando o if, é criado as variáveis globais com os dados do usuário. Em seguida verificado o nível de acesso, é direcionado o usuário conforme seu nível de acesso.
Agora vamos conectar o PHP com o MySQLi. Vamos criar a página "conexao.php".
<?php
$servidor = "localhost";
$usuario = "root";
$senha = "";
$dbname = "funvildevendas";
//Criar a conexao
$conn = mysqli_connect($servidor, $usuario, $senha, $dbname);
if(!$conn){
die("Falha na conexao: " . mysqli_connect_error());
}else{
//echo "Conexao realizada com sucesso";
}
?>
Tabelas utilizadas para criar o sistema de login.
CREATE TABLE IF NOT EXISTS `usuarios` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(220) NOT NULL,
`email` varchar(520) NOT NULL,
`senha` varchar(50) NOT NULL,
`situacoe_id` int(11) NOT NULL DEFAULT '0',
`niveis_acesso_id` int(11) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
)', NULL);
CREATE TABLE IF NOT EXISTS `niveis_acessos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(50) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
)
Valores na tabelas.
Usuários: A senha criptografada em MD5 é 123.
INSERT INTO `usuarios` (`id`, `nome`, `email`, `senha`, `situacoe_id`, `niveis_acesso_id`, `created`, `modified`) VALUES
(1, 'Cesar Szpak', 'cesar@celke.com.br', '202cb962ac59075b964b07152d234b70', 1, 1, '2016-02-14 00:00:01', '2016-02-20 21:58:01'),
(2, 'Kelly', 'kelly@celke.com.br', '202cb962ac59075b964b07152d234b70', 1, 2, '2016-02-14 00:00:04', '2016-02-20 21:58:12'),
(3, 'Jessica', 'jessica@celke.com.br', '202cb962ac59075b964b07152d234b70', 1, 3, '2016-02-14 00:00:03', '2016-02-20 21:58:25'),
(5, 'Marcia', 'marcia@celke.com.br', '831efa4c96023f4e602ebf86ca27a1d1', 1, 1, '2016-01-01 10:10:01', '2016-02-20 21:58:57');
Dados para a tabela nível de acesso:
INSERT INTO `niveis_acessos` (`id`, `nome`, `created`, `modified`) VALUES
(1, 'Administrador', '2016-02-19 00:00:00', NULL),
(2, 'Colaborador', '2016-02-19 00:00:00', NULL),
(3, 'Cliente', '2016-02-19 00:00:00', NULL);
Agora vamos criar a área do administrador, do colaborador e do cliente. Vamos criar as páginas "administrativo.php", "colaborador.php" e "cliente.php".
Nas três página será colocado o código abaixo.
Primeiro inicializado a sessão para usar as variáveis globais.
Em seguida será impresso o valor que está na variável global "$_SESSION['usuarioNome']".
E no final será criado o link para a página sair.
<?php
session_start();
echo "Usuario: ". $_SESSION['usuarioNome'];
?>
<br>
<a href="sair.php">Sair</a>
Agora vamos implementar a página "sair.php", com o objetivo do usuário sair do sistema.
Primeiro inicializado a sessão para usar as variáveis globais.
Em seguida é apagado o conteúdo que está dentro das variáveis globais.
Depois será inserido a mensagem "Deslogado com sucesso" na variável $_SESSION['logindeslogado'], em seguida redirecionado o usuário para a página de login.
<?php
session_start();
unset(
$_SESSION['usuarioId'],
$_SESSION['usuarioNome'],
$_SESSION['usuarioNiveisAcessoId'],
$_SESSION['usuarioEmail'],
$_SESSION['usuarioSenha']
);
$_SESSION['logindeslogado'] = "Deslogado com sucesso";
//redirecionar o usuario para a página de login
header("Location: index.php");
?>
Baixar o código fonte: Clique aqui