<%@page import="java.sql.*"%>
<%@page import="java.util.*"%>
<%@page import="java.lang.*"%>
<%
String fname=request.getParameter("firstname");
String lname=request.getParameter("lastname");
String bday=request.getParameter("birthday");
String user="";
user = request.getParameter("username");
String pass="";
pass = request.getParameter("password");
try {
if(user.isEmpty() && pass.isEmpty()){
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root", "user");
String sql = "Insert into users (firstname, lastname, username, password) values('"+fname+"', '"+lname+"', '"+user+"', '"+pass+"')";
Statement stmt = conn.createStatement();
stmt.execute(sql);
conn.close();
response.sendRedirect("profile.jsp");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
%>
<html>
<body>
<form method="post">
First Name:
<input type="text" name="firstname"/>
<br>
Last Name:
<input type = "text" name="lastname"/>
<br>
Birthdate:
Day: <select name="day">
<%
for(int x=1;x<32;x++){
%>
<option value= <% out.println(x); %> ><% out.println(x); %></option>
<%
}
%>
</select>
Month: <select name="month">
<%
for(int y=1;y<13;y++){
%>
<option value= <% out.println(y); %> ><% out.println(y); %></option>
<%
}
%>
</select>
Year: <select name="year">
<%
for(int z=1985;z<2030;z++){
%>
<option value= <% out.println(z); %> ><% out.println(z); %></option>
<%
}
%>
</select>
<br>
Username:
<input type="text" name="username"/>
<br>
Password:
<input type="password" name = "password"/>
<br>
<input type="submit" value="Register"/>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我收到错误:
HTTP状态500 -
类型异常报告
信息
description服务器遇到内部错误(),导致无法完成此请求.
例外
org.apache.jasper.JasperException:java.lang.NullPointerException根本原因
显示java.lang.NullPointerException
离开鲍比表的问题不谈,就需要null
调用方法在他们面前-检查你的变量:
if(user != null && !user.isEmpty() && pass != null && !pass.isEmpty()){
}
Run Code Online (Sandbox Code Playgroud)
但是在此代码投入生产之前,您应该自己修复SQL注入问题.否则,您的数据库很可能被隔壁的"剧本小孩"消灭.使您的SQL语句参数化,并将值绑定到它,而不是将值嵌入到语句中.
String sql = "Insert into users (firstname, lastname, username, password) values(?,?,?,?)";
// Bind values to
Run Code Online (Sandbox Code Playgroud)
最后,您似乎计划在数据库中存储密码.即使在您不打算部署到Internet的玩具数据库中,也不要这样做.这是你可以对客户做的最糟糕的事情,甚至是内部客户.阅读此答案以解决此问题.
归档时间: |
|
查看次数: |
1188 次 |
最近记录: |