2014-09-28 3 views
1

저는 Cordova를 처음 사용하고 있으며 현재 그것을 사용 중입니다. 나는 현재 로그인 스크립트를 만들고 있지만 데이터베이스에 반응하지 않는 것처럼 보이는 폼을 제출할 때 보인다.Cordova WebSQL - onSubmit

은 API의이로드
  1. , 테이블을 만들고 레코드를 삽입 :

    다음

    내가 할 노력하고있어 것입니다.
  2. 사용자가 양식을 제출하면 삽입 된 데이터가 표의 데이터와 같은지 확인하십시오.
  3. 일치하는 경우 새 페이지로 이동하십시오.

무언가를 삽입했을 때 나는 심지어 경고가 나타나지 않습니다. invalid .... 앱을 시작할 때 success! 경고가 표시됩니다.

HTML :

<form id="login" onsubmit="check_login();" class="form-signin"> 
    <input id="username" type="text" class="form-control" placeholder="Name" required autofocus> 
    <input id="password" type="password" class="form-control" placeholder="Password" required> 
    <button class="btn btn-lg btn-primary btn-block" type="submit"> 
     Sign in 
    </button> 
</form> 

JAVASCRIPT : 그것을

var db; 

function check_login() { 
    var username = $("#username").val(); 
    var password = $("#password").val(); 
    db.transaction(function(tx) { 
     tx.executeSql('SELECT * FROM LOGIN WHERE username=? AND password=?', [username, password], function(tx, results) { 
      if (results.rows) { 
       window.location = "main.html"; 
      } else { 
       alert("Invalid username or password"); 
      } 
     }, null); 
    }); 
} 

// Wait for device API libraries to load 
// 
document.addEventListener("deviceready", onDeviceReady, false); 

// device APIs are available 
// 
function onDeviceReady() { 
    db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000); 
    db.transaction(populateDB, errorCB, successCB); 
} 

// Populate the database 
// 
function populateDB(tx) { 
    tx.executeSql('DROP TABLE IF EXISTS LOGIN'); 
    tx.executeSql('CREATE TABLE IF NOT EXISTS LOGIN (id unique, username, password)'); 
    tx.executeSql('INSERT INTO LOGIN (id, username, password) VALUES (1, "Admin", "Admin")'); 
} 

// Transaction error callback 
// 
function errorCB(tx, err) { 
    alert("Error processing SQL: " + err.code); 
} 

// Transaction success callback 
// 
function successCB() { 
    alert("success!"); 
} 
+1

보낸 사람 docs : _ rowsAffected는 SQL select 문에 대해 항상 0입니다. insert 또는 update 명령문의 경우 수정 된 행 수를 반환합니다. 대신'if (results.rows)'를 사용하십시오. – Regent

+0

아하! 그것을 업데이 트합니다, 코드에서 그것을 시도했지만 내 코드는 if 진술에 도착하지 않습니다. 그래서 질문은 여전히 ​​남아 있습니다. –

+0

'check_login' 실행 중에 콘솔에서 오류가 발생합니까? 'function (tx, results)'가 실행되었는지 확인하십시오 (처음에는'alert'를 설정하거나'null'을'errorCB'로 바꾸어 검사 할 수 있습니다)? – Regent

답변

2

를 해결! 먼저 제출 버튼의 기본 이벤트를 방지해야했습니다. 두 번째 나는 results.row이 충분하다고 생각하지 않았지만 if (results.rows.length > 0)을 할 것입니다.

내가 지금 사용하는 코드는 훌륭합니다!

function check_login() { 
     event.preventDefault(); // cancel default behavior 
     var username = $("#username").val(); 
     var password = $("#password").val(); 
     db.transaction(function(tx) { 
      alert(tx + "test"); 
      tx.executeSql('SELECT * FROM LOGIN WHERE username=? AND password=?', [username, password], function(tx, results) { 
       if (results.rows.length > 0) { 
        window.location = "main.html"; 
       } else { 
        alert("Invalid username or password"); 
       } 
      }, errorCB); 
     }); 
    }