2013-09-22 2 views
0

html로 암호를 재설정하려고합니다. 리셋 단추를 제출하면 ResetPasswordServlet으로 이동합니다. 그런 다음 컨트롤러는 Servlet에서 CustomerDAO로 이동합니다. 데이터베이스를 업데이트해야합니다. 데이터베이스 연결도 만들었습니다. 나는 그것을 테스트했지만 작동하지 않습니다 (데이터베이스에서 업데이트되지 않습니다.) 내 코드에 문제가 있음을 알고 있지만 알아낼 수 없습니다.암호를 잊어 버린 경우 암호를 다시 설정하십시오.

여기 내 코드입니다. 아무도 내가 잘못하고있는 부분을 파악하는 데 도움을 줄 수 있습니까? 고맙습니다.

ResetPasswordServlet

package com.dao; 

/** 
* @see HttpServlet#HttpServlet() 
*/ 
public ResetPasswordServlet() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 

    PrintWriter out = response.getWriter(); 

    out.println("<html><body>"); 
    out.println("<center><h2>Reset your password</h2></center>"); 
    out.println("<form action=ResetPassword method=post>"); 
    out.println("Enter your username <input type=text name=LoginId><br> "); 
    out.println("Enter your new Password<input type=password name=password><br>"); 
    out.println("Confirm your new Password <input type=password name=confirm><br>"); 
    out.println("<input type=submit value=RESET>"); 
    out.println("</form>"); 
    out.println("</body></html>"); 

} 

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    CustomerDAO customerDAO = new CustomerDAO(); 
    String loginId = request.getParameter("LoginId"); 
    String loginPassword = request.getParameter("password"); 
    String confirmPassword = request.getParameter("confirm"); 

    Login login = customerDAO.resetPassword(loginId, loginPassword, confirmPassword); 
} 

}

CustomerDAO

public Login resetPassword(String loginId, String loginPassword, String confirmPassword) { 
    Login login = null; 
    try { 
     BaseDAO baseDAO = new BaseDAO(); 
     Connection c =baseDAO.getConnection(); 
     String query = "update test.Customer set LoginPassword=?, ConfirmPassword=? where LoginId=?" ; 
     PreparedStatement ps = c.prepareStatement(query); 
     ps.setString(1, loginId); 
     ps.setString(2, loginPassword); 
     ps.setString(3, confirmPassword); 
     System.out.println(loginId); 
     System.out.println(loginPassword); 
     System.out.println(confirmPassword); 

     int i = ps.executeUpdate(); 
     if(i==1) { 
      System.out.println("record updated successfully"); 
     }else { 
      System.out.println("record not updated."); 
     } 
     c.close(); 
    }catch(Exception e) { 
     e.printStackTrace(); 
    } 
    return login; 
} 

나는 코드의 일부를 변경했다.

버튼을 제출할 때 오류가 표시되지 않으며 데이터베이스에도 업데이트되지 않습니다. CustomerDAO에서 else 블록이 실행되고 업데이트되지 않은 레코드가 인쇄됩니다.

String query = "update test.Customer set LoginPassword=?, ConfirmPassword=? where LoginId=?" ; 
    PreparedStatement ps = c.prepareStatement(query); 
    ps.setString(1, loginId); 
    ps.setString(2, loginPassword); 
    ps.setString(3, confirmPassword); 

하여 SQL 쿼리 문자열에 자리 표시의 순서는 다음과 같습니다 :

+0

스택 추적을 표시 할 수 있습니까? –

답변

0

귀하의 문제는 다음과 같은 코드에

  • LoginPassword
  • ConfirmPassword
을은 loginid

그러나 매개 변수의 순서는

  • 그래서 당신이 존재할 가능성은 매우 낮 값 ConfirmPasswordLoginId으로 레코드를 업데이트하려고

ConfirmPassword LoginPassword

  • 을은 loginid입니다.

    N.B. 왜 확인 암호를 저장하고 있습니까? 서블릿이 LoginPasswordConfirmPassword과 같고 DB를 업데이트하는 것이 아니라면 오류가 있는지 확인하는 것이 더 바람직하지 않습니까?

  • +0

    고맙습니다. 그리고 당신 말이 맞아요하지만 나는 또한 그것과 함께 몇 가지 문제가 (오류 페이지를 보여주는). 자바 스크립트를 사용하고 있지만 작동하지 않습니다. 이 링크를 참조하십시오. http://stackoverflow.com/questions/18949251/javascript-validation-form-is-not-working – sapan

    관련 문제