2016-09-21 30 views
0

我已經編寫了一個代碼,管理員有權將一般用戶從活動狀態更改爲非活動狀態,反之亦然。所以我想更新數據庫,如果單選按鈕從活動更改爲不活動。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> 

但在輸出,當我改變一個單選按鈕,所有的查詢自動運行,數據庫更新到我在數據庫中的所有數據。

回答

1

使用onclick,您需要調用ajax調用並更新響應。你不應該像onclick =「<%SOME SQL Query%>」一樣使用。這就是更新所有行的原因。

步驟1: 「的onclick =」 updatestatus(THIS.VALUE, '<%通過out.println(電子郵件);%>')「/>

步驟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步: 我)在更新status.jsp,建立數據庫連接 II)收到的電子郵件地址和目前的S參數tatus。 iii)執行查詢 stmt1.executeUpdate(「更新分配集標誌='+狀態+',其中email ='」+ email +「'」) iv)out.println(「Updated」);

+0

歡迎@LavinaChhabra – Senthil

+0

這可以在沒有使用AJAX的情況下完成嗎? –

+0

你可以做到這一點,但頁面刷新發生,你需要保留的位置。在沒有ajax的情況下,當整個頁面重新加載/刷新時,它不會是交互式/更好的用戶體驗。你可以像onchange =「pagename.jsp?email =」+ email +「&status =」+ this.value;在刷新時,獲取值並執行數據庫操作。但是,每次選擇/更改每行的選擇值時,都會刷新。 – Senthil

0

您正在混合兩個不同的代碼。關鍵是要認識到,其中當執行每個代碼- JSP服務器上時,被請求的頁面和渲染後(即在響應被髮送到瀏覽器)和JavaScript的瀏覽器,瀏覽器收到已經產生響應。

I.e.在

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中調用該類。

+0

現在我明白了爲什麼它不能正常工作..謝謝 –

+0

@LavinaChhabra你會介意upvote我的答案嗎? –