0

我有这个代码 login.jsp 和 registration.jsp 这些 jsps 让我登录并成功注册,数据将保存在 mysql 数据库中。现在,接下来要做的是如何更改密码。大佬能帮我改一下密码吗?这是我的数据库

CREATE TABLE `members` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `first_name` varchar(45) NOT NULL,
  `last_name` varchar(45) NOT NULL,
  `email` varchar(45) NOT NULL,
  `uname` varchar(45) NOT NULL,
  `pass` varchar(45) NOT NULL,
  `regdate` date NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

登录.jsp

    <%@ page import ="java.sql.*" %>
<%
    String userid = request.getParameter("uname");    
    String pwd = request.getParameter("pass");
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/users",
            "root", "");
    Statement st = con.createStatement();
    ResultSet rs;
    rs = st.executeQuery("select * from members where uname='" + userid + "' and pass='" + pwd + "'");
    if (rs.next()) {
        session.setAttribute("userid", userid);
        //out.println("welcome " + userid);
        //out.println("<a href='logout.jsp'>Log out</a>");
        response.sendRedirect("success.jsp");
    } else {
        out.println("Invalid password <a href='index.jsp'>try again</a>");
    }
%>

注册.jsp

    <%@ page import ="java.sql.*" %>
<%
    String user = request.getParameter("uname");    
    String pwd = request.getParameter("pass");
    String fname = request.getParameter("fname");
    String lname = request.getParameter("lname");
    String email = request.getParameter("email");
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/users",
            "root", "");
    Statement st = con.createStatement();
    ResultSet rs;
    int i = st.executeUpdate("insert into members(first_name, last_name, email, uname, pass, regdate) values ('" + fname + "','" + lname + "','" + email + "','" + user + "','" + pwd + "', CURDATE())");
    if (i > 0) {
        //session.setAttribute("userid", user);
        response.sendRedirect("welcome.jsp");
       // out.print("Registration Successfull!"+"<a href='index.jsp'>Go to Login</a>");
    } else {
        response.sendRedirect("index.jsp");
    }
%>

编辑这里是我的 change.jsp 我不知道它是否正确。

更改.jsp

<%@ page import ="java.sql.*" %>
<%   
    String userid = request.getParameter("uname"); 
    String pwd = request.getParameter("pass");
    String chg = request.getParameter("change");
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/users",
            "root", "");
    Statement st = con.createStatement();
    ResultSet rs;
    st.executeUpdate("update members set chg='" + pwd + "' where uname='" + userid + "'");




%>

帮帮我谢谢!

4

3 回答 3

2

您需要一个 UPDATE sql 来更改密码。

update members set pass=? where uname=?

请注意,您的代码目前容易受到 SQL 注入的攻击。

在您的新代码中,您需要更改

st.executeUpdate("update members set chg='" + pwd + "' where uname='" + userid + "'");

st.executeUpdate("update members set pwd='" + pwd + "' where uname='" + userid + "'");
于 2014-01-31T01:50:36.087 回答
2

您现有的方法存在许多问题,但让我们从最基本的开始。存储原始用户密码是不合理的。您应该对它们进行 加盐哈希处理(如果有人读取您的数据库怎么办)?

接下来,您不应该您的演示文稿和业务逻辑混为一谈。一旦您掌握了这一点,您不应该在 JSP scriptlet 中这样做就几乎无关紧要了。这是您通常开始学习设计模式的地方 - 我强烈建议您查看Model-view-controller

来自维基百科的模型-视图-控制器 UML

最后,您应该清理您的用户输入(使用绑定变量的PreparedStatement或使用StringEscapeUtils)。否则,您很容易受到 SQL注入攻击

于 2014-01-31T02:07:54.367 回答
-1

你的sql不能

"update members set chg='" + pwd + "' where uname='" + userid + "'"

如果表中的密码字段是

`pass` varchar(45) NOT NULL,

所以你的 SQL 应该是

"update members set pass='" + pwd + "' where uname='" + userid + "'"

关于 sql 注入,我认为让您知道如果用户输入包含一个 ' 的用户 ID 或密码,这足以破坏您的查询,这一点很重要。

这就是为什么您应该更喜欢使用 PreparedStatement ( http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html ) 而不是 Statement

于 2014-01-31T04:14:33.597 回答