| 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就是一款大家所熟悉的网页制作工具。
|