2016-12-30 402 views
0

我正在寫一個在線預訂系統。我的代碼有問題,用戶可以通過jsp頁面上的取消按鈕取消他們的預訂。但我的代碼不起作用。它不能從數據庫中刪除數據。我怎樣才能做到這一點? Image of my page用jsp從數據庫中刪除數據頁面

myreservations.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@ page import ="java.sql.*" %> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Book Ticket</title> 
</head> 

<body background="http://www.teamarking.com/barcode/bar_background.jpg"> 
<form method="post" action="reservations.jsp"> 


    <center>  

     <table border="1" width="30%" height="30%"> 
      <tr> 
       <th><font color='#D18603'>ActivityID</font></th> 
       <th><font color='#D18603'>Username</font></th>     
       <th><font color='#D18603'>Ticket</font></th> 
       <th><font color='#D18603'>Cancel</font></th> 
      </tr> 




      <% 
       Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance(); 
       Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/users", "users", "123"); 
       String username = (String) request.getSession().getAttribute("username"); 
       Statement st = con.createStatement(); 
       ResultSet rs; 
       rs = st.executeQuery("select * from reservation where username='" + username + "'"); 
       while (rs.next()) { 

        String activityid = rs.getString("id"); 
        username = rs.getString("username"); 
        String buy = rs.getString("buy"); 

        out.println("<tr>"); 
        out.println("<td>" + activityid + "</td>"); 
        out.println("<td>" + username + "</td>"); 
        out.println("<td>" + buy + "</td>"); 
        out.println("<td><b><form action='cancel.jsp'><input type='submit' name='cancel' value='Cancel Reservation'></form></b>"); 

        out.println("</tr>"); 

       } 

       st.close(); 

      %> 

    </center> 
    </table> 


    <br><a href='success.jsp'>Back</a> 

    <br><br><a href='logout.jsp'>Log out</a> 


    </form> 
    </body> 
    </html> 

cancel.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@ page import ="java.sql.*" %> 
<% 

String AcivityID = request.getParameter("ActivityID"); 
String Username = request.getParameter("Username"); 
String Ticket = request.getParameter("Ticket"); 

Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance(); 
Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/users", "users", "123"); 

String sorgu = "delete from reservation where id='" + request.getParameter(AcivityID) + "'AND username='" + request.getParameter(Username) + "'AND buy='" + request.getParameter(Ticket) + "'"; 

java.sql.Statement st = con.createStatement(); 

int rowNum = st.executeUpdate(sorgu); 
response.sendRedirect("cancelled.jsp"); 
st.close(); 
%> 
+0

jsp內部的java代碼只是可怕的想法。 – GurV

+0

加上sql注入漏洞吧 – GurV

+0

剛學jsp – tripley

回答

2

你需要隱藏的輸入字段添加到每個取消的形式來傳遞其ActivityID被取消的信息。

目前的形式如下:

<form action='cancel.jsp'> 
    <input type='submit' name='cancel' value='Cancel Reservation'> 
</form> 

與添加的隱藏字段,它看起來像:

<form action='cancel.jsp'> 
    <input type='submit' name='cancel' value='Cancel Reservation'> 
    <input type="hidden" name="activityID" value="25"> 
</form> 

除非你傳遞給cancel.jsp這些額外的資料片,有不知道許多取消按鈕中的哪一個被按下。對用戶來說,可能會清楚哪些活動將被取消,但是cancel.jsp位於表單的接收端,並且不知道按鈕所在表的哪一列。

如果您希望在SQL語句中擁有用戶名,activityID和Ticket,則需要使用隱藏字段傳遞所有三個值。

+0

爲什麼價值等於25? – tripley

+0

現在我們將刪除只是actıvıtyID等於25.我想取消預訂哪個用戶按?我怎樣才能做到這一點 ? – tripley

+0

該值只是一個示例(在您的圖像中,第三行有activityID 25)。 而不是添加此固定文本,使用 out.println(「」); – Ray