【发布时间】:2015-07-11 17:23:07
【问题描述】:
我编写了一个程序,其中用户输入用户名和密码,这些用户名和密码存储到数据库中。但是首先 ResultSet 查询检查用户名输入是否已经在数据库中可用,然后在“if”语句中运行代码块并且不添加用户名输入。否则它会。但是在这个程序中,每当用户输入数据时,即使用户输入与数据库中的用户名查询匹配,它也会被插入到浏览器中
表格:
<body>
<form name="loginForm" method="post" action="log.jsp">
Username:<input type="text" name="user" />
<br/>
PassWord:<input type="password" name="pass">
<br/>
<input type="submit" value="Sign Up!">
</form>
</body>
log.jsp:
<%@ page import= "java.sql.*" %>
<%
String s1=request.getParameter("user");
String s2=request.getParameter("pass");
Connection con=null;
Statement st=null;
ResultSet rs=null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","pass");
if (s1.equals("") || s2.equals("")){
out.println("<script>alert('Please Enter valid credentials');</script>");
}
else{
st=con.createStatement();
rs=st.executeQuery("select users from NewUsers");
while(rs.next()){
String s3=rs.getString("users");
if(s1.equals(s3)){
out.println("Username already exists");
}
else{
try{
st.executeUpdate("insert into NewUsers(users,pass) values('"+s1+"','"+s2+"')");
}
catch(SQLException sql){}
finally{
out.println("Signed Up , Go here for login:<a href='login.jsp'>Here</a> ");
}
}
}
}
}
catch(ClassNotFoundException cnfe){}
finally{
if(st!=null)try{st.close();}catch(SQLException ignore){}
if(rs!=null)try{rs.close();}catch(SQLException ignore){}
if(con!=null)try{con.close();}catch(SQLException ignore){}
}
%>
我不明白为什么即使没有输入任何内容,else 语句也没有执行?输入中有一些默认值吗?
编辑: 想通了:
ps=con.prepareStatement("select users from NewUsers u where u.users=?");
ps.setString(1,s1);
rs=ps.executeQuery();
if(rs.next()){
out.println("<script>alert('User already exists')</script>");
}else{//dbUpdate}
【问题讨论】:
-
帮自己一个忙,避免在 JSP 中使用 scriptlet。
-
你会推荐什么?我听说过 scriptlet 的缺点。