Sistema de Login com PHP e Mysql

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

Esqueleto do Projeto:
├── 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

<?php session_start();if (isset($_SESSION['id'])) {header("location:./");die(); };?>
<!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

<?php session_start();if (isset($_SESSION['id'])) {header("location:./");die(); };?>
<!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

<?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

<?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

<?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

CREATE TABLE `user`(
    `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. 

Comentários:

Deixe seu Comentario:
Confira outros conteúdos:
Comandos SQL no PostgreSQL

Comandos SQL no PostgreSQL

Comandos Essenciais no SQL

Comandos Essenciais no SQL

Como se conectar ao banco de dados com PHP e PDO

Como se conectar ao banco de dados com PHP e PDO

Construindo um Blog com Django

Construindo um Blog com Django

Utilizando variáveis CSS

Utilizando variáveis CSS