最近在做毕业设计,一个B/S结构jsp程序.在我的一个页面a.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%@ include file="../importbao.jsp"%>
<%@ include file="mysession.jsp"%>
<%
int id =(null==request.getParameterValues("id")?1:(Integer.parseInt(request.getParameter("id"))));
String sql="select * from t";
sqlBean my = new sqlBean();
my.setConnection();
my.setQuerystatement(sql);
ResultSet Rst=my.getResult();
Rst.first();
Rst.previous();
%>
<script Language="JavaScript">
<!--
function check_input(frm)
{  
   ...
}
//-->
</script>
该页面有一个表单
<tabale>
<form action="b.jsp?id=<%=id%>" name="frm" onsubmit="return check_input(this)" method="POST">
表单里面有如下控件:...
<select name="cmd">  //自动从数据库获取选项
<%
   while(Rst.next())
     {    
         out.print("<option value='");
         out.print(Rst.getString("cname"));
         out.print("'>");
out.print(Rst.getString("cname"));
out.print("</option>");
    } 
        
%>
</select> 
...
<input type="checkbox" name="chkb1~chkb12" value="1">12个复选框,想实现选中为1,没选为0.
...
<input type="submit" name="Submit" value="授权">
<input type="reset" name="Submit2" value="重置">
</tabale>数据库中有一个t表,有一个cid(编号) int 4,cname(名称) varchar 20,还有crow1-crow12十二个tinyint型的字段,初始值我都给的0.在b.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%@ include file="../importbao.jsp"%>
<%@ include file="mysession.jsp"%>
<%try{
String cmd = new String(request.getParameter("cmd").getBytes("ISO8859_1"),"GBK");
int    chkb1 = java.lang.Integer.parseInt(request.getParameter("chkb1"));
int    chkb2 = java.lang.Integer.parseInt(request.getParameter("chkb2"));
...
int    chkb12 = java.lang.Integer.parseInt(request.getParameter("chkb12"));
int id = Integer.parseInt(request.getParameter("id"));String sql="update t set crow1="+chkb1+"set"+ "crow2="+chkb2+",...crow12="+chkb12+" where cname='"+cmd+"'";
sqlBean myUpdate = new sqlBean();
myUpdate.setConnection();
myUpdate.setQuerystatement(sql);
myUpdate.updateRecord();   
%>      
<html>
<head></head>
<body><table>更新成功
<%  out.print(cmd);
    out.print(chkb1);
    out.print(chkb2);
    out.print(id);
%>
</table>
<%
}
catch(Exception e){
out.println("出错:"+e.getMessage());}%>
现在问题是:
问题一:如果我没有全部勾选12个复选框就会显示异常:"出错 null"(通过测试知道应该是没有选中的话其值为null,被捕获了异常),于是我在function check_input(frm)中加入:
if(frm.chkb1.checked=false)
frm.chkb1.value="1"或1
if(frm.chkb1.value == 1或"1") 
{ alert("检测"); return (false);}
按提交测试时弹出了"检测"的对话框,我在if(frm.chkb1.checked=false)后加上{ alert("检测"); return (false);}注销掉后面的语句,在测试也弹出了同样的对话框,进一步证实了我的猜测,于是我第一复选框不选,用检测来复值"0或1",其他都勾选,可还是"显示出错 null"可见chkb1的值还是为空,可之前在a.jsp检测到赋予是给chkb1.value="1"或1时,弹出了对话框,chkb1="0"或0时也显示"出错 null",这个空值问题在这中方法下几乎无解了!急啊!问题二:我估计是id号这些东西没搞清,如果sql变为String sql="select * from t where cid="+id+"";是下拉菜单框不能弹出选项,框里只显示了第一项值比如"房子",变量值是通过request.getparameter()得到的.
如果在a.jsp全部勾选复选框后,提交后则显示"更新成功",并且显示了"汽车 111(分别代表选中的菜单项值,chkb1,chkb2,id三个值)",可是到数据库表中看,相应的那条记录并未被修改!这是怎么回事!真是屋漏偏逢连夜雨啊!眼见不久就要叫设计了,我的论文还没写,这只是系统中的一个小问题,还有好多要做的,心凉啊,请各为救急!

解决方案 »

  1.   

    大哥啊!这样太乱了啊!全都在JSP里写啊?最起码也得用JSP+JAVA BEAN+SERVLET啊?你这样的程序太乱了啊!完全没有层次,和ASP程序差不多了啊!
      

  2.   

    谢谢你的指点,不过我写了一个javabean(mybean)增删修改数据库的,放了WEB-IF的class文件夹内,在WEB-IF目录下又建了一个mysqlbean文件夹,里面放了mybean.class,实现添加删除时候都行,可偏偏更新时不行,我不怎么动 x.jsp?id=y这类的东西,也许这是问题所在之一吧,刚接触jsp没多久.
      

  3.   

    问题一:
    你的function check_input(frm)在什么地方触发执行的,我建议你改一下这个地方,而是将判断放到这里
    =========================================================================
    int    chkb1 = java.lang.Integer.parseInt(request.getParameter("chkb1"));
    int    chkb2 = java.lang.Integer.parseInt(request.getParameter("chkb2"));
    ...
    int    chkb12 = java.lang.Integer.parseInt(request.getParameter("chkb12"));
    int id = Integer.parseInt(request.getParameter("id"));
    ============================================================================
    或者你的submit 按钮这样写onclick = check_input(frm);,然后在函数function check_input(frm)中加上form.submit;问题二::
    这个建议你将你组好的sql用控制台打一下,然后考到查询分析器中跑一下,看看sql的执行结果
      

  4.   

    int id =(null==request.getParameterValues("id")?1:(Integer.parseInt(request.getParameter("id"))));
    这种写法只会给你添加麻烦,你也应该将取得的参数线类型转换一下,不是更安全吗?
      

  5.   

    还是不行,<form action="b.jsp?id=<%=id%>" name="frm" onsubmit="return check_input(this)" method="POST"> 我的submit控件也在表单form里,还是不能解决复选框问题.我刚才把update set crow1=1,crow2=1 where cid=1;在查询分析器里执行可以更新,然后在程序里把String sql="update t set crow1="+chkb1+",crow2="+chkb2+",...crow12="+chkb12+" where cname='"+cmd+"'"(sql里的update语句在查询分析器执行报错);改为String sql="update t set crow1=1,crow2=1,...crow12=0, where cname='汽车'";或(where cid=1;)在程序里执行都可以更新,看样子是"+chkb1+"更本没有给crow1赋值,不管传来的值是1,还是null,不知道是那个环节没有做好.
      

  6.   

    int id =(null==request.getParameterValues("id")?1:(Integer.parseInt(request.getParameter("id"))));
        String sql="select * from t";
        是不是没加这一句?->where cid="+id+"";加了的话下拉选项不能从数据库获取,因为cid!=id?
      

  7.   

    LZ 你的update语句
    update table_name set table_column1=value1,table_column2=value2……
      

  8.   

    yun 把业务逻辑也写到页面了 ,。  不看了 好乱 。。
      

  9.   

    感谢各位大侠指点,惭愧!
    空值和下拉框问题基本解决了,现在主要是不能更新,
    <%String sql="update t set"+
     "row1=1,row2=1,row3=1,row4=1,row5=1,row6=1"+
     "row7=1,row8=1,row9=1,row10=1,row11=1,row12=1"+
     "where cid=1";String sql="update t set"+
     "row1="+chkb1+",row2="+chkb2+",row3="+chkb3+",row4="+chkb4+",row5="+chkb5+""+
      "row6="+chkb6+,row7="+chkb7+",row8="+chkb8+",row9="+chkb9+",row10="+chkb10+""+
      "row11="+chkb11+",row12="+chkb12+" where cid=1";
    以上两种写发有错吗?谢谢了...sqlBean my = new sqlBean();
    my.setConnection();
    my.setQuerystatement(sql);
    myU.updateRecord(); 
    %> 
    不行,但添加删除可以.
    把update t set row1=1,row2,row3=1,row4=1,row5=1,row6=1,row7=1,row8=1,row9=1,row10=1,row11=1,row12=1 where cid=1";还是不行,
      

  10.   

    不好意思,更正一下:
    以上两种写法有错吗?把update t set row1=1,row2,row3=1,row4=1,row5=1,row6=1,row7=1,row8=1,row9=1,row10=1,row11=1,row12=1 where cid=1";在查询分析器里执行可以更新.