2014-04-03 40 views
0

嗨这种形式是为了检查数据库的用户名和密码,并验证登录。 此登录页面正常工作,但卡住了一个小错误。在login.js的函数ListDBValues()中,Loop检查数据库以匹配用户名和密码。在成功匹配时,它会提醒“登录成功”,但随后出现“登录失败”,我给了休息但知道使用。我错在哪里?为什么在第一个标准匹配时执行else条件?登录验证循环执行其他条件'登录失败'后'登录成功'

的Index.html

<html> 
<head> 
    <title>PhoneGap</title> 
    <link rel = "stylesheet" href="css/theme.min.css"/> 
    <link rel="stylesheet" href="css/jquery.mobile-1.2.1.css"/> 
    <script type="text/javascript" charset="utf-8" src="js/jquery-1.6.1.min.js"></script> 
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script> 
    <script type="text/javascript" charset="utf-8" src="js/jquery.mobile-1.2.1.min.js"></script> 
    <script type="text/javascript" src="login.js"></script> 
</head> 

<body onLoad="onBodyLoad()"> 

    <div data-role="page" id="page1" data-theme="b"> 
     <div class="header" id="header" data-role="header"> 

      <h3>Registration</h3> 
     </div> 
     <div data-role="content"> 
      <div class="username" data-role="fieldcontain"> 
       <label for="username"> Username </label> 
       <input name="username" id="username" placeholder="Enter Username" value="" type="text"> 
      </div> 
      <div class="password" data-role="fieldcontain"> 
       <label for="password">Password</label> 
       <input name="password" id="password" placeholder="Enter Password" value="" type="password"> 
      </div> 
      <input id="login" value="login" type="button" onClick="validationcheck()"> 
      <input id="register" value="register" type="button" onClick="register()"> 
     </div> 
    </div> 
</div> 
</body> 
</html> 

Login.js

var db; 
var shortName = 'WebSqlDB'; 
var version = '1.0'; 
var displayName = 'WebSqlDB'; 
var maxSize = 65535; 

function successCallBack() { 
    alert("DEBUGGING: success"); 

} 

function onBodyLoad(){ 
    alert("DEBUGGING: we are in the onBodyLoad() function"); 
    if (!window.openDatabase) { 
     alert('Databases are not supported in this browser.'); 
     return; 
    } 
    db = openDatabase(shortName, version, displayName,maxSize); 
    db.transaction(function(tx){ 
     tx.executeSql('CREATE TABLE IF NOT EXISTS Contacts(UserId INTEGER NOT NULL PRIMARY KEY, fname TEXT NOT NULL, lname TEXT NOT NULL,age INTEGER NOT NULL,username TEXT NOT NULL,password TEXT NOT NULL)',[],nullHandler,errorHandler); 
    },errorHandler,successCallBack); 
} 

/*The problem is in this function*/ 
function ListDBValues() { 
    if (!window.openDatabase) { 
     alert('Databases are not supported in this browser.'); 
     return; 
    }  
    db.transaction(function(transaction) { 
     transaction.executeSql('SELECT * FROM Contacts;', [], 
      function(transaction, result) { 
       for (var i = 0; i < result.rows.length; i++) { 
        var row = result.rows.item(i); 
        var username1 = $('#username').val(); 

        var password1 = $('#password').val(); 

        var uname=row.username; 
        var pasw=row.password; 
        if(username1==uname && password1==pasw){ 
         alert("Login Success"); 
         login(); 
         break; 


        } 

        else 

        { 
         var status=1; 
        } 
       } 
       if(status==1) 
       { 
        alert("login failed"); 
       } 
      },errorHandler); 
    },errorHandler,nullHandler); 

    return; 
} 

function errorHandler(transaction, error) { 
    alert('Error: ' + error.message + ' code: ' + error.code); 

} 

function nullHandler(){}; 

function login(){ 
    window.location="file:///android_asset/www/front.html"; 
}; 
function validationcheck(){ 
    if($("#username").val() == ""){ 
     alert("please enter username"); 
     $("#username").focus(); 
    } 
    else if ($("#password").val() == "") { 
     alert("Please enter password"); 
     $("#password").focus(); 
    } 
    else 
    { 
     success(); 
    } 
} 
function success(){ 
    ListDBValues(); 
} 

function register(){ 
    window.location="file:///android_asset/www/register.html"; 
} 

回答

0

让我们想象一下,从表中第一行不符合要求的用户名和密码。与“if-else”中的“else”相比,状态变为等于1.因此,是否会找到正确的行,状态已经是1,并且将显示警报。最短的修复将在“if”子句中添加

status = 0; 

。例如:

login(); 
status = 0; 
break; 

不直接与问题的建议连接:这不是好来获取所有表来检查用户密码。在循环中访问相同的$(“#id”)也不好。我修改你的功能,以显示我的意思:

function ListDBValues() { 
    if (!window.openDatabase) { 
     alert('Databases are not supported in this browser.'); 
     return; 
    }  
    db.transaction(function(transaction) { 
     var username1 = $('#username').val(); 
     var password1 = $('#password').val(); 
     transaction.executeSql('SELECT * FROM Contacts WHERE username = ? AND password = ?', [username1, password1], function(transaction, result) { 
      if (result.rows.length > 0) { 
       alert("Login Success"); 
       login(); 
      } else { 
       alert("login failed"); 
      } 
     }, errorHandler); 
    }, errorHandler, nullHandler); 
} 
+0

嗨,感谢一吨。它的工作和非常感谢这个想法,欣赏很多。我明白了一切,但这个功能(交易,结果)是什么呢? –

+0

@ user2861229我们选择有合适用户名和密码的行。如果至少有一个这样的行(实际上,由于独特的对用户密码,通常只有一行,但由于某种原因,可能有多行具有相同的用户密码),因此登录是成功的。如果没有这些用户名和密码的行,那么登录失败 – Regent

+0

谢谢..非常多 –