Fala Pessoal
Hoje vamos Aprender a como Criar Sistema de Login com PHP e Mysql.
Requisitos:
Vamos Precisar de um servidor de banco de dados e o PHP instalado na maquina.
Como servidor de Banco de Dados e o PHP vamos utilizar o Xampp que é um Pacote completo.
Link do Projeto Completo no Github:
https://github.com/paulorafaeljobs/Sistema-de-Login-PHP-Mysql
├── App/
│ ├── Autenticacao.php
│ ├── ControllerApp.php
│ └── Conexao.php
│
├── cadastrar.php
├── login.php
└── index.php
Criando Pagina de cadastro
Agora vamos criar o nossa Pagina de Cadastro. onde tera um Campo de Email,Nome e Senha.
cadastrar.php
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cadastrar</title>
<style>
*{font-family: 'Montserrat', sans-serif;padding:0;margin:0;}
.conteiner{width: 300px;margin: auto;}
.pass {margin-top: 10px;}
.conteiner > form > div > input {width: 92%;padding: 10px;border: none;outline: 0;}
.btn {width:300px;padding: 10px;margin-top: 11px;border: none;background-color:#41cac0;}
h1{margin-bottom: 10px;}
</style>
</head>
<body>
<div class="conteiner" style="margin-top:200px;">
<h1>Cadastrar</h1>
<form action="App/ControllerApp.php" method="post">
<div class="user">
<input type="email" id="email" name="email" placeholder="Email">
</div>
<div class="pass">
<input type="text" id="nome" name="nome" placeholder="Nome">
</div>
<div class="pass">
<input type="password" id="senha" name="senha" placeholder="Senha">
</div>
<div>
<button class="btn" name="cadastrar" type="submit">Cadastrar</button>
</div>
<div style="text-align:center;margin-top:10px;">
<a style="text-decoration:none;color:black;" href="login.php">Login</a>
</div>
</form>
</div>
</body>
</html>
Criando a Pagina de login
Com a página de cadastro criada, vamos agora a Pagina de login, que fará o envio das informações para a página ControllerApp.php que verificará a existência desse usuário.
index.php
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
<style>
*{font-family: 'Montserrat', sans-serif;padding:0;margin:0;}
.conteiner{width: 300px;margin: auto;}
.pass {margin-top: 10px;}
.conteiner > form > div > input {width: 92%;padding: 10px;border: none;outline: 0;}
.btn {width:300px;padding: 10px;margin-top: 11px;border: none;background-color:#41cac0;}
h1{margin-bottom: 10px;}
</style>
</head>
<body>
<div class="conteiner" style="margin-top:200px;">
<h1>Cadastrar</h1>
<form action="App/ControllerApp.php" method="post">
<div class="user">
<input type="email" id="email" name="email" placeholder="Email">
</div>
<div class="pass">
<input type="password" id="senha" name="senha" placeholder="Senha">
</div>
<div>
<button class="btn" name="login" type="submit">Entrar</button>
</div>
<div style="text-align:center;margin-top:10px;">
<a style="text-decoration:none;color:black;" href="cadastrar.php">Cadastrar</a>
</div>
</form>
</div>
</body>
</html>
Vamos criar um arquivo que vai fazer a Validação do Usuario,Tanto no Cadastro como no Login
Autenticacao.php
require_once 'Conexao.php';
function Login($email,$senha){
$sql = 'SELECT * FROM user where email_user = ?';
$enviar = Conexao::getConexao()->prepare($sql);
$enviar->bindValue(1,$email);
$enviar->execute();
if($enviar->rowCount() > 0){
$result = $enviar->fetchAll(\PDO::FETCH_ASSOC);
foreach($result as $value){
$idDB = $value['id'];
$nomeDB = $value['name_user'];
$emailDB = $value['email_user'];
$passBD = $value['pass_user'];
}
if(password_verify($senha,$passBD)){
SessaoEntrar($idDB,$nomeDB,$emailDB);
}
}
};
function Cadastrar($nome,$email,$senha){
$sql = 'SELECT * FROM user where email_user = ?';
$enviar = Conexao::getConexao()->prepare($sql);
$enviar->bindValue(1,$email);
$enviar->execute();
if($enviar->rowCount() > 0){
}else{
$pass = password_hash($senha, PASSWORD_DEFAULT);
$sql = 'INSERT INTO user(name_user,email_user,pass_user) VALUES (?,?,?);';
$enviar = Conexao::getConexao()->prepare($sql);
$enviar->bindValue(1, $nome);
$enviar->bindValue(2, $email);
$enviar->bindValue(3, $pass);
if($enviar->execute()){
Login($email,$senha);
}
}
};
function SessaoEntrar($id,$nome,$email){
session_start();
$_SESSION['id'] = $id;
$_SESSION['nome'] = $nome;
$_SESSION['email'] = $email;
header("location: .././");
};
Arquivo de Conexão com o Banco de Dados
Neste arquivo sera feito a conexão com o Banco de Dados e configuração das Credenciais. Ultilizando a Biblioteca PDO que é nativa do PHP
Conexao.php
class Conexao{
private static $instance;
public static function getConexao(){
if(!isset(self::$instance)){
self ::$instance = new \PDO ('mysql:host=localhost;dbname=loginphp','root','');
}
return self::$instance;
}
}
Este é o arquivo que vai receber as Requisições POST e enviar para o arquivo de Autenticacao para fazer a Validação do Usuario
ControllerApp.php
require_once 'Autenticacao.php';
if(isset($_POST['login'])){
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
$senha = filter_var($_POST['senha'], FILTER_SANITIZE_ADD_SLASHES);
Login($email,$senha);
}
if(isset($_POST['cadastrar'])){
$nome = filter_var($_POST['nome'], FILTER_SANITIZE_ADD_SLASHES);
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
$senha = filter_var($_POST['senha'], FILTER_SANITIZE_ADD_SLASHES);
Cadastrar($nome,$email,$senha);
}if(isset($_GET['sair'])){
session_start();
session_destroy();
session_write_close();
session_regenerate_id(true);
unset($_SESSION['id']);
unset($_SESSION['nome']);
unset($_SESSION['email']);
header("location: ./../");
}else{
header("location: ./../");
};
Este é o código sql que cria a Tabela User com as colunas Name,Email,Senha
`id`INT NOT NULL AUTO_INCREMENT,
`name_user`VARCHAR(50) NOT NULL,
`email_user`VARCHAR(50) NOT NULL,
`pass_user`VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE (`email_user`)
) ENGINE = InnoDB;
Pronto, agora você já tem um simples sistema de cadastro e login para usar no seu projeto, lembrando que isso é apenas o básico e podem ser utilizadas várias outras técnicas para validação de login e segurança.