2012-08-03 1 views
0

안녕하세요.이 모든 것이 스택 오버플로에 대한 첫 번째 질문입니다. webql과 javascript를 사용하여 phonegap으로 앱을 개발 중입니다. 내 앱에는 사용자 이름과 비밀번호의 두 가지 입력이 필요한 로그인 양식이 있습니다. 사용자가이 값을 채우고 로그인을 클릭하면이 값은 여러 행이있는 데이터베이스 테이블에서 확인됩니다. 값을 확인하기 위해 나는이javascript 변수에 where 절 사용

var email=document.getElementById("uname").value; 
tx.executeSql('SELECT * FROM USERINF Where Email=email', [], MatchPass, errorCB1); 

을 질의 - 사용하고 그러나 쿼리는 자바 스크립트 변수를 where 절과 함께 작동하지 않습니다. 나는 또한

where [email protected] 
where Email="+email+" 

그리고 더 많은 같은 많은 syntexes을 시도했지만 한 그들은 모든 일을하지.

where 절과 함께 javascript 변수를 사용할 수 있습니까 ?? 예인 경우 방법을 알려주십시오. 경우 작업을 수행하는 다른 방법을 제안하시기 바랍니다. 사전에 감사합니다.

이 당신 연결하는 + 연산자를 사용하는 데 필요한 쿼리의 JS 변수 이메일의 값을 얻으려면

// JavaScript Document 
var db=window.openDatabase("CakeViewer", "1.0", "Cake Viewer", 2*1024*1024); 

function login() 
{ 

db.transaction(matchcred) 

function matchcred(tx) 
{ 
    var eml=document.getElementById("uname").value; 
    tx.executeSql('SELECT * FROM USERINF Where Email=eml', [], MatchPass, errorCB1); 
//problem is in above line-- the query is not executed with variable where clause. But it works fine if I use where Email="[email protected]" 

} 


function MatchPass(tx, results) 
{ 
    var orgnalPass=results.rows.item(0).Password; 
    var userinputedPass=document.getElementById("pass"); 

    if(orgnalPass==userinputedPass.value) 
    { 
     window.location.href='HomePage.html'; 
    } 
    else 
    { 
     errorCB(); 
    } 
} 

function errorCB(tx,err) 
{ 
    alert("User Name or Password is not valid !"); 
    document.getElementById("uname").value=""; 
    document.getElementById("pass").value=""; 
} 

function errorCB1() 
{ 
    alert("Query failed"); 
} 

function errorCB2(tx,err) 
{ 
    alert("errorCB2"+err); 
} 
} 

답변

-1

내 전체 JavascriptCode입니다. 또한 문자열 가장 쉬운 방법은 변수를 지정할와 Questionmark (?)를 사용하는 것입니다

tx.executeSql('SELECT Data from Table Where something = "'+ email+ '"', [], MatchPass, errorCB1); 
+0

안녕하세요 덕분에 mithunsatheesh, 덕분에 많이! –

+1

그래,하지만 전자 메일이 사용자로부터 온다고 가정 할 때 전자 메일 값의 잠재적 인용 부호에서 벗어나지 않으면 SQL 주입을 얻을 수있는 좋은 방법입니다. 또한 SQL 구문은 문자열을 큰 따옴표로 묶습니다. 나 한테 잘못한 것 같아. – ErikE

+0

+1 그런 연습에 의해 도입 된 보안 문제에 대한 ErikE의 의견. 제발 제발 이런 식으로 원시 SQL 문을 사용하여 옹호 (또는 제안 대답을 수락하지 마십시오). – danielpops

0
tx.executeSql("SELECT * FROM USERINF Where Email='"+email+"'" , 
+0

감사합니다. ''+ 이메일 + ''이 효과가 없으며 대신 ''+ 이메일 + ''이 효과가 있습니다. –

10

을 할 수있다 값 따옴표로 값을 바꿈. 예를 들어

:

tx.executeSql('SELECT Data from Table Where something = ?', [email], MatchPass, errorCB1); 

의은 좌측에서 우측으로 파싱 왼쪽부터 []의 변수를 일치 얻는다.

또 다른 예 : 당신의 대답 SOWA에 대한

tx.executeSql('SELECT Data from Table Where email = ? AND username=?', [email, username], MatchPass, errorCB1); 
+0

이 대답은 SQL 삽입 방지에 도움이되므로이 대체 대답 –

+0

+1에 @ Jens 감사합니다. – krishgopinath