ASP教程之用ASP学做一个在线查询拜访
无法实现跨操作系统的应用。当然这也是微软的理由之一,只有这样才能发挥ASP最佳的能力。可是我却认为正是Windows限制了ASP,ASP的概念本就是为一个能让系统运行于一个大的多样化环境而设计的;关于在线查询拜访人人必定不会生疏吧,给出一个成绩和数个谜底,让用户填写,然后把了局保留到数据库,主动举行统计,最初给出个统计的图。这期的跟我学做就来做一个在线查询拜访体系。 1、功效计划这么复杂的体系也要做功效计划?有的人大概会以为奇异,不外话说返来不论怎样的体系,先做功效计划老是能对体系有个对照清析的懂得。让我们来看看在线查询拜访的功效吧。基础的功效下面已说了,就是要给出一个成绩和数个谜底,然后统计,最初给出图。在这个基本上,我们能够思索给一个查询拜访加上一个工夫段(无效期),在这个工夫段里查询拜访是无效的,过了这段工夫就主动停止这个查询拜访。别的,我们能够指定一个用户一次只能提交一次谜底。假如你要限定得更多,能够指定一个IP只能提交一次谜底,不外,如许大概一个网吧里的人只能有一个提交了。关于查询拜访里的成绩,有些多是单选题,而有些多是多选题。最初来讲说统计的图,在统计图里要给出谜底、每一个谜底的投票人数,并要显现出每一个谜底投票数所占的比例。一样平常用横的图就能够了,也对照简单完成,固然,假如你要改成竖的,也能够。
如今依据下面总结出在线查询拜访的功效以下:
1、数据保留在ACCESS2000数据库中;
2、每一个用户一次会见能够投票一次
3、给出每一个查询拜访的统计情形,用统计图来显现
4、每一个查询拜访都有个无效期,过时后主动停止。停止了的查询拜访只能检察了局。
5、办理员能够增添查询拜访,修正查询拜访的谜底(增添、修正、删除,修正范例)。
6、关于已停止的查询拜访,办理员只能删除查询拜访,而不克不及修正谜底。
7、只要一个办理员(单用户)
2、数据库计划
如今来计划数据库,依据功效请求,最少要有三个表,一是办理员表,二是查询拜访表,三是查询拜访了局表。数据库文件名为survey.mdb能够改成.asp假如改的话,请在ASP程序中作响应的修正。
表1、办理员表表名:manage
-----------------------------------------------------------------
字段范例长度申明
-----------------------------------------------------------------
manage_id主动编号-在这里没用到,往后扩大用
manage_username文本15办理员用户名
manage_password文本15办理员暗码
-----------------------------------------------------------------
创建manage表后到场一条新纪录,填进你的办理员用户名和暗码,在这里填进的是xmxoxo
表2、查询拜访表表名:survey
-----------------------------------------------------------------
字段范例长度申明
-----------------------------------------------------------------
survey_id主动编号-递增、主键、有索引无反复
survey_question文本255查询拜访成绩
survey_type是不是-范例,否:单选是:多选
survey_stime日期-永日期,入手下手工夫
survey_etime日期-永日期,停止工夫
-----------------------------------------------------------------
表3、查询拜访停止表表名:survey_vote
-----------------------------------------------------------------
字段范例长度申明
-----------------------------------------------------------------
vote_no主动编号-递增、主键、有索引无反复
vote_id长整型-有索引有反复,小数位0
vote_answer文本100查询拜访谜底
vote_count长整型-投票数
-----------------------------------------------------------------
个中,survey_vote表和survey表的id字段有多对一的干系。其实不必定要创建这个干系,可是创建干系会使思绪更明白。
3、包括文件
这里所要用到的函数其实不多,次要是对数据库举行操纵的,假如要避免输出时的HTML等代码,间接用server.htmlencode举行处置就能够了,以是不必要一个专门的函数来处置。我们能够相沿上一篇《跟我学》系列《跟我学做树型菜单》里的包括文件。
共用函数文件,文件名:inc.asp
<%
*******************************************************************
通用数据库ASP函数
*******************************************************************
数据库常数
databasename="survey.mdb"数据库名,假如更名的话,在这里修正就好了
*******************************************************************
翻开数据库
subopendb(connect)
setconnect=server.CreateObject("ADODB.connection")
connect.ConnectionString="DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ="&_
server.MapPath(databasename)
connect.Openstrconn
endsub
*******************************************************************
封闭数据库
subclosedb(connect)
connect.close
setconnect=nothing
endsub
*******************************************************************
翻开单个表读
subopentable(connect,tbname,myrs)
setmyrs=server.createobject("ADODB.recordset")
rssql="select*from"&tbname
myrs.openrssql,connect,1,1
endsub
*******************************************************************
封闭一时表
subclosetable(rs)
rs.close
setrs=nothing
endsub
*******************************************************************
查询数据库
subsearchtable(connect,sql,rs)
setrs=server.createobject("ADODB.recordset")
rs.opensql,connect,1,1
endsub
*******************************************************************
查询并变动数据库
subchangetable(connect,sql,rs)
setrs=server.createobject("ADODB.recordset")
rs.opensql,connect,1,3
endsub
*******************************************************************
显现信息用于调试
Subw(msg)
response.writemsg
endsub
*******************************************************************
程序中止用于调试
subuserstop()
response.end
endsub
%>
4、文件计划
依照传统的思绪,我们老是把在线查询拜访计划成三个部分,1、是显现查询拜访表;2、是显现查询拜访统计了局;三是背景办理。而在实践使用中,我们会发明,显现查询拜访表常常是在某个网页中的,显现了局一样平常也是弹出一个窗口来。背景办理则是经由过程另外一个链接大概登录表单转向到的。为了更便利地利用在线查询拜访,我们把显现查询拜访表部分写成一个JS剧本,让必要显现查询拜访表的网页经由过程援用剧本的体例来自在地挪用它。好,看看文件计划
1、inc.asp包括文件。次要的函数库
2、surveycode.asp显现查询拜访表程序。在主网页中利用剧本来挪用它。
3、survey.asp查询拜访表列表程序。列出一切查询拜访的形态。
4、survey_vote.asp显现查询拜访统计了局程序。带上参数暗示查询拜访的成绩。
5、survey_manage.asp办理程序。
在这里,我们略过了页面计划,由于作风计划不是我们所要说的内容,以是关于网页的作风,结构,CSS等等,请人人本人计划。
5、文件流程
先写出程序的次要流程,能够对照便利于往后修正和扩大、移植。在这里对照主要的是要在程序中写哪些子程序,怎样布置这些子程序。
1、surveycode.asp显现查询拜访表单
<%
猎取querystring参数,id暗示查询拜访编号
判别参数准确性
判别查询拜访是不是在无效期中。
读取查询拜访成绩、范例
输入查询拜访谜底,并天生查询拜访表单
封闭数据库及表
%>
2、survey.asp显现一切查询拜访形态
<%
读取数据库
%>
<html>
显现一切查询拜访形态,并到场链接
</html>
3、survey_vote.asp显现统计了局。
这里有两个功效,一是没有提交的显现,二是提交了谜底落后行统计,然后显现了局。假如不带参数,就是第一种体例。也能够分为两个文件来完成。
<%
猎取参数。id暗示查询拜访编号一切数据来自form
判别是不是有参数,有则先辈行统计
没有则间接显现
统计子程序
%>
<html>
显现子程序
</html>
4、survey_manage.asp办理程序。
办理部分对照庞大,要完成较多的功效。先来列一下办理的功效:
1)办理员登录。只要登录后才干举行办理
2)加入登录。完成办理后平安加入。
对换查的办理有:
3)增添一个查询拜访。同时要增添查询拜访谜底
4)修正一个查询拜访。修正内容,工夫,范例,查询拜访谜底的内容、增添、删除
5)删除一个查询拜访。不克不及删除正在举行的查询拜访。
针对这些功效,来计划它的流程
<%
猎取参数。action暗示举措,分离对应下面的功效。
依据举措来转向响应的子程序
登录子程序
加入登录子程序
实行增添查询拜访成绩子程序
实行增添查询拜访谜底子程序
实行修正查询拜访子程序成绩和谜底一同修正
实行删除查询拜访成绩子程序
实行删除查询拜访谜底子程序
<html>
<%
判别是不是登录,没有则显现登录表单
依据举措显现响应表单
显现一切查询拜访子程序
显现单个查询拜访子程序。成绩和谜底一同显现
显现增添查询拜访子程序。
显现登录表单
%>
</html>
6、代码编写
做好了流程计划后,写代码就对照有层次了。让我们从复杂的入手下手。在编写代码
之前,我们要先在数据库里输出一些纪录,以便做测试。先到场一条查询拜访成绩,和几个
查询拜访谜底,并手工输出一些统计信息。
我们先来写显现查询拜访表单的surveycode.asp这个文件要在别的页面中被挪用,以是我们写成JS和VBS混用的体例。挪用的时分能够把它放在某个表格中,用上面的语句:
<SCRIPTLanguage="JavaScript"SRC="surveycode.asp?id=1"></SCRIPT>
依照下面的流程,在显现表单前,先要判别一下查询拜访是不是存在,是不是在举行中。别的,在表单中要提交一个埋没的参数,来暗示查询拜访的成绩编号(id),谜底提交的时分,提交的是谜底的编号vote_no
文件名surveycode.asp
<!--#includefile="inc.asp"-->
<%
id=request.querystring("id")
ifid""then假如有参数
opendbmy连接数据库
sql="select*fromsurveywheresurvey_id="&id查询语句
searchtablemy,sql,rs查询数据库
ifnotrs.eofthen假如有这个查询拜访纪录
question=rs("survey_question")读出成绩
surveytype=rs("survey_type")读出谜底范例
stime=rs("survey_stime")读出入手下手工夫
etime=rs("survey_etime")读出停止工夫
closetablers封闭表
ifstime<now()andetime>now()then假如查询拜访正在举行中
上面输入查询拜访表单
先输入表单和成绩,表单提交到survey_vote.asp
%>
document.write("<formaction=survey_vote.asptarget=_blankmethod=post>");
document.write("<tableborder=1cellpadding=2cellspacing=0bordercolorligh=#000000");
document.write("bordercolordark=#ffffffwidth=100%align=center><tbody>");
document.write("<tr><tdcolspan=2align=center><b><%=server.htmlencode(question)%></b></td></tr>");
<%
sql="selectvote_no,vote_answerfromsurvey_votewherevote_id="&id查询谜底的SQL
searchtablemy,sql,rs实行查询
ifnotrs.eofthen假如有谜底,就输入
fori=1tors.recordcount
%>
document.write("<tr><tdalign=right><inputname=restype=");
<%
ifsurveytypethen判别范例,显现单选大概多选
%>
document.write("checkbox");
<%else%>
document.write("radio");
<%endif上面这句输入谜底的笔墨和提交的值(vote_no)%>
document.write("value=<%=rs("vote_no")%>></td><td><%=rs("vote_answer")%></td></tr>");
<%
rs.movenext
next
上面几句输入一个埋没的参数,传送成绩编号(id)
并用一个JS函数来界说点击检察后的链接
%>
document.write("<tr><tdcolspan=2align=center><inputtype=hiddenname=idvalue=<%=id%>>");
document.write("<inputtype=submitclass=buttonvalue=投票>");
document.write("<inputtype=buttonclass=buttonvalue=检察>");
document.write("</td></tr></tbody></table></form>");
functionjump(id){
window.open("survey_vote.asp?id="+id,"survey")
}
<%
endif
endif
endif
closetablers
closedbmy
endif
%>
在surveycode.asp完成后,我们完成上已断定了以下几点:
1、在survey_vote.asp中,假如querystring参数id有值,则是检察了局;
2、在survey_vote.asp中,假如form参数id有值,则要先辈行统计;
3、在survey_vote.asp中,提交来的form参数res是谜底的编号vote_no;
7、统计了局
起首我们来完成与surveycode.asp最亲切相干的显现统计了局survey_vote.asp文件。在上一篇的开头,我们已申明了在surveycode.asp中断定的一些参数。
统计了局survey_vote.asp
<!--#includefile="inc.asp"-->
<html>
<head>
<title>查询拜访统计了局</title>
<linkrel="stylesheet"href="main.css"type="text/css">
</head>
<body>
<%
上一句先到场包括文件,援用函数。
id=request.querystring("id")猎取querystring参数id
opendbmy毗连数据库
ifid=""then假如没有,则不是间接看了局
id=request.form("id")猎取form参数id
ifid""then假如有值,则是要先统计
surveycount()挪用统计子程序
endif
endif
ifid""then
disp_survey()不论是哪一种,最初都显现了局
endif
closedbmy封闭数据库
-----统计子程序-----
subsurveycount()
ifsession("survey_ok")=""then假如还没投票
no=request.form("res")失掉谜底的编号
ifno""then
界说SQL语句,让提交的谜底数目+1
sql="updatesurvey_votesetvote_count=vote_count+1wherevote_no=in("&no&")"
my.executesql
endif
session("survey_ok")="ok"
endif
endsub
------------------
---显现了局子程序---
subdisp_survey()
界说SQL语句,失掉查询拜访的成绩
sql="selectsurvey_questionfromsurveywheresurvey_id="&id
searchtablemy,sql,rs实行查询
question=rs("survey_question")把成绩存到question中
closetablers封闭表
界说SQL语句,失掉谜底的数目总和
sql="selectsum(vote_count)astotalfromsurvey_votewherevote_id="&id
searchtablemy,sql,rs
total=rs("total")
closetablers封闭表
界说SQL语句,失掉一切的谜底文本部分及投票数
sql="selectvote_answer,vote_countfromsurvey_votewherevote_id="&id
searchtablemy,sql,rs实行查询
上面用表格来输入统计表
%>
<tablewidth="500"border="1"align="center"cellpadding="2"cellspacing="0"
bordercolorligh="#000000"bordercolordark="#ffffff">
<tr>
<tdcolspan="4"align="center"><b>查询拜访统计了局</b></td>
</tr>
<tr>
<tdcolspan="4"><b>查询拜访成绩:<%=question%></b></td>
</tr>
<tr>
<tdwidth="150"align="center"height="20">谜底</td>
<tdwidth="150"align="center"height="20">投票率</td>
<tdwidth="100"align="center"height="20">比例</td>
<tdwidth="100"align="center"height="20">票数</td>
</tr>
<%dowhilenotrs.eof
iftotal=0then
percent=0假如没人投票,则百分比为0
else
percent=int(rs("vote_count")/total*10000)/100盘算百分比
endif
%>
<tr>
<tdwidth="150"align="center"><%=rs("vote_answer")%></td>
<tdwidth="150"align="left">
<tableborder="0"width="<%=percent%>"bgcolor="#CCCC00"height="10">
<tr>
<td></td>
</tr>
</table>
</td>
<tdwidth="100"align="center"><%=percent%>%</td>
<tdwidth="100"align="center"><%=rs("vote_count")%></td>
</tr>
<%
rs.movenext
loop
%>
<tr>
<tdcolspan="4">至<%=now()%>止,共有<%=total%>张投票
<ahref="javascript:window.close()">封闭窗口</a>
</td>
</tr>
</table>
<%
closetablers封闭表
endsub
------------------
%>
</body>
</html>
在显现投票过程当中,我们用session变量survey_ok来暗示是不是已投过票。别的,这显现统计中,援用CSS文件来把持表格的款式,你们能够依据本人的请求本人到场。
8、列出一切查询拜访的形态
如今我们来完成survey.asp,它的次要义务是列出一切的查询拜访形态,包含:
1、查询拜访的成绩,链接到投票表单页面(间接写在本页中);
2、查询拜访的起启工夫;
3、查询拜访的停止工夫;
4、查询拜访的举行形态:未入手下手、举行中、已停止;
5、查询拜访的投票数;
6、查询拜访的范例,单选仍是多选;
7、别的给出一个链接检察投票了局;
依据这些请求,查询响应的表就能够了,有些语句,好比失掉投票总数,SQL语句实在在下面的survey_vote.asp中已写过了。
列出一切查询拜访的形态survey.asp
<!--#includefile="inc.asp"-->
<html>
<head>
<title>在线查询拜访列表</title>
<linkrel="stylesheet"href="main.css"type="text/css">
</head>
<body>
<%
id=request.querystring("id")猎取参数
ifid""then假如有参数,则显现这个查询拜访表单
response.write"<SCRIPTLanguage=JavaScriptSRC=surveycode.asp?id="&id&"></SCRIPT>"
else不然挪用子程序显现形态
disstat()
endif
-----显现形态子程序----
subdisstat()
opendbmy毗连数据库
opentablemy,"survey",rs间接翻开表
上面用表格显现每一个纪录
先显现表头
%>
<tablewidth="760"border="1"cellspacing="0"cellpadding="2"
align="center"bordercolorligh="#000000"bordercolordark="#ffffff">
<tr>
<tdcolspan="8"align="center"><b>在线查询拜访列表</b></td>
</tr>
<tr>
<tdwidth="50"align="center"height="20">编号</td>
<tdwidth="200"align="center"height="20">查询拜访成绩</td>
<tdwidth="50"align="center"height="20">范例</td>
<tdwidth="140"align="center"height="20">起启工夫</td>
<tdwidth="140"align="center"height="20">停止工夫</td>
<tdwidth="50"align="center"height="20">形态</td>
<tdwidth="80"align="center"height="20">已投票数</td>
<tdwidth="50"align="center"height="20">检察</td>
</tr>
<%
上面输入每一个纪录
dowhilenotrs.eof
先读出每一个字段
id=rs("survey_id")
question=rs("survey_question")
读出范例
ifrs("survey_type")then
stype="多选"
else
stype="单选"
endif
stime=rs("survey_stime")
etime=rs("survey_etime")
判别形态
ifnow()<stimethen
stat="未入手下手"
else
ifnow<etimethen
stat="举行中"
else
stat="已停止"
endif
endif
界说SQL语句,失掉谜底的数目总和
sql="selectsum(vote_count)astotalfromsurvey_votewherevote_id="&id
searchtablemy,sql,tmprs查询
total=tmprs("total")
closetabletmprs封闭表
上面输入一笔记录
%>
<tr>
<tdalign="center"height="20"><%=id%></td>
<tdheight="20">
<ahref="survey.asp?id=<%=id%>"><%=question%></a>
</td>
<tdalign="center"height="20"><%=stype%></td>
<tdalign="center"height="20"><%=stime%></td>
<tdalign="center"height="20"><%=etime%></td>
<tdalign="center"height="20"><%=stat%></td>
<tdalign="center"height="20"><%=total%></td>
<tdalign="center"height="20">
<ahref="survey_vote.asp?id=<%=id%>"target="_blank">检察</a>
</td>
</tr>
<%
rs.movenext挪动到下一条,轮回
loop
%>
</table>
<%
closetablers封闭表
closedbmy封闭数据库
endsub
----------------------
%>
</body>
</html>
9、背景办理
在背景办理页面survey_manage.asp中,后面我们已列出来它所要完成的办理功效。办理的流程是先显现出一切查询拜访,关于还没有入手下手的查询拜访,能够举行修正、删除;关于已停止的查询拜访,能够删除,不克不及修正;关于正在举行的查询拜访,只能修正它的停止工夫。用一个参数action来暗示举措,寄义以下:
1、无参数。暗示第一次进进,显现登录表单
2、login暗示实行登录
3、logout暗示实行加入登录
4、showaddquestion暗示显现增添一个查询拜访
5、showsurvey暗示显现一个查询拜访
6、doaddsurvey暗示实行增添一个查询拜访
7、doaddanswer暗示实行增添一个谜底
8、dodelsurvey暗示删除一个查询拜访
9、dodelanswer暗示删除一个谜底
10、domodify暗示修正一个查询拜访及谜底
缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。 从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了 掌握asp的特性而且一定要知道为什么。
页:
[1]