2012-05-11 2 views
0

어떤 이유로 로그인은 데이터베이스의 마지막 사용자에게만 적용됩니다. 내가 while 루프를 가지고 있지만, 나는 그것이 마지막 사용자에게가는 프로그램을 만드는 것 같아요. 나는 if 문을 사용하려고하지만 첫 번째 사용자가 데이터베이스의 마지막 사용자 만 로그인 할 수 있습니다.

if (username!=null && password!=null) { 
    pagename = "main"; 
    } else { 
    username = request.getParameter("username"); 
    password = request.getParameter("password"); 

      while(results.next()) 
      { 
      if(results.getString(2).equals(password) && results.getString(1).equals(username)) 
      { 
      pagename="main"; 
      } 
      else 
      { 
      pagename="start"; 
      } 
    } 
    } 

방법이 발생합니다. 로그인 할 수 있습니다 내가 어떻게 그것을 해결할 수 있습니까?

+0

이것은 루프 – kosa

+0

-1을 사용할 때주의해야 할 경우 중 하나입니다. 이것은 단지 디버거를 사용하여 해결할 수 있습니다 ... – home

+0

@home : 또는 논리 감 :) – BalusC

답변

4

전체 DB 테이블을 Java 메모리로 복사하고 while 루프에서 모든 레코드를 비교합니다. 레코드와 일치 할 때 while 루프를 중단하지 않으므로 나머지 레코드를 계속 반복하므로 항상 pagename이 "start"로 대체됩니다.

if (results.getString(2).equals(password) && results.getString(1).equals(username)) { 
    pagename="main"; 
    break; 
} 

또는, 더 정확하게 데이터는 당신이 필요로 그것을 선택하고 를 반환하도록 설계되었습니다 일을 할 SQL을 보자 :

preparedStatement = connection.prepareStatement("SELECT id FROM user WHERE username=? AND password=MD5(?)"); 
preparedStatement.setString(1, username); 
preparedStatement.setString(2, password); 
resultSet = preparedStatement.executeQuery(); 

if (resultSet.next()) { 
    pagename = "main"; 
} 
else { 
    pagename = "start"; 
} 

당신은 break 문을 추가해야합니다

그게 더 효율적이고 현명한거야.

+0

mysql 설명을 주셔서 감사합니다 – toky

+0

당신은 오신 것을 환영합니다. – BalusC

0

왜 이렇게 전체 테이블을 반복할까요? 1000000 개의 레코드가 있다면 어떨까요? WHERE 절에서 사용자 이름과 암호 매개 변수를 전달하여 데이터베이스를 쿼리 한 다음 단순히 반환 된 행이 있는지 여부를 확인해야합니다.

관련 문제