2
respostas

Dúvida na exibição do login do sucesso ou não.

Boa tarde pessoal, O professor Guilherme durante a aula para que seja validado com sucesso o login e senha, que seja alterado nessa primeira parte do código de FALSE para 0 e de TRUE para 1, porém no meu código, eu apenas coloquei aspas simples ( no segundo bloco de código mais abaixo ) no TRUE e no FALSE de ambos os IF's, por que funcionou?

$usuario = buscaUsuario($conexao, $_POST['email'], $_POST['senha']);
if($usuario == NULL) {
    header("location: index.php?login=false");
}
else {   
    header("location: index.php?login=true");
}
die();


<?php if (isset($_GET['login']) && $_GET['login']=='true') { ?>
    <p class='alert-success'>Logado com Sucesso!</p>
<?php } ?>
<?php if (isset($_GET['login']) && $_GET['login']=='false') { ?>
    <p class='alert-danger'>Usuário ou Senha inválido!</p>
<?php } ?>
2 respostas

Oi Caio, tudo bem? O PHP em comparações booleanas usando dois iguais == tenta converter os valores. Considerando isso, qualquer valor diferente de NULL, FALSE, 0, "" (String varia) ou "0" (String com zero) será tratado como TRUE.

Sendo assim o resultado da comparação seguinte é verdadeiro: "1" == true ou "qualquertexto" == true.

Para evitar esse tipo de comportamento, você pode usar o comparador de idêntico, com três iguais: === onde além do valor, o PHP comparará o tipo do valor. Isso faz com que as comparações anteriores resultem em FALSE.

Experimente testar as duas formas... É um aprendizado.

Espero ter ajudado, bons estudos...

Olá Caio. Pelo que entendi, o seu código não irá converter o valor recebido via GET para booleano, pois não houve essa necessidade. Você colocou o true e o false entre aspas simples, portanto tornando-os strings, e não booleanos. O valor que vem do GET é uma string, e ao comparar com a outra string, ele não precisou converter. Caso você tire as aspas simples, o PHP tentará converter a string do GET para boolean, como o Wanderson Macêdo explicou perfeitamente.

Espero ter ajudado e bons estudos!