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

Identificando erro no Login ou Senha

Gostaria que meu código identificasse se o problema está no login inválido ou na senha inválida ou ambos inválidos. Fiz dessa forma mas ele sempre me devolve a mensagem de erro de login inválido, mesmo colocando o login correto.

<meta charset="UTF-8">

<script>

    function pulaLinha() {

        document.write("<br><br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    var loginCadastrado = "alura";
    var senhaCadastrada = "alura321";

    var maximoTentativas = 3;
    var tentativaAtual = 1;


    while (tentativaAtual <= maximoTentativas) {

        var loginInformado = prompt("Informe seu login.");
        var senhaInformada = prompt("Informe sua senha.");

        if (loginCadastrado == loginInformado && senhaCadastrada == senhaInformada) {
        alert("Bem vindo ao sistema, " + loginInformado)
        tentativaAtual = maximoTentativas;

        } else {

            if (tentativaAtual == 3) {
                alert("Número permitido de tentativas ultrapassado. Contate o administrador!");

            } if (senhaCadastrada != senhaInformada) {
            alert("Senha inválida. Tente novamente.")
            tentativaAtual = tentativaAtual + 1;

            } if (loginCadastrado != loginInformado); {

            alert("Login inválido. Tente novamente!");
            tentativaAtual = tentativaAtual + 1;

            } if (loginCadastrado != loginInformado && senhaCadastrada != senhaInformada) {
            alert("Login e senha inválidos. Tente novamente.")
            tentativaAtual = tentativaAtual + 1;

    }

</script>

Alguma ideia de como eu poderia corrigir meu "erro"?

3 respostas
solução!

Boa noite, Gessica. O seu código nem rodou no meu browser, então me permiti reescrevê-lo da seguinte forma, imaginando que o problema estaria na indentação dos das condicionais, nos fechamentos dos blocos pelos "}" e no ";" após a instrução, para o computador entender que ali é o fim dela. Aqui funcionou, veja:

<meta charset="UTF-8">

<script>

    var loginCadastrado = "alura";
    var senhaCadastrada = "alura321";

    var maximoTentativas = 3;
    var tentativaAtual = 1;

    while(tentativaAtual <= maximoTentativas) {

        var loginInformado = prompt("Informe seu login");
        var senhaInformada = prompt("Informe sua senha");

        if( loginCadastrado == loginInformado && senhaCadastrada == senhaInformada ) {

            alert("Bem-vindo ao sistema, " + loginInformado);

            tentativaAtual = maximoTentativas; // acertou, então faço o gasto de todas as tentativas para sair do loop. Lá embaixo vai incrementar + 1! 

        } else {

            if (tentativaAtual == 3) {
                alert("Número permitido de tentativas ultrapassado!");
            } else {
                if (senhaCadastrada != senhaInformada){
                    alert("Senha inválida. Tente novamente");
                    tentativaAtual = tentativaAtual + 1;
                }
                if (loginInformado != loginCadastrado){
                    alert("Login inválido. Tente novamente.");
                    tentativaAtual = tentativaAtual + 1;
                }
                if (loginCadastrado != loginInformado && senhaCadastrada != senhaInformada){
                    alert("Login e senha inválidos. Tente novamente");
                    tentativaAtual = tentativaAtual + 1;
                }
            }
        }

       // vai para a próxima tentativa
        tentativaAtual = tentativaAtual +1  
    }

</script>

Puxa Pablo, valeu! Agora ele está funcionando da forma que eu queria mesmo. Realmente os ";" acabam saindo de forma automática e percebi que acabam prejudicando o código de rodar corretamente. Também me perdi nos "{}" pq foram muitos "if's" e "elses" hahaha. Se posso abusar da sua boa vontade, pq no final do código tem mais uma vez o tentativaAtual = tentativaAtual + 1?

 }
            }
        }

       // vai para a próxima tentativa
        tentativaAtual = tentativaAtual +1  
    }

</script>

Fico na dúvida pois em cada linha de "if", já coloquei a condição de tentativaAtual = tentativaAtual + 1, pra garantir que ela seja contabilizada até alcançar as 3 tentativas. E na linha de login e senha corretos, tem o tentativaAtual = maximoTentativas.

Mais uma vez muito obrigada!

Oi Pablo! Acabei conseguindo entender. Inclusive, fica melhor inserir somente no final do while, evitando assim uma linha em cada condição do "if". Também retirei a opção login e senha incorretos, pq ele já traz o aviso de forma individual. O código final (com sua super ajuda e correções) ficou assim:

<meta charset="UTF-8">

<script>

    var loginCadastrado = "alura";
    var senhaCadastrada = "alura321";

    var maximoTentativas = 3;
    var tentativaAtual = 1;

    while(tentativaAtual <= maximoTentativas) {

        var loginInformado = prompt("Informe seu login");
        var senhaInformada = prompt("Informe sua senha");

        if( loginCadastrado == loginInformado && senhaCadastrada == senhaInformada ) {

            alert("Bem-vindo ao sistema, " + loginInformado);

            tentativaAtual = maximoTentativas; // acertou, então faço o gasto de todas as tentativas para sair do loop. Lá embaixo vai incrementar + 1! 

        } else {

            if (tentativaAtual == 3) {
                alert("Número permitido de tentativas ultrapassado!");
            } else {
                if (loginInformado != loginCadastrado){
                    alert("Login inválido. Tente novamente.");
                    // tentativaAtual = tentativaAtual + 1; retirei essa contagem da tentativa, pois lá no final ele já está contabilizando como +1                
                }
                if (senhaCadastrada != senhaInformada){
                    alert("Senha inválida. Tente novamente");
                    // tentativaAtual = tentativaAtual + 1; retirei essa contagem da tentativa, pois lá no final ele já está contabilizando como +1


                }
                // if (loginCadastrado != loginInformado && senhaCadastrada != senhaInformada){ retirei esse if inteiro, pq ele já estava retornando a mensagem de login inválido e senha inválida de forma individual.
                    // alert("Login e senha inválidos. Tente novamente");
                    // tentativaAtual = tentativaAtual + 1;
            }
        }

       // vai para a próxima tentativa
        tentativaAtual++
    }

</script>