jsp中单选按钮的数据库更改

时间:2016-09-21 11:57:48

标签: mysql jsp

我编写了一个代码,管理员可以将一般用户从活动状态更改为非活动状态,反之亦然。因此,如果单选按钮从活动状态更改为非活动状态,我想更新数据库。

以下是代码:

    <%
    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以获取数据库中的所有数据。

2 个答案:

答案 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调用该类。