2013-02-22 7 views
0

어플 사용 중입니다. 사용자가 edittext 필드에 사용자 이름을 입력하는 로그인 페이지가 있습니다. 그런 다음 모든 사용자 이름이있는 테이블의 항목과 사용자 이름을 비교하는 내 databasehelper 클래스의 함수로 전달됩니다. 여기 로그인 사용자 유효성 확인

내가 내 databasehelper 클래스의 검증을 위해 쓴 기능입니다 : 내가 디버깅 할 때

public String verify_user(String is_user) 
{ 
    String verify = " "; 
    String check = " "; 
    SQLiteDatabase fg = this.getReadableDatabase(); 
    Cursor c = fg.query(Login_Table, null, null, null, null, null, null); 
    int iuser = c.getColumnIndex(colUsername); 
    for(c.moveToFirst() ; !c.isAfterLast();c.moveToNext()) 
    { 
     verify = c.getString(iuser); 
     if(is_user == verify) 
     { 
      check = "Valid User!"; 
     } 
     else 
     { 
      check = "Not Valid User!"; 
     } 
    } 
    return check; 

} 

is_user는 사용자가 사용자 이름을 입력하는 .XML 레이아웃 파일에서오고 ... 난 이상한 행동을 발견 . is_user와 verify가 동일한 값을 가지지 만 다른 점은 여전히 ​​실행됩니다. 그래서 나는 사용자가이 코드가 유효하다는 것을 알고있다. . 친절하게 안내해줍니다. 고맙습니다! 새로운 제안에서

: 자바에서

String check = " "; 
    SQLiteDatabase fg = this.getReadableDatabase(); 
    String[] args = new String[1]; 
    args[0] = is_user; 
    Cursor c = fg.query(Login_Table, null, colUsername + " = ?", args, null, null, null); 
    int iuser = c.getColumnIndex(colUsername); 
    if(is_user.equals(c.getString(iuser))) 
    { 
     check = "Valid User!"; 
    } 
    return check; 

답변

1

, 당신은 또한 모든 사용자 통해 루프 필요가 없습니다, ==

if(is_user.equals(verify)) 

equals()을하지 사용하여 문자열을 비교합니다. 대신 쿼리에 조건을 추가하십시오. 자세한 내용은 documentation을 참조하십시오.

편집 : 좋은 질문은 다음과 같습니다

String[] args = new String[1]; 
args[0] = is_user; 
Cursor c = fg.query(Login_Table, null, colUsername + " = ?", args, null, null, null); 

항상 colUsername+"="+is_user 같이 연결하여, 인수를 결코 사용하지,이 SQL injection에 취약합니다.

+0

유 여기에 커서에 대한 쿼리를 지정하시기 바랍니다 수 있습니까 ?? 사용자 이름과 비교하려고합니다! – Alfred

+0

커서 c = fg.query (Login_Table, colUsername, colUsername + "="+ is_user, null, null, null, null) ?? – Alfred

+1

예, 거의. 내 대답을 업데이트했습니다. – m0skit0

0

사용

.equals(...). 

if(is_user.equals(verify)){ 
...