大家好,想請教一個問題
我有2個jsp頁面,我index頁面可以勾選資料(資料是從mysql撈出)
在check.jsp 呈現勾選資料
我本來實作都沒問題,
但mysql資料超過100筆後
index頁面就突然不能跳到check.jsp了....
請問是不是還要做甚麼設定呢?
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file = "db.jsp"%>
<!DOCTYPE html>
<html>
<body>
<div class="container">
<form action = "index.jsp" method = "post">
<table>
<thead>
<tr><th>choose</th><th>id</th><th>name</th></tr></b>
</thead>
<tbody id="myTable">
<%
String sql = "select * from send";
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
String name = rs.getString("name");
String c_id = rs.getString("c_id");
out.print("<tr><td><center>"+"<input type=checkbox name='a'
value="+c_id+">"+"</center></td><td>"+ c_id + "</td><td>"+name+"</td></tr> ");
}
rs.close();
%>
</tbody>
</table></br>
<center> <input type = "submit" name = "index" value = "send">
</form>
</div>
<% String[] a = request.getParameterValues("a");
int i;
if(a!=null)
{ sql = "select* from send where ";
for(i=0;i<a.length;i++)
{
sql=sql+ " c_id ='" + a[i] + "' ";
if(i!=a.length-1){ sql=sql+ " or "; }
}
session.setAttribute("sql", sql);
response.sendRedirect("check.jsp");
}
%>
</body>
</html>
</html>
謝謝
代表有錯誤在圖片中的位子,可以提供該段sql這樣才能判斷問題出在哪
另外詢問這系統會提供外網使用嗎
看到樓主使用字串拼接SQL,這有SQL注入問題
String sql = "select* from send where ";
for(i=0;i<a.length;i++){
sql=sql+ " c_id ='" + a[i] + "' ";
if(i!=a.length-1){ sql=sql+ " or "; }
}
out.print(sql+"");
session.setAttribute("sql", sql);
response.sendRedirect("check.jsp");
/////
輸出的字串會是這樣
select* from send where c_id ='A335' or c_id ='A336' or c_id ='A338'
其實我這程式碼之前就在用(但之前資料少,都OK)
但破百筆資料後開始有問題......
我的程式單純內網使用而已喔
@暐翰
1/第一個方法還是不行....
2.我有測試過了,只要我刪除第101筆資料,他就能轉跳明細了....
但若我輸入第101筆資料(不管事甚麼資料)他都會掛掉.....
暐翰
我發現我無法直接轉跳頁面,
但是,當我在index.jsp勾選選項後
自己到網址欄打check.jsp按enter
就可以看到我的清單明細了....(但一定要自己手動轉跳
暐翰
我解決了~
我用
<script> window.open("check.jsp"); </script>
就解決了
不知為何
response.sendRedirect("check.jsp");
就是不行....
想到了
sendRedirect會使用Get
不是Post
方式,所以組成的參數URL太長導致錯誤
舉例: http://xxx.x.x/check.jsp?a='A001'.....a='A101'
以IE來講,超過url 2083長度限制
可以改用forward才能將Form的參數帶過去
默默的試了一下
RequestDispatcher rd;
rd = getServletContext().getRequestDispatcher("check.jsp");
rd.forward(request,response);
forward似乎也無法..
謝謝暐翰
坦白說, 直接把SQL語法赤裸裸的寫進JSP裡非常不建議 !
一般都會分層架構吧!
form -> DAO -> DB 寫入
DB -> DAO -> view 撈出
Java 開發網頁還是採用一些 MVC 的框架比較好 ! 例如: Spring
因為你用request有一定量的限制
通常應該是要用request去傳條件再去sql搜尋
你可以改用將要傳的值組成一個字串再傳過去(使用js)
說不定就可以成功了