使用jsp将表单数据连接到mysql

oxcyiej7  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(351)

我正在尝试使用jsp将web页面中表单中的字段存储到mysql中的数据库中。我没有得到任何错误,但我没有看到我的数据库中的数据时,我点击提交。请帮我找出我的问题。我有以下代码:

注册-新用户

<div id="container">       
        <form action = "insertData.jsp" method = "post">
            <table>
            <tr><td>E-mail/username:</td><td><input type="text" name="e-mail"></td></tr>
            <tr><td>Password:</td><td><input type="password" name="password"></td></tr>
            <tr><td>First Name:</td><td><input type="text" name="fName"></td></tr>
            <tr><td>Last Name:</td><td><input type="text" name="lName"></td></tr>
            <tr><td>Date Of Birth:</td><td><input type="text" name="dateOfBirth"></td></tr>
            <tr><td>Account Type:</td><td><input type="text" name="type"></td></tr>
            <tr><td></td><td><input type="submit" value="Submit"></td></tr>
            </table>           

        </form>    
        </div> 

</body>

还有我的jsp代码

<%
    Connection con = null;

    String email = request.getParameter("e-mail");
    String password = request.getParameter("password");

    String firstName = request.getParameter("fName");
    String lastName = request.getParameter("lName");
    String dob = request.getParameter("dateOfBirth");

    String accountType = request.getParameter("type");

    String queryText = "insert into user values('" + email + "'+'" + password + "','" + firstName + "','" + lastName + "','" + dob + "','" + accountType + "')";

    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/project", "root", "B@neswor1");

        Statement stat = con.createStatement();

        ResultSet rst = stat.executeQuery(queryText);
        System.out.println("Data is successfully inserted!");

        rst.close();
        stat.close();
        con.close();
    } catch (Exception e) {
    }

    System.out.println("Success");
%>

请帮我找出我遗漏了什么

bcs8qyzn

bcs8qyzn1#

问题的直接原因是insert查询:

String queryText = "insert into user values('" + email + "'+'" +
    password + "','" + firstName + "','" + lastName + "','" + dob + "','" +
    accountType + "')";

如果仔细看,电子邮件文字后面没有逗号。但你本可以用事先准备好的陈述来避免这种情况:

String sql = "insert into user values (?, ?, ?, ?, ?, ?)";
PreparedStatement ps = con.prepareStatement(insertTableSQL);
ps.setString(1, email);
ps.setString(2, password);
ps.setString(3, firstName);
ps.setString(4, lastName);
ps.setString(5, dob);
ps.setString(6, accountType);
ps.executeUpdate();

请注意,使用语句可以更容易地查看查询字符串是如何生成的。它还将您从难看的字符串连接和转义中解放出来,这是很容易出错的。
@duffymo指出了代码中的许多其他潜在问题,尽管其中一些问题不一定会导致代码崩溃。我看到的另一个问题是,您的“出生日期”字段被视为一个字符串,它可能应该是一个日期,您应该将其作为日期插入到数据库中。

omqzjyyz

omqzjyyz2#

此代码有太多错误:
永远不要用jsp编写scriptlet代码。
在scriptlet代码中有一个空的catch块。如果抛出异常,您将永远不会知道它。
关闭finally块中的资源。
您不使用preparedstatement。您正在请求sql注入攻击。
没有xss检查。
未验证输入数据。
如果必须使用jsp,请学习jstl。
请注意,jsp模型是1998年推出的。现代ui是使用html5、css3和javascript与rest服务进行通信的。世界在过去20年里发生了变化。旧技术有教程,但这并不意味着它们应该是你的第一个想法。

相关问题