我编写了一个代码,管理员可以将一般用户从活动状态更改为非活动状态,反之亦然。因此,如果单选按钮从活动状态更改为非活动状态,我想更新数据库。
以下是代码:
<%
while (rs.next()) {
String firstname = rs.getString("firstname");
String lastname = rs.getString("lastname");
String email = rs.getString("email");
String password = rs.getString("password");
String age = rs.getString("age");
String sex = rs.getString("sex");
String haddress = rs.getString("haddress");
String oaddress = rs.getString("oaddress");
String phonenumber = rs.getString("phonenumber");
String flag = rs.getString("flag");
Statement stmt1 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
%>
<tr>
<td>
Name: <% out.println(firstname); %> <% out.println(lastname); %>
</td>
<td>
<% if (flag.equals("A")){ %>
Active: <input type="radio" value="A" name="<% out.println(email); %>" onclick="<% stmt1.executeUpdate("update assignment set flag='A' where email='"+email+"'");
System.err.println("A"+email); %>
alert('changed to active');" checked>
Inactive: <input type="radio" value="I" name="<% out.println(email); %>" onclick="<% stmt1.executeUpdate("update assignment set flag='I' where email='"+email+"'");
System.err.println("I"+email); %>
alert('changed to inactive');">
<%
}else if(flag.equals("I")){%>
Active: <input type="radio" value="A" name="<% out.println(email); %>" onclick="<% stmt1.executeUpdate("update assignment set flag='A' where email='"+email+"'");
System.err.println("A"+email); %>
alert('changed to active');">
Inactive: <input type="radio" value="I" name="<% out.println(email); %>" onclick="<% stmt1.executeUpdate("update assignment set flag='I' where email='"+email+"'");
System.err.println("I"+email); %>
alert('changed to inactive');" checked>
但是在输出中,当我更改一个单选按钮时,所有查询都会自动运行,将数据库更新为I以获取数据库中的所有数据。
答案 0 :(得分:1)
使用onclick,您需要调用ajax调用并更新响应。你不应该使用onclick =“&lt;%SOME SQL Query%&gt;”。这就是它更新所有行的原因。
第1步: “onclick =”updatestatus(this.value,'&lt;%out.println(email);%&gt;')“/&gt;
第2步: 添加Jquery lib并添加JS函数
function updatestatus(statuschg, email) { /*ajax call to some update-status.jsp with email and current value needs to be passed */ //ajax code goes here ... $.ajax({ type: "post", url: "update-status.jsp", //this is my servlet data: "email=" +email"&status="+statuschg, success: function(msg){
alert(msg); } }); }
参考:如何调用ajax调用How to pass parameters in GET requests with jQuery
第3步: i)在update-status.jsp中,建立数据库连接 ii)接收电子邮件地址和当前状态的参数。 iii)执行查询 stmt1.executeUpdate(“update assignment set flag ='+ status +'where email ='”+ email +“'”) iv)out.println(“更新”);
答案 1 :(得分:0)
您正在混合使用两种不同的代码。关键是要实现每个代码执行时 和 - 在请求和呈现页面时服务器上的JSP(即之前响应发送到浏览器)和浏览器中的Javascript, 后,浏览器会收到已生成的响应。
即。在你的
onclick="<% stmt1.executeUpdate("update assignment set flag='I' where email='"+email+"'"); System.err.println("I"+email); %> alert('changed to inactive');"
<% stmt1.executeUpdate("update assignment set flag='I' where email='"+email+"'"); System.err.println("I"+email); %>
部分在生成页面时在服务器上执行,只有alert('changed to inactive');
在浏览器中等待,直到单击输入字段。
您需要的是AJAX。
附注:不要将Java代码放入JSP,使用MVC模式,或者至少将代码放入“util”类并从JSP调用该类。