这几天为别人做了一个学生信息管理系统,本人水平有限,但在做的过程中也小有收获,拿出一点来大家共同欣赏.
做过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编辑过]