2016-12-30 13 views
0

私はオンライン予約システムを作成しています。私は、JSPページ上のキャンセルボタンで予約を取り消すことができるコードに問題があります。しかし、私のコードは動作していません。データベースからデータを削除することはできません。どうやってやるの? Image of my pagejspページでデータベースからデータを削除する

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がキャンセルされている情報を渡すために、キャンセルフォームのそれぞれに隠し入力フィールドを追加する必要があります。あなたはcancel.jspにこの情報の余分な部分を伝えていない限り、

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

持っている:

、それがどのように見える追加隠しフィールドで
<form action='cancel.jsp'> 
    <input type='submit' name='cancel' value='Cancel Reservation'> 
</form> 

現在、フォームは次のようになります多くのキャンセルボタンのどれが押されたかについての知識はない。ユーザーには、どのアクティビティーをキ​​ャンセルするのかがわかるかもしれませんが、cancel.jspはフォームの受信側にあり、そのボタンが置かれている表の列を認識していません。

SQL文でusername、activityID、およびTicketを使用する場合は、非表示フィールドを使用して3つの値をすべて渡す必要があります。

+0

なぜ値が25に等しいのですか? – tripley

+0

ıthınkıtはactıvıtyIDが25と等しいだけ削除します。私は予約をキャンセルしますか?どうやってやるの ? – tripley

+0

その値は例として意味されていました(画像では、3行目はactivityID 25でした)。 この固定テキストを追加する代わりに、 out.println( ""); – Ray

関連する問題