这几天为别人做了一个学生信息管理系统,本人水平有限,但在做的过程中也小有收获,拿出一点来大家共同欣赏.
做过ASP的朋友都知道,在按条件搜索并分页显示的时候,点击所分出的页往往要加很多很多参数,而且参数有的时候并不是一定的,所以操作起来非常困难,我在这里来说说我是怎么解决的.
我的这个前台表单所涉及的搜索选项有按照:姓名,性别,学号,班级,身份证号等进行一项或多项的复合搜索,在每个选项
前都加一个复选框来表示是否按照这个条件搜索.例  复选框(stuname) 学生姓名:文本(stu_name) 单选按钮(表示是精确搜索还是模糊搜索)这种样式来做的,大家看我的后台应该可以看出前台的编辑样式(现在上网的机子没有IIS,不能贴出图来,郁闷中,等有图的时候把图给大家补上^_^)
现在来看后台是怎么做的,我把用户所有的搜索条件按照判断来构造成一个SQL语句.
<%
    if Request.Form("Submit")="搜索" then                                   '如果用户进行了搜索或者重新进行了搜索
          '构造搜索的SQL语句
                if Request("stuname")="yes" then                      '检测姓名是否被选中
                    stu_name=check(Request("stu_name"))
                    if Request("stu_name")="" then
                        Response.Write("<script language=javascript>alert('错误!按名称搜索时名称不能为空!')</script>")
                        Response.Write("<script language=javascript>window.location='admin_charge.asp'</script>")
                        Response.End()
                    else
                     if Request.Form("name_like")="like" then
                         stuname_sql=" stu_name like '%"&stu_name&"%' and"
                        else
                        stuname_sql=" stu_name='"&stu_name&"' and"
                    end if
                    end if
                    else
                    stuname_sql=""
                end if
                if Request("stusex")="yes" then                          '检测性别是否被选中
                    stu_sex=check(Request("stu_sex"))
                    stusex_sql=" stu_sex='"&stu_sex&"' and"
                    else
                    stusex_sql=""
               end if         
                if Request("stuaddtime")="yes" then                  '检测入学时间是否被选中
stu_addtime=check(Request("stu_addtime"))
                    if stu_addtime="请选择" then
                        Response.Write("<script language=javascript>alert('错误!按入学时间搜索时入学时间不能为空!')</script>")
                        Response.Write("<script language=javascript>window.location='admin_charge.asp'</script>")
                        Response.End()
                    end if
                    stuaddtime_sql=" stu_addtime='"&stu_addtime&"' and"
                    else
                    stuaddtime_sql=""
                end if
                if Request("stuclass")="yes" then                  '检测班级是否被选中
                    stu_class=check(Request("stu_class"))
                    if stu_class="请选择" then
                        Response.Write("<script language=javascript>alert('错误!按班级搜索时班级不能为空!')</script>")
                        Response.Write("<script language=javascript>window.location='admin_charge.asp'</script>")
                        Response.End()
                    end if
                    stuclass_sql=" stu_class='"&stu_class&"' and"
                    else
                    stuclass_sql=""
                end if
                if Request("stulearnid")="yes" then
                    stu_learnid=check(Request("stu_learnid"))
                    if stu_learnid="" then
                        Response.Write("<script language=javascript>alert('错误!按学号搜索时学号不能为空!')</script>")
                        Response.Write("<script language=javascript>window.location='admin_charge.asp'</script>")
                        Response.End()
                    else
                        if Request("learnid_like")="like" then
                        stulearnid_sql=" stu_learnid like '%"&stu_learnid&"%' and"
                        else
                        stulearnid_sql=" stu_learnid='"&stu_learnid&"'  and"
                        end if
                    end if
                    else
                    stulearnid_sql=""
                end if
                if Request("stuidnum")="yes" then
                    stu_idnum=check(Request("stu_idnum"))
                    if stu_idnum="" then
                        Response.Write("<script language=javascript>alert('错误!按身份证搜索时身份证不能为空!')</script>")
                        Response.Write("<script language=javascript>window.location='admin_charge.asp'</script>")
                        Response.End()
                    else
                        if Request("idnum")="like" then
                        stuidnum_sql=" stu_idnum like '%"&stu_idnum&"%' and"
                        else
                        stuidnum_sql=" stu_idnum='"&stu_idnum&"'  and"
                        end if
                    end if
                    else
                    stuidnum_sql=""
                end if
                if Request("stustart")="yes" then                          '检测学生是否初始化是否被选中
                    stu_start=check(Request("stu_start"))
                    stustart_sql=" stu_start='"&stu_start&"' and"
                    else
                    stustart_sql=""
                end if
                sql="select * from information where"&stuname_sql&stusex_sql&stuaddtime_sql&stuclass_sql&stulearnid_sql&stuidnum_sql&stustart_sql&" 1=1 order by stu_id desc"
'上面这句话是构造成的SQL语句,解释一下1=1的用途,如果用户什么都没有输入则直接按搜索按纽(本人较懒,没有写前台JAVASCRIPT验证,再说前台验证也只能对付菜鸟有用),如果不加这个1=1,则前面的where会引起SQL语句执行错误,加上在什么情况下都不会影响执行结果.
'下面来说说我是怎么传递参数的:同一条件的搜索结果,即使分了页,其SQL语句应该是一样的,这就要求我们要把相同的参数传递过去,以前做总是会在HREF里面加很多?来传递很多参数(特别是这种符合搜索,那样做更难),如果不想每次分页的时候连接上都有那么多字的话,那么我把这个SQL语句赋值给一个SESSION,SESSION是可以在不同页传递的,而在其它分页,我们只需要用CONN打开这个SESSION就可以了,代码如下:
                session("sql")=sql
                'Response.Write(sql)      
           end if
        if session("sql")="" then
            sql="select * from information order by stu_id desc"
            session("sql")=sql
        end if                        
    %>
本程序版权为hxfly及编程中国论坛共同所有,如有转载,请注明出处
[此贴子已经被作者于2006-2-14 3:09:15编辑过]

 
											





 
	    
 
											
