教学前言
课程介绍
师资介绍
教材介绍
课程计划
教学大纲
教学计划
实训计划
课程总表
教学内容
作业考试
作业上传
在线测试
测验考试
互动讨论
学习论坛
疑难解答
意见建议
 
 
章节:
第7章 ASP开发实例
7.3 BBS论坛
重点:
这是一个相对比较复杂的ASP系统,了解其设计框架;ASP+Access技术;分页显示的运用
难点:
分页显示的运用
内容:

re_article.asp用于回复文章,re_article.asp中的表单元素见表7-2。

表7-2 re_announce.asp中的表单元素
名称
类型
说明
title text文本框 回复:<%=title%> 转递过来的欲回复文章的标题
articlebody textarea文本区 用户填写 回复内容
name text文本框 用户姓名 回复者的姓名
submit submit 提交 提交表单

re_article.asp代码如下:
<!--#include file="conn_db.asp"-->
<html><head>
<title>回复文章</title>
</head><body>
<%
id=request("id") ' 获得欲回复文章编号
title=request("title") ' 获得欲回复文章标题
%>
<h4 align="center">回复文章</h4>
<center>
<table border="0" width=400>
<form method="post" action="" name="form1" >
<tr><td>标题:</td><td>
<input type="text" name="title" size="42" value="re:<%=title%>">** </td></tr>
<tr><td>内容:</td><td>
<textarea name="articlebody" rows="4" cols="41" wrap="soft"></textarea>**</td></tr>
<tr><td>姓名:</td><td>
<input type="text" name="name" size="11"> </td></tr>
<tr><td></td><td><input type="submit" value="提交" size="20"></td></tr>
</form>
</table>
</center>
<p align=center><a href="article.asp?id=<%=id%>">返回文章页</a>
<%
if request("title")<>"" and request("articlebody")<>"" then
layer=2 ' 因为是回复文章,所以这是第二层
parent_id=id ' 因为是第二层,上一级编号为id
re_num=0 ' 回复数为0
hit_num=0 ' 浏览数为0
' 将文章保存到数据库
db.Execute " insert into article(title,articlebody,name,layer,parent_id,re_num,hit_num,submit_date) values (" _
& "'" & Request.Form("title") &"', " _
& "'" & Request.Form("articlebody") &"', " _
& "'" & Request.Form("name") &"', " _
& "" & layer &", " _
& "" & parent_id &", " _
& "" & re_num &", " _
& "" & hit_num &", " _
& "'" & date() & "') "
' 将原文章的回复数加1
sql="update article set re_num=re_num+1 where id=" & id
db.execute(sql)
db.close ' 关闭连接对象
' 保存完毕,重定向回article.asp
response.redirect "article.asp?id=" & id
end if
%>
</body></html>
 点击浏览publish.asp运行效果参见本平台《学习论坛》re_article.asp。
adminlogin.asp用于管理员登录,进行身份验证。表单元素见表7-3。

表7-3 adminlogin.asp的表单元素
名称
类型
说明
name text文本框 用户姓名 管理员姓名
password password文本框 用户填写 密码
submit submit 验证 提交表单

adminlogin.asp代码如下:
<!--#include file="conn_db.asp"-->
<html>
<head>
<title>管理员登录</title>
</head>
<body>
<div align="center">
<table width="200" border="0">
<form method="POST" action="">
<tr><td height="25">
用户:<input type="text" name=Name size=15> </td>
</tr><tr>
<td height="25">密码:<input type="password" name=Password size=15></td>
</tr><tr>
<td height="25"><p align="center"><input type="submit" value="登录">
</td></tr>
</table></div></form>
<%
' trim的作用是去除用户不慎输入的开头与结尾处的空格
name=trim(Request.Form("name"))
Password=trim(Request.Form("Password"))
Sql ="Select * From admin where name='" & name & "' and password='" & password & "'"
Set rs=db.Execute(Sql)
' 查对记录,非空则表示正确,然后引导到admin.asp
If not rs.bof and not rs.eof then
Session("name") = rs("name") ' 将登录名存储到Session
Response.Redirect "admin.asp"
Else
%>
<center>
<%
Response.Write "请输入正确的用户名和密码!"
End If
%></center>
</body>
</html>
adminlogin .asp效果如图所示。
说明:
▲ 管理员输入用户名和密码,系统对数据库进行检索,以确认输入的管理员用户名和密码是否正确。用户正确输入后,其用户名存储在Session("name")中,以备管理页面调用。
▲ 用户在表单文本框里输入用户名和密码时,有可能不慎输入了空格,trim的作用就是去除用户不慎输入的开头与结尾处的空格。
▲ 密码输入框的type应该设为password。
▲ Session("name") = rs("name")
Session对象可以存储特定用户会话所需的信息。利用Session对象存储用户名,以备其他页面调用。
admin.asp是管理页面,这里只设计了简单的管理功能,即删除某篇源文章,其代码如下:
<!--#include file="conn_db.asp"-->
<%
' 如果用户没有经过登录直接进入此页面,将引导至登录页
if isempty(Session("name")) then
Response.Redirect "adminlogin.asp"
end if
' 按所选择的文章ID号删除文章
if not IsEmpty(Request.Form("del")) then ' 如果选择了文章
if not IsEmpty(Request.Form("delete")) then ' 如果单击了删除按钮
' 根据所选文章的ID号执行删除操作
db.Execute "delete from article where ID = " & Request.Form("del")
end if
end if
%>
<html><head>
<title>删除文章</title>
</head><body>
<h4 align="center">删除文章</h4><center>
<FORM ACTION="" METHOD=POST>
<table width="600" border="1" bordercolor="#000000" style="border-collapse: collapse" cellpadding="0" cellspacing="0">
<tr align="center">
<td width="37" bgcolor="#C0C0C0">选择</td>
<td width="37" bgcolor="#C0C0C0">序号</td>
<td width="224" bgcolor="#C0C0C0">标题</td>
<td width="58" bgcolor="#C0C0C0">回复数</td>
<td width="60" bgcolor="#C0C0C0">浏览数</td>
<td width="80" bgcolor="#C0C0C0">作者</td>
<td width="74" bgcolor="#C0C0C0">发言时间</td>
</tr>
<%
dim sql,rs
sql="select * from article where layer=1 order by submit_date desc"
set rs=Server.CreateObject("ADODB.Recordset")
rs.Open sql,db,1
if not rs.bof and not rs.eof then
dim page_size
dim page_no
dim page_total
page_size=6
if Request("page_no")="" then
page_no=1
else
page_no=Request("page_no")
end if
session("page_no")=page_no
rs.pagesize=page_size
page_total=rs.pagecount
rs.absolutepage=page_no
dim i,j
i=0
j=page_size
do while not rs.eof and j>0
i=i+1
j=j-1
%>
<tr align="center">
<td width="37"><input type=radio name=del value=<%=rs("ID")%>><td width="37">
<%=(page_no-1)*page_size+i%>  <td width="224"><a href="hit_num.asp?id=<%=rs("id")%>"><%=rs("title")%></a> </td>
<td width="58"><%=rs("re_num")%> </td>
<td width="60"><%=rs("hit_num")%> </td>
<td width="80"><%=rs("name")%> </td>
<td width="74"><%=rs("submit_date")%> </td>
</tr>
<%
rs.movenext
loop
end if
%>
</table>
<p align="center">
[本页是第<%=page_no%>/<%=page_total%>页]
<% if int(page_no)>1 then %>
[<a href="sdbbsindex.asp?page_no=<%=cstr(int(page_no)-1)%>">上一页</a>]
<% end if%>
<% if int(page_no)<int(page_total) then %>
[<a href="admin.asp?page_no=<%=cstr(int(page_no)+1)%>">下一页</a>]
<%end if%><input type=submit name="Delete" value="删除"></p>
</FORM>
</p>
</center>
</body></html>
说明:
▲ 本页面的代码很大一部分跟sdbbsindex.asp一样,用于分页显示文章标题。
▲ if isempty(Session("name")) then,页面的开头部分加了一段验证用户是否登录的代码,目的是防止有人不经过登录而通过指定URL的方式直接进入管理页面。在adminlogin.asp,用户正确登录后,其用户名存放在Session("name")中,因此可以通过检查Session("name")是否为空的方法判断用户是否正确登录。if isempty(Session("name")) then也可以换成我们前面熟悉的写法if Session("name")=""then,ASP代码的书写是比较灵活多样的。
▲ 根据表单中单选按钮来选择要删除的文章,并且由它传递要删除文章的ID号。
▲ 为简单起见,本实例论坛的管理只有一个删除功能,其实论坛的管理功能还可以设计的更加强大和完善。
以上几例所介绍是采用手工方式编写ASP程序,我们也可以借助一些网页制作工具帮助我们轻松准确地设计制作ASP系统,提高编写效率。Dreamweaver MX就是一款大家所熟悉的网页制作工具。


实训作业:

1、完善实例2论坛,增加用户注册功能。
2、完善实例2论坛,增加使用关键字检索文章功能。
3、完善实例2论坛,增加文章修改功能,即用户能对自己所发表的文章进行修改操作。
4、参考实例2,加以修改把它转换成一个网上新闻发布系统。

 
备注:
ASP安全程序下载

本实例具体效果参见本平台《学习论坛》栏目。

    

~ 江西信息应用技术职业学院信息技术系制作 ~

E-Mail:lxlz2050@163.net Tel:0791-5275546