40荤! 关于jsp 查询语句中获得得复选框里的值的问题
先是一个 changes.jsp 的关键代码,他的目的是实现复选框里的多值
<%
String bookType[]={ "dk ", "sk ", "gk ", "nk "};
int number=bookType.length;
%>
<body background= "beijing.gif "> <div align= "center ">
获取复选框的值
<form name= "form " method= "post " action= "changes_result.jsp " onSubmit= "return checkEmpty(form) ">
<table width= "276 ">
<tr>
<td width= "266 "> 选择渠道 </td>
</tr>
<%
for(int i=0;i <bookType.length;i++){
%>
<tr>
<td> <input type= "checkbox " name= "name <%=i%> " value= " <%=bookType[i]%> ">
<%=bookType[i]%> </td>
</tr>
<%}%>
</table>
<input type= "hidden " name= "number " value= " <%=bookType.length%> ">
<input type= "submit " name= "Submit " value= "提交 ">
查询得到结果 change_result.jsp 的关键代码:
<%
request.setCharacterEncoding( "gb2312 ");
int number=Integer.parseInt(request.getParameter( "number "));
%>
<%
for(int i=0;i <number;i++){
String name= "name "+i;
if(request.getParameter(name)!=null){
%>
<tr>
<td width= "226 "> <div align= "center <%=request.getParameter(name)%> </div> </td>
</tr>
<%}}%>
可以看到直接使用 <%=request.getParameter(name)%> 就可以得到复选框里的值
但是,如果直接使用下面的,就是无法获得name 的值啊
<% }} catch(Exception ex) {}%>
<%
try{
String sql= "select * from serv6 where cust_gp in ( ' "+request.getParameter( "name ")+ " ') ";
ResultSet rs=connection.executeQuery(sql);
while(rs.next()){
%>
所以,现在问题是,上面这段代码,该如何改,使得其可以得到name的值得呢?
哪个大大知道的 ,40分送上!
[解决办法]
.
.
<tr>
<td width= "226 ">
<div align= "center ">
String sql= "select * from serv6 where cust_gp in <%=request.getParameter(name)%> ;
</div>
</td>
</tr>
.
.
[解决办法]
for循环里面的
<td> <input type= "checkbox " name= "name <%=i%> " value= " <%=bookType[i]%> ">
改成
<td> <input type= "checkbox " name= "channel " value= " <%=bookType[i]%> ">
对于多个复选框,可以用一个名字,这样你接受到的会是一个数组,存的是被钩上的checkbox 的value
在接受页面String[] chanel = request.getParameterValues( "channel ");
循环就ok了
[解决办法]
request.getParameter( "name ")只能取得一个复选框的值
如果要取多个值,就如dragonsdg3(什么什么java)说的一样了,
那要用request.getParameterValues( "name "),name为你的复选框的名字,并且你的所有复选框的名字都要是的一样的。
request.getParameterValues( "name ")反回的是一个字符串数组,使用时要这样:
String[] params = request.getParameterValues( "name ");
但是在sql 语句 select ... in ()中,括号中的字符串却是要用 , 来隔开的,所以还要转换。
比如:
------------------
/**
*将一个字符串数组以 ", "分开
*/
public static String splitID(String id[]){
StringBuffer str = new StringBuffer();
for(int i=0;i <id.length;i++){
if(i> 0)
str.append( ", ");
str.append(id[i]);
}
return str.toString();
}
-------------------
所以你在sql语句中直接就这样用就可以了:
String sql= "select * from serv6 where cust_gp in ( "+splitID(params)+ ") ";
你自己试试吧,不知道讲得对不对
[解决办法]
String sql= "select * from serv6 where cust_gp in ( ' "+request.getParameter( "name ")+ " ') ";
这句话有错,应该是:
String sql= "select * from serv6 where cust_gp in ( ' "+request.getParameter(name)+ " ') ";
看出不同了吗?
request中只有叫 "name0 " "name1 "的一堆参数,没有叫 "name "的,name只是你在result页面定义的一个变量,怎么能加双引号呢?