Java 如何在我的登录和注册页面中更改密码?

Java 如何在我的登录和注册页面中更改密码?,java,mysql,jsp,tomcat,jdb,Java,Mysql,Jsp,Tomcat,Jdb,我有以下代码login.jsp和registration.jsp 这些JSP让我成功登录并注册,数据将保存在mysql数据库中。 现在,接下来要做的是如何更改密码。 你们能帮我修改密码吗? 这是我的数据库 CREATE TABLE `members` ( `id` int(10) unsigned NOT NULL auto_increment, `first_name` varchar(45) NOT NULL, `last_name` varchar(45) NOT NULL,

我有以下代码login.jsp和registration.jsp 这些JSP让我成功登录并注册,数据将保存在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;
login.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>");
    }
%>

registration.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");
    }
%>

0) {
//session.setAttribute(“userid”,用户);
sendRedirect(“welcome.jsp”);
//打印(“注册成功!”+);
}否则{
sendRedirect(“index.jsp”);
}
%>
编辑这里是我的change.jsp我不知道它是否正确

change.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 + "'");




%>


帮帮我,谢谢

您需要更新sql来更改密码

update members set pass=? where uname=?
请注意,您的代码当前易受SQL注入攻击

在新代码中,您需要进行更改

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


您需要更新sql来更改密码

update members set pass=? where uname=?
请注意,您的代码当前易受SQL注入攻击

在新代码中,您需要进行更改

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


您需要更新sql来更改密码

update members set pass=? where uname=?
请注意,您的代码当前易受SQL注入攻击

在新代码中,您需要进行更改

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


您需要更新sql来更改密码

update members set pass=? where uname=?
请注意,您的代码当前易受SQL注入攻击

在新代码中,您需要进行更改

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


您现有的方法存在许多问题,但让我们从最基本的问题开始。 存储原始用户密码是不合理的。你应该和他们(如果有人读了你的数据库怎么办)

接下来,您应该而不是混合您的演示和业务逻辑。一旦掌握了这一点,不应该在JSP脚本中这样做的事实几乎无关紧要。这是您通常开始学习设计模式的地方-我强烈建议您看看


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

现有方法存在许多问题,但让我们从最基本的方法开始。 存储原始用户密码是不合理的。你应该和他们(如果有人读了你的数据库怎么办)

接下来,您应该而不是混合您的演示和业务逻辑。一旦掌握了这一点,不应该在JSP脚本中这样做的事实几乎无关紧要。这是您通常开始学习设计模式的地方-我强烈建议您看看


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

现有方法存在许多问题,但让我们从最基本的方法开始。 存储原始用户密码是不合理的。你应该和他们(如果有人读了你的数据库怎么办)

接下来,您应该而不是混合您的演示和业务逻辑。一旦掌握了这一点,不应该在JSP脚本中这样做的事实几乎无关紧要。这是您通常开始学习设计模式的地方-我强烈建议您看看


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

现有方法存在许多问题,但让我们从最基本的方法开始。 存储原始用户密码是不合理的。你应该和他们(如果有人读了你的数据库怎么办)

接下来,您应该而不是混合您的演示和业务逻辑。一旦掌握了这一点,不应该在JSP脚本中这样做的事实几乎无关紧要。这是您通常开始学习设计模式的地方-我强烈建议您看看

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

您的SQL不能被攻击

"update members set chg='" + pwd + "' where uname='" + userid + "'"
如果表中的密码字段为

`pass` varchar(45) NOT NULL,
因此,您的SQL应该是

"update members set pass='" + pwd + "' where uname='" + userid + "'"
关于sql注入,我认为重要的是您要知道,如果用户输入一个包含一个的userid或pwd',这将足以中断您的查询

这就是为什么您应该使用PreparedStatement()而不是Statement

"update members set chg='" + pwd + "' where uname='" + userid + "'"
如果表中的密码字段为

`pass` varchar(45) NOT NULL,
因此,您的SQL应该是

"update members set pass='" + pwd + "' where uname='" + userid + "'"
关于sql注入,我认为重要的是您要知道,如果用户输入一个包含一个的userid或pwd',这将足以中断您的查询

这就是为什么您应该使用PreparedStatement()而不是Statement

"update members set chg='" + pwd + "' where uname='" + userid + "'"
如果表中的密码字段为

`pass` varchar(45) NOT NULL,
因此,您的SQL应该是

"update members set pass='" + pwd + "' where uname='" + userid + "'"
关于sql注入,我认为重要的是您要知道,如果用户输入一个包含一个的userid或pwd',这将足以中断您的查询

这就是为什么您应该使用PreparedStatement()而不是Statement

"update members set chg='" + pwd + "' where uname='" + userid + "'"
如果表中的密码字段为

`pass` varchar(45) NOT NULL,
因此,您的SQL应该是

"update members set pass='" + pwd + "' where uname='" + userid + "'"
关于sql注入,我认为重要的是您要知道,如果用户输入一个包含一个的userid或pwd',这将足以中断您的查询



这就是为什么您更喜欢使用PreparedStatement()而不是Statement

让我们结束这个问题。永远不要把这种类型的连接当作作业来使用。很抱歉,我只是JDBC的初学者。这就像要求一个教程。这个问题应该在IMO结束。不,我添加了一个代码。我问它有什么问题。请从JSP中删除此代码。你踩在非常危险的地面上。将连接放在JSP或任何其他jave代码snipplet中是不好的做法。让我们结束这个问题。永远不要把这种类型的连接放在JSP上,即使是作为家庭作业