2013-09-22 89 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块并打印未更新的记录。

+0

你能展示你得到的堆栈跟踪吗? –

回答

0

您的问题是在下面的代码:

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查询字符串的占位符的顺序是:

  • 登录密码
  • ConfirmPassword
  • 登录ID

但参数的顺序是

  • 登录ID
  • 登录密码
  • ConfirmPassword

所以,你想用的值ConfirmPassword这是不太可能存在LoginId更新的记录。

N.B.你为什么要存储确认密码?对于servlet来说,检查LoginPassword是否等于ConfirmPassword并且如果它不是更新数据库,会显示错误,这对于更有意义吗?

+0

谢谢。你是对的,但我也有一些问题(显示错误页面)。我正在使用JavaScript,但它不工作。请看这个链接。 http://stackoverflow.com/questions/18949251/javascript-validation-form-is-not-working – sapan