Home
Button Mobile Webdesign em Foco
Newsletter Webdesign em Foco
Support Webdesign em Foco
Contribuition Webdesign em Foco
Doe para a Webdesign em Foco
Suporte da Webdesign em Foco
Fechar

Armazenar senhas no MySql com PHP

09/08/2018

Fala pessoal! No vídeo de hoje trataremos de gravação de senha com hash no banco de dados. Faremos também a verificação desse hash com a senha digitada pelo usuário.

Gravar senha no MySql com PHP

Vamos iniciar baixando a biblioteca zepto.js e incluindo ela e o arquivo javascript na nossa index.php

<html lang="pt-br">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>

    <body>
    <h1>Cadastro de Senha</h1>
    <form id="formCadastro" name="formCadastro" action="controllers/ControllerCadastro.php" method="post">
        Senha: <input type="password" id="senha" name="senha"><br>
        Confirmação de Senha: <input type="password" id="confsenha" name="confsenha"><br>
        <input type="submit" value="Gravar">
    </form>

    <h1>Verificação de Senha</h1>
    <form id="formVerificacao" name="formVerificacao" action="controllers/ControllerLogin.php" method="post">
        Senha: <input type="password" id="senha2" name="senha2"><br>
        <input type="submit" value="Validar">
    </form>

    <script src="lib/zepto.min.js"></script>
    <script src="lib/javascript.min.js"></script>
    </body>
</html>

Posteriormente, podemos fazer uma validação no lado cliente, atribuindo características como quantidade de caracteres, caracteres especiais e letras maiúsculas e minúsculas. Na função abaixo foi feito um debounce de 1s também para evitar requisições sucessivas.

function debounce(func, wait, immediate) {
    var timeout;
    return function() {
        var context = this, args = arguments;
        var later = function() {
            timeout = null;
            if (!immediate) func.apply(context, args);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) func.apply(context, args);
    }
}

$('#senha').on('keyup',debounce(function(){
    var senha = $('#senha').val();
    var regex = /^(?=(?:.*?[A-Z]){3})(?=(?:.*?[0-9]){2})(?=(?:.*?[!@#$%*()_+^&}{:;?.]){1})(?!.*\s)[0-9a-zA-Z!@#$%;*(){}_+^&]*$/;

    if(senha.length < 8)
    {
        alert("A senha deve conter no minímo 8 digitos!");
        senha.focus();
        return false;
    }
    else if(!regex.exec(senha))
    {
        alert("A senha deve conter no mínimo 3 caracteres em maiúsculo, 2 números e 1 caractere especial!");
        senha.focus();
        return false;
    }
    else{
        alert('A senha está certa');
    }
    return true;
},1000));

Posteriormente vamos criar nosso banco de dados e fazer a classe de conexão ao banco.

CREATE TABLE `login` (
  `id` int(11) NOT NULL,
  `password` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ALTER TABLE `login` ADD PRIMARY KEY (`id`);
ALTER TABLE `login` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;

A classe de conexão ficará assim:

<?php
abstract class ClassConexao{

    protected function conectaDB()
    {
        try{
            $con=new \PDO("mysql:host=localhost;dbname=sistema","root","");
            return $con;
        }catch (PDOException $erro){
            return $erro->getMessage();
        }
    }
}

Finalizando nosso projeto, faremos o ControllerCadastro responsável por inserir a senha com hash (password_hash) no banco de dados MySql e o ControllerLogin que fará a validação da senha com o banco (password_verify).

ControllerCadastro.php

<?php
include("../class/ClassConexao.php");

class ControllerCadastro extends ClassConexao{

    private $senha;
    private $confsenha;
    private $db;

    public function __construct()
    {
        $this->senha=filter_input(INPUT_POST,'senha',FILTER_SANITIZE_STRING);
        $this->confsenha=filter_input(INPUT_POST,'confsenha',FILTER_SANITIZE_STRING);
        $this->verificaSenha();

    }

    private function verificaSenha()
    {
        if($this->senha == $this->confsenha)
        {
            $this->cadastraSenha();
        }else{
            echo "Senha e confirmação de senha diferentes";
            return false;
        }
    }

    private function hashSenha()
    {
        $this->senha=password_hash($this->senha,PASSWORD_DEFAULT);
    }

    private function cadastraSenha()
    {
        $id=0;
        $this->hashSenha();
        $this->db=$this->conectaDB()->prepare("insert into login values (?,?)");
        $this->db->bindValue("1",$id);
        $this->db->bindValue("2",$this->senha);
        $this->db->execute();
        echo "senha inserida com sucesso";
    }
}
$new = new ControllerCadastro();

* A instância foi feita no mesmo arquivo. Essa prática não é recomendável.

ControllerLogin.php

<?php
include("../class/ClassConexao.php");

class ControllerLogin extends ClassConexao{

    private $senha2;
    private $db;

    public function __construct()
    {
        $this->senha2=filter_input(INPUT_POST,'senha2',FILTER_SANITIZE_STRING);
        $this->verificaSenhaLogin();
    }

    private function verificaSenhaLogin()
    {
        $this->db=$this->conectaDB()->prepare("select * from login where id = ?");
        $this->db->bindValue(1,"2");
        $this->db->execute();
        $fetch=$this->db->fetch(PDO::FETCH_ASSOC);

        if(password_verify($this->senha2,$fetch['password'])){
            echo "senha é igual";
        }else{
            echo "a senha não confere";
        }
    }
}
$new = new ControllerLogin();

Espero que o conteúdo acima ajude os seus estudos. Sucesso nos códigos e na vida!

Receba as aulas da Webdesign em Foco em Seu Email
Suporte Webdesign em Foco

Posts Relacionados

Integrando site aos Correios
Nessa vídeo-aula vamos aprender como integrar nosso site com os Correios realizando a busca pelo CEP e calculando prazo e preço do frete.
Saiba mais!
PHP to PDF
No tutorial de hoje ensinaremos como exportar os dados do banco MySql para o formato PDF. Para isso, utilizaremos o PHP e a classe MPDF.
Saiba mais!
PHP
PHP é uma das principais linguagens de programação utilizada nas plataformas web. Isso porque além de ser uma linguagem leve, o PHP é robusto.
Saiba mais!