2015-11-12 4 views
-1

Итак, у меня есть вопрос о Javascript и HTML. Ниже у меня есть мой код, и я не уверен, почему, но всякий раз, когда я пытаюсь запустить его (то есть: нажмите «Отправить»), мой сайт зависает. Я установил его прямо сейчас, чтобы проверить, является ли имя пользователя/пароль EXISTS, но оно еще не должно быть комбинацией из двух. Кто-нибудь может мне помочь?Javascript loops разбивают мой сайт

<!DOCTYPE html> 
<html> 
    <title> Welcome to my website!</title> 
    <body> 
     <form action="action_page.php" method = "post"> 
      Username: <input type="text" name="user"> 
      Password: <input type="password" name="pass"> 
      <input type="submit" value="Submit" onclick="myLogin()">  
     </form> 
    <script type="text/javascript"> 
    function myLogin(){ 
      var usernames = ["rdoucett", "hovland"]; 
      var passwords = ["Rd200161", "hovland1"]; 
      usernames[5] = "stop"; 
      passwords[5] = "stop"; 
      var a = false; 
      var b = false; 
     var i = 1; 
    while(a===false) { 
     if(usernames[i] != form.user.value) { 
      i++; 
     }else if(usernames[i] == form.user.value){ 
      a=true; 
     }else if(usernames[i] == "stop"){ 
      alert("Incorrect username or password!"); 
      a=true; 
     }; 
    }; 
    i = 1; 
    while(b===false) { 
     if(passwords[i] != form.pass.value) { 
      i++; 
     }else if(passwords[i] == form.pass.value){ 
      b=true; 
     }else if(passwords[i] == "stop"){ 
      alert("Incorrect username or password!"); 
      b=true; 
     }; 
    }; 
    if(b&&a===true){ 
    alert("Welcome " + document.getElementsByName("user") + "!"); 
    }else{ 
    alert("I do not recognize you " + document.getElementsByName("pass") + "!"); 
    }; 
}; 
    </script> 
</body> 

+1

заменить if (b && a == true) с if (b == true && a == true) – cssGEEK

+0

Вы пытались вставить точку прерывания и выполнить код? – bhspencer

+3

Это кажется ужасно длинным и неэффективным способом делать что-то. См. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf – j08691

ответ

5

Не используйте цикл в то время как все, просто выйти из функции myLogin, если это было неверное имя пользователя или пароль.

Помните, что то, что вы написали здесь, совершенно небезопасно. Любой, кто посещает ваш сайт с помощью даже базовых технических знаний, может видеть ваш полный список имен пользователей и паролей.

2

Я изменил ваш код много, но я думаю, что это то, что вы хотели. В вашем сценарии рядом с несколькими ошибками, любое действительное имя пользователя и любой действительный пароль будут совпадать. (то есть user = "rdoucett" и psw= "hovland1").

function myLogin(){ 
    var usernames = ["rdoucett", "hovland"]; 
    var passwords = ["Rd200161", "hovland1"]; 
    var username; 
    for (var i = 0; i < usernames.length; i++) { 
     if (usernames[i] == form.user.value) { 
      username = usernames[i]; 
      break; 
     } 
    } 
    if (!username || passwords[i] != form.pass.value) { 
     alert("Incorrect username or password!"); 
    } 
    else { 
     alert("Welcome " + document.getElementsByName("user") + "!"); 
    } 
}; 

С точки зрения безопасности, как уже было сказано, это очень небезопасно. Вы должны думать HTML и JS как информация, которую может видеть любой клиент. Таким образом, такая функциональность - это то, что вы должно сделать стороне сервера.

Также обратите внимание, что предупреждения не избегают формы отправки. Если вы хотите этого избежать, добавьте return false;.

Смежные вопросы