Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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