在这段网页语句中,利用Session对象来记录目前的工作模式。当我们第一次进入“显示留言意见”网页的时候,我们所见的网页画面一定是一般!因为Session尚未被建立,因此它的“变量”值一定不会是“yes”,所以网页中会出现一个输入密码进入“教师管理”模式的栏位,只有当我们输入密码按下“教师管理”的按钮组织上发ASP程序中的进入管理模式语句后,Session对象才会被建立,同时,“checkedit“Session对象变量值被设置为“yes“,所以我们就进入了能将一般性发言与悄悄话发言的数据全部显示出来,同时还让教师们可以针对某位特定学生家长所发表的意见作出独立回答的管理模式页面。 留言显示网页的分页 当家长的发言与老师回复的数据笔数太多时,一次要将全部的数据内容显示在网页中,等待网页下载的时间太长了,因此采用固定笔数分页浏览方式来显示网页。 要进行分页显示,得先知道目前有多少笔的留言数据,而留言数据笔数可以通过Recordset对象的“Recordcount“(记录个数)属性得知,我们将每10笔数据为一单位分页显示: count=rs.recordcount if count/10>(count\10) then totalpage=(count\10)+1 else totalpage=(count\10) end if “/”为浮点数除法,“\”为整数除法。 跳页选择的ASP程序语句 所有的发言数据采用固定笔数分页浏览的方式来显示后,还要提供一个跳页链接显示的功能,让浏览者可以选择希望浏览的页次进得浏览,ASP程序语句: pagecount=0 rs.movefirst if request.querystring("topage")<>"" then pagecount=cint(request.querystring("topage")) if pagecount<=0 then pagecount=1 if pagecount>totalpage then pagecount=totalpage rs.move(pagecount-1)*10
发言表单网页制作
inse tu3 表单的参数 表单的Action参数:Action参数是用来指定Server端处理此一表单数据内容的程序,此处表单处理ASP程序为“add.asp“, 表单的Mothed参数:要将表单传送至Server端的方式有两种,设置值分别为GET及POST,若设置为POST,则浏览器会等Server端来读取数据,若设置为GET,则当我们按下送出按钮时,浏览器会立即将表单中的数据内传送出去。利用POST方法,在传送的数据上将不受限制,利用GET方法传送的数据量则大约只有2K左右。 留言处理程序 要将家长发言数据作后续处理及将这些数据内容存入数据库,须利用添加数据记录的Insert Into 指令,然后再写入数据库文件中: Inset into 指令语句格式: Insert into 数据表名 (栏目名) values(栏目值)
实现办法:访问者登录时在登录页面上的创建的会话变量Session 用于从数据库中获取访问者的有关信息,表示它是否是管理员。如果值为1,就表明访问者是一个管理员,则用如下代码写入一个指向管理员页面的链接: <% If Session("Manager") = 1 then %> <A HREF="../html/management_menu.asp">管理员菜单</A> <% end if %> 通过按纽B1是否为空来判断要不要显示用户所借图书,利用一个记录集来获取访问者已经借出了的所有图书的列表。 if NOT isempty(Request.Form("B1")) then set RSBooks = conn.Execute ("select BookID, Title from LibBooks where " _ & "CheckedOutTo = " & Session("EmpID")) end if 再用循环语句将所借书以表格形式显示出来。 <table border=1 width="90%" > <% if NOT isempty(Request.Form("B1")) then Do Until RSBooks.EOF%> <TR > <TD WIDTH=40% height="20"><% Response.Write RSBooks("Title") %></td></tr> <% RSBooks.MoveNext loop end if %> </table> 循环将遍历Rsbooks记录集中的每个记录,直到该记录集结束: 该网站中的所有ASP页面都会在访问者访问之前对其进行登录检查。这样就可以避免访问者通过输入某个页面地址然后在没有登录的情况下直接进入该页面的情况发生。此外,每个管理页面都要确认访问者是管理员。
管理菜单页面
管理菜单页面有一个HTML表单,根据选择的按钮的不同,可以进行5种不同的操作:图书的归还、图书的编辑、图书的删除、图书的添加和类别的添加。不管选择了哪一个按钮,该表单都提交人其自身进行处理。 要进行图书的归还、图书的编辑、图书的删除三种操作,须先进行搜索,找到该书后,由图书Book.asp返回一个链接: <% If Session("Manager") = 1 then %> <A HREF="../html/management_menu.asp?title=<% response.write RSBooks("Title") %>&BOOKID=<% response.write RSBooks("BOOKID") %>">管理员菜单</A> <% end if %>
这样就将所找到的书的书号BookID、书名Title传递管理者页面。再进行所须操作。共有3个不同的铵纽,可以进行3种操作。若单击“修改”钮: 则重定向到编辑图书页面,同时把Bookid 传递给该页面。 Response.Redirect "./edit_book.asp?BOOKID="&request("BOOKID1") 将其他的情况需要建立到数据库的连接: set conn = server.createobject ("adodb.connection") Conn.Open("FILEDSN=c:\Program Files\Common Files\ODBC\Data Sources\ms access database.dsn") if NOT isempty(Request.Form("Delete")) and request("BOOKID1")<>"" then conn.Execute "delete from LibBooks where BOOKID ="&request("BOOKID1") end if if (NOT isempty(Request.Form("checkin"))) and request("BOOKID1")<>"" then conn.Execute "update LibBooks set checkedoutto= 0, status= 'Available' where BookID="&Request("BOOKID1") end if
页面中的添加新的种类部分包含一个文本控件和一个选择控件。其中选择控件是用所有已经存在的类别列表进行填充的,包括特殊类别 Top level ,该类别表明当前类别是处于类别层次结构中的最顶层。代码如下: 先用一个记录集来填充父类别选择控件: set RSCategories = conn.Execute("select CategoryName from LibCategories order by CategoryName") 再用下列循环语句: <% Do Until RSCategories.EOF %> <OPTION VALUE="<% response.write RSCategories("CategoryName") %>"><% response.write RSCategories("CategoryName") %></OPTION> <% RSCategories.MoveNext Loop %> 遍历RSCategories记录集中的每个记录,并作为一个选项添加到列表中,而记录集中CategoryName 同时作为显示值和传递值: 本页面还包含一个指向添加图书页面的链接。 搜索结果页面
搜索页面的代码获取与访问者查找规则相匹配的图书,然后将这些图书显示给访问者。 搜索页面上的表单包含一个选择控件和一个文本控件。选择控件中的选项是用可搜索 的字段填充的: 需要用一个记录集来保存与访问者的查找规则相匹配的记录: set RSBooks = conn.Execute("select BookID, Author, Title, Subject from LibBooks where " _ & Request.Form("SearchField") & " Like '%" & Request.Form("SearchCriteria") & "%'")
表单处理脚本 在vote.htm中各项数据都填写完毕后,单击确定投票按钮,表单的数据就被提交, 本次评优共有4个候选人,但只能选两个。故用复选框。 投票的有效性通过是否是本校学生,且是否投过票来判断。 if request("passno")<>"" then sql="select * from stud where password="&"'"&request("passno")&"'" &"and yitu=0" set rs=cn.execute(sql) if rs.eof then%> <h2 align=center><%response.write"你无权投票"%></h2> 本设计允许少选,不允许多选。通过判断Vote投票界面传递过来的复选按纽值的长度看是否多选。 vo=request("cand") if len(vo)>4 then%> <h2 align=center><%response.write "多选了,无效"%></h2>
然后根据所投的票将对应候选人的投票结果字段加1,同时将该投票人的已投字段置为1。 sqq="update stud set yitu=1 where password="&"'"&request("passno")&"'" cn.execute(sqq) if instr(vo,"1") then cn.execute("update stud set result=result+1 where name='李宁'") end if if instr(vo,"2") then
cn.execute("update stud set result=result+1 where name='杨兰'") end if if instr(vo,"3") then cn.execute("update stud set result=result+1 where name='江道明'") end if if instr(vo,"4") then cn.execute("update stud set result=result+1 where name='段启文'") end if%> 显示当前投票情况show.asp 由于投票处理页面已经完成了绝大部分的工作,所以 显示结果页面就很简单了,其功能是从 Stud表文件中读取候选人所得票数,显示在页面上。 页面显示如图
显示投票时,我们采用了while循环,把候选人及其得票数,整齐地显示在一个表格中,这种技术在数据库查询结果的显示中也经常用到。代码如下: <%while not hs.eof %> <tr> <td width="100%"><center> <font color="#8000ff"><big> <%=hs("name")&" "&hs("result")&"票"%> </big> </font> </center> </td> </tr> <%hs.movenext%> <%wend%> 3.4达级考试在线查分系统与计数器的制作 3.4.1功能: 它提供了在线查看成绩。考生可以在网上使用这一系统,通过输入准考证编号来查询达级考试的结果。 3.4.2数据表的设计 与评优系统共用STUd表,表设计同上。 3.4.3界面设计与重点难点代码的设计 该模块需要查询者输入准考证号后来查看结果。若ID1不为空时,表示有表单输入,开始查询数据库。使用 SELECT的SQL指令查询数据库的数据。先设定SQL指令,查询ID符合准考证编号Request.Form("ID1")的数据,下个“Execute”指令,即可开始执行存取、查询数据的动作了。并将查询结果储存到Recordsets组件RS中。 IF Request.Form("ID1")<>"" THEN Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open("FILEDSN=c:\Program Files\Common Files\ODBC\Data Sources\ms access database.dsn") SQL = "SELECT name,id,score FROM stud WHERE id='" & Request.Form("ID1") & "'" Set RS = Conn.Execute(SQL)
若考试通过,则显示考试的结果,包括姓名、准考证编号、总分和考试结果,分别由RecordSets 组件的RS(0)、RS(1)、RS(2)、RS(3)得到。FS.Field.Count表示RecordSets组件的域的总数,由“for I=0 to RS.Fields.count-1”,取得RS(I)各域的数据。配合 <Table> 表格的HTML语法,将结果填入表格的各单元格中。 若还有下一个数据,就使用RS.MoveNext 移到下一个位置。
3.4.4页面访问计数器的制作 利用文件处理组件FILESYSTEM的强大功能来制作,比用Application对象计数器要好,Application计数器当有20分钟没有人连上该网页或关机时,计数器会被归零。而文件计数器却不会因时间而消失。我用Count.txt存放访问人次。代码如下: whichfile=server.mappath("pic\count.txt") set myfile=server.createobject("scripting.filesystemobject") 创建一个 set thisfile=myfile.opentextfile(whichfile) 组件对象
visit=thisfile.readline thisfile.close 读取计数器数据文件Count.txt中的计数数据 visit=visit+1 记录自加一次 length=len(visit) for i=1 to length response.write "<img src="&mid(visit,i,1)&".jpg></img>" 将记录的数据用图片显示出来 next set thisfile=myfile.createtextfile(whichfile,1) 将新计数数据写入文件thisfile.writeline(visit) set myfile=nothing 数字图片我利用PHOTOSHOP中的文字特效制作了9个立方数字:
等
四.系统的使用说明与安装 4.1运行环境要求 Windows98 Personal Web Server 3.0(PWS) Microsoft? Access 2000 (9.0.2812)
4.2安装设置 A. 将本网站拷贝到硬盘上的某一目录下,如:拷贝至c:\y1下。 B. 运行PWS,将默认的Web站点主目录设置为该目录,如上例应为c:\y1; 具体步骤: a. 选择“高级”项; b. 单击“编辑属性”按钮,在出现的“编辑属性”对话框中的“目录”项中填入“c:\y1”,其他不变,确定;