Solucionado (ver solução)
Solucionado
(ver solução)
13
respostas

O login não está sendo feito corretamente

O código do meu login está sempre apresentando que o Usuário e/ou a senha é inválido, mesmo eu digitando os dados corretos.

Código do INDEX.PHP:

<?php if(isset($_GET["login"]) && $_GET["login"]==true){?>
    <p class="alert-success">Logado com sucesso.</a>
<?php }?>
<?php if(isset($_GET["login"]) && $_GET["login"]==false){?>
    <p class="alert-danger">Usuário e/ou senha inválidos.</a>
<?php }?>    


<h1>Bem Vindo!</h1>   
    <?php if(isset($_COOKIE["usuario_logado"])){ ?>
    <p class="text-success">Você está logado como: <?php$_COOKIE["usuario_logado"]?>.</p>
    <?php }?>
        <h2>Login</h2>
        <form action="login.php" method="post">
            <table class="table">
                <tr>
                    <td>E-mail:</td>
                    <td><input  class="form-control" type="email" name="email" ></td>
                </tr>
                <tr>
                    <td>Senha</td>
                    <td><input class="form-control" type="password" name="senha"></td>
                </tr>
                <tr>
                    <td><button class="btn btn-primary">Login</button></td>
                </tr>
           </table>
        </form>

Código do LOGIN.PHP

<?php include ('conecta.php');
 include ('banco-usuario.php');
 setcookie("usuario_logado", $usuario['email']);
 $usuario = buscaUsuario($conexao, $_POST['email'], $_POST['senha']);

 if ($usuario == null){
     header("Location: index.php?login=0");
 } else {

    header("Location: index.php?login=1");
}
die();

Código do BANCO-USUARIO.PHP:

<?php

function buscaUsuario($conexao, $email, $senha){
        $senhaMd5 = md5($senha);
        $query="select * from usuarios where email='{$email}', senha='{$senhaMd5}'" ;
    $resultado = mysqli_query($conexao, $query);
        $usuario = mysqli_fetch_assoc($resultado);
        return $usuario;
}
13 respostas

Deu um var_dump na variável $usuario para checar se o usuário está sendo localizado corretamente no banco de dados.

function buscaUsuario($conexao, $email, $senha){
        $senhaMd5 = md5($senha);
        $query="select * from usuarios where email='{$email}', senha='{$senhaMd5}'" ;
    $resultado = mysqli_query($conexao, $query);
        $usuario = mysqli_fetch_assoc($resultado);
    var_dump($usuario); exit; // acrescente isto
        return $usuario;
}

Quando eu tentei logar com o "var_dump" aparecece essa mensagem:

Notice: Undefined variable: usuario in C:\xampp\htdocs\loja\login.php on line 3

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\loja\banco-usuario.php on line 7 NULL

Isso seria porque o usuário não é encontrado?

O var_dump tem que ser colocado depois desta linha:

 $usuario = buscaUsuario($conexao, $_POST['email'], $_POST['senha']);

var_dump($usuario);

Ainda sim, apresenta a mensagem de Usuário e/ou senha inválidos.

E não mostra o usuário.

Em login, altere a ordem do código para:

$usuario = buscaUsuario($conexao, $_POST['email'], $_POST['senha']);

setcookie("usuario_logado", $usuario['email']);

Em banco_usuario altere a linha do select para:

$query ="select * from usuarios where email='{$email}' and senha='{$senha}'" ;

o Select esta errado, no where não existe essa virgula, quando for colocar mais de um parametro use 'and' ou 'or'

Errado: select * from usuarios where email='{$email}', senha='{$senhaMd5}'

Certo: select * from usuarios where email='{$email}' and senha='{$senhaMd5}'

Outra mudança que você deve fazer é a seguinte.

Na página index.php, altere para :

<h1>Bem Vindo!</h1>   
    <?php if(isset($_COOKIE["usuario_logado"])){ ?>
        <p class="text-success">Você está logado como: 
            <?php echo $_COOKIE["usuario_logado"] ?>.
        </p>
    <?php }?>

Agora funcionou, mas ainda sem mostrar quem fez o login.

Se a senha estiver realmente criptografada use em banco_usuario o código:

 $senhaMd5 = md5($senha);
 $query ="select * from usuarios where email='{$email}' and senha='{$senhaMd5 }'" ;

Se não estiver use:

 $query ="select * from usuarios where email='{$email}' and senha='{$senha}'" ;
solução!

Código completo login.php

include ('conecta.php');
include ('banco-usuario.php');

$usuario = buscaUsuario($conexao, $_POST['email'], $_POST['senha']);

setcookie("usuario_logado", $usuario['email']);

if ($usuario == null){
    header("Location: index.php?login=0");
} else {
    header("Location: index.php?login=1");
}

die();

Código completo banco_usuario.php

function buscaUsuario($conexao, $email, $senha){

        $senhaMd5 = md5($senha);

        $query ="select * from usuarios where email='{$email}' and senha='{$senhaMd5}'" ;

        $resultado = mysqli_query($conexao, $query);

        $usuario = mysqli_fetch_assoc($resultado);

        return $usuario;
}

Código completo index.php

<?php if(isset($_GET["login"]) && $_GET["login"]==true){?>
    <p class="alert-success">Logado com sucesso.</a>
<?php }?>
<?php if(isset($_GET["login"]) && $_GET["login"]==false){?>
    <p class="alert-danger">Usuário e/ou senha inválidos.</a>
<?php }?>    


<h1>Bem Vindo!</h1>   
    <?php if(isset($_COOKIE["usuario_logado"])){ ?>
        <p class="text-success">Você está logado como: 
            <?php echo $_COOKIE["usuario_logado"] ?>.
        </p>
    <?php }?>
        <h2>Login</h2>
        <form action="login.php" method="post">
            <table class="table">
                <tr>
                    <td>E-mail:</td>
                    <td><input  class="form-control" type="email" name="email" ></td>
                </tr>
                <tr>
                    <td>Senha</td>
                    <td><input class="form-control" type="password" name="senha"></td>
                </tr>
                <tr>
                    <td><button class="btn btn-primary">Login</button></td>
                </tr>
           </table>
        </form>

Esta faltando um echo na variavel $_COOKIE["usuario_logado"], deve ficar da seguinte maneira

<p class="text-success">Você está logado como: <?php echo $_COOKIE["usuario_logado"]; ?>.</p>

Agora funcionou corretamente.

Obrigado!!