用ASP+Access制作论坛教程

80酷酷网    80kuku.com

  access|asp+|教程

  在网上介绍如何编写制作论坛的文章不少,但据我观察大多数的代码都有不同程度的错误,会误导大家。所以我写这篇文章的目的就是把经过我测试成功的代码与思路提供给大家。下面就让我们从数据库的建立开始:

  用access建立数据库:

  首先我们要建立一个存放帖子的数据库,在这里我介绍用access2000建立数据库的方法。

  我们先要建立一个名为news.mdb的数据库文件,然后在其中点“新建”选择“设计视图”建立两个表,一个名为details用来存放回复,另一个名为titles用来存放主题如图:

  制作过程详解:

  在titles中建立以下字段,如图:

  注意:

1 右键单击“titleID”选择“主键”,出现钥匙图形。
2 这里的“shu”不可以改为“number”否则会出现错误,王国容的那本《asp & web 数据库》中就犯了这样的错误。
3 将“日期/时间”类型的字段的默认值都设为now()

  在titles中建立以下字段,如图:

  将“日期/时间”类型的字段的默认值都设为now()。建立完成后,要设置这两个表的关联。点击 按钮,出现如下对话框:

  将titles中的titleID拖至details中的titleID上松手,出现如下对话框:(如图设置)

  然后保存就可以了。这样一个提供储存的数据库就建立好了。接下来我们要编写asp程序了。首先让我们先来分析论坛所需要的功能。大概需要以下几个功能:

1显示主题
2发布主题
3显示回复
4发布回复

  于是,我们根据这些功能,需要编写6个asp文件:
  title.asp、titlenew.asp、titleout.asp、detail.asp、detnew.asp、detout.asp
  还有一个文件是必需的(在我的程序中)adovbs.inc,它提供程序中的常数值如:“adopenstatic”。()每个文件的代码:

  title.asp:

<%LANGUAGE="VBSCRIPT" CODEPAGE="CP_ACP"%>
<!--#include virtual="adovbs.inc"-->
<!--#include file="titleout.asp"-->
<%
    const head="我的论坛"
    dbpath=server.MapPath("news.mdb")
    set conn=server.CreateObject("adodb.connection")
    conn.open"driver={Microsoft Access Driver (*.mdb)};dbq="&dbpath
    sql="select titleID,createdate as 主题发布时间,lastnewsdate as 最后回复时间,name as 作者,shu as 回复篇数,subject as 主题 from titles order by lastnewsdate desc"
    set rs=server.CreateObject("adodb.recordset")
    rs.open sql,conn,adopenstatic
%>
<html>
<head>
<title><%=head%></title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
body { font-family: "宋体"; font-size: 12px}
table { font-family: "宋体"; font-size: 12px}
a:link { font-family: "宋体"; font-size: 12px; color: #000000; text-decoration: none}
a:visited { font-family: "宋体"; font-size: 12px; color: #666666; text-decoration: none}
a:hover { font-family: "宋体"; font-size: 12px; color: #ff3300; text-decoration: underline}
-->
</style>
</head>
<body>
<!--输出主题-->
<% 
           rs.pagesize=10
           page=clng(request("page"))
           if page<1 then page=1
           if page>rs.pagecount then page=rs.pagecount
%>
<form action="title.asp" method="get">
    <table border="0" cellpadding="0" cellspacing="0" width="90%">
       <tr>
           <td align="right" width="100%">
    <%
       if page<>1 then
           response.Write("<a href=title.asp?page=1>第一页</a> ")
           response.Write("<a href=title.asp?page="&(page-1)&">上一页</a> ")
       end if
       if page<>rs.pagecount then
           response.Write("<a href=title.asp?page="&(page+1)&">下一页</a> ")
           response.Write("<a href=title.asp?page="&rs.pagecount&">最后一页</a> ")
       end if
    %>
    转到第<input type="text" name="page" size="3">页 
    页码:<font color="#FF0000"><%=page%></font>/<font color="#FF0000"><%=rs.pagecount%></font>
           </td>
       </tr>
    </table>
</form>
<center>
<table border="0" bgcolor="#999999" cellpadding="3" cellspacing="1" width="780">
    <tr bgcolor="#00FFFF">
       <td height="18" width="150" align="center">主题发布时间</td>
       <td height="18" width="350" align="center">主题</td>
       <td height="18" width="100" align="center">作者</td>
       <td height="18" width="30" align="center">回复</td>
       <td height="18" width="150" align="center">最后回复时间</td>
    </tr>
<%
    On Error Resume Next
    rs.absolutepage=page
    for i=1 to rs.pagesize
       titleoutput rs
       rs.movenext
       if rs.eof then exit for
    next
%>
</table>
</center>
<form action="title.asp" method="get">
    <table border="0" cellpadding="0" cellspacing="0" width="90%">
       <tr>
           <td align="right" width="100%">
    <%
       if page<>1 then
           response.Write("<a href=title.asp?page=1>第一页</a> ")
           response.Write("<a href=title.asp?page="&(page-1)&">上一页</a> ")
       end if
       if page<>rs.pagecount then
           response.Write("<a href=title.asp?page="&(page+1)&">下一页</a> ")
           response.Write("<a href=title.asp?page="&rs.pagecount&">最后一页</a> ")
       end if
    %>
    转到第<input type="text" name="page" size="3">页 
    页码:<font color="#FF0000"><%=page%></font>/<font color="#FF0000"><%=rs.pagecount%></font>
           </td>
       </tr>
    </table>
</form>
<!--下面为输入表单-->
<form action="titlenew.asp" method="post">
    <center>
       <table border="0">
           <tr>
              <td>姓名:</td>
              <td><input type="hidden" size="30" name="name" value="<%=session("name")%>"><%=session("name")%></td>
           </tr>
           <tr>
              <td>信箱:</td>
              <td><input type="text" size="30" name="Email" value="<%=session("Email")%>"></td>
           </tr>
           <tr>
              <td>主题:</td>
              <td><input type="text" size="60" name="subject"></td>
           </tr>
           <tr>
              <td>内容:</td>
              <td><textarea name="words" rows="8" cols="60"></textarea></td>
           </tr>
           <tr>
              <td align="center" colspan="2"><input type="submit" value="提交">
               <input type="reset" value="清空"></td>
           </tr>
       </table>
    </center>
</form>
</body>
</html>

titlenew.asp:


<%LANGUAGE="VBSCRIPT" CODEPAGE="CP_ACP"%>
<!--#include virtual="adovbs.inc"-->
<%
    dbpath=server.MapPath("news.mdb")
    set conn=server.CreateObject("adodb.connection")
    conn.open"driver={Microsoft Access Driver (*.mdb)};dbq="&dbpath
    name=request("name")
    Email=request("Email")
    subject=request("subject")
    words=request("words")
    if subject="" or words="" or name="" or Email="" then
       outputmsg="字段不能为空,请填写完整信息!"
    else
       set rs=server.CreateObject("adodb.recordset")
       rs.open "titles",conn,adopendynamic,adlockpessimistic
       rs.addnew
           rs("name")=name
           rs("Email")=Email
           rs("subject")=subject
           rs("words")=words
           rs("shu")=0
       rs.update
       outputmsg="您的主题已加入!"
       session("name")=name
       session("Email")=Email
    end if
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="refresh" content="3;URL=title.asp">
</head>
<body>
<%=outputmsg%>
</body>
</html>

titleout.asp:


<%
    sub titleoutput(rs)
%>
    <tr bgcolor="#ffffff">
       <td valign="top" height="18"><%=rs("主题发布时间")%></td>
       <td valign="top" height="18"><a href="detail.asp?titleID=<%=rs("titleID")%>"><%=rs("主题")%></a></td>
       <td valign="top" height="18"><%=rs("作者")%></td>
       <td valign="top" align="right" height="18"><%=rs("回复篇数")%></td>
       <td valign="top" height="18"><%=rs("最后回复时间")%></td>
    </tr>
<%
    end sub
%>

detail.asp


<%LANGUAGE="VBSCRIPT" CODEPAGE="CP_ACP"%>
<!--#include file="detout.asp"-->
<%
    if not session("passed") then
       response.Redirect("title.asp")
    end if
%>
<%
    dbpath=server.MapPath("news.mdb")
    set conn=server.CreateObject("adodb.connection")
    conn.open"driver={Microsoft Access Driver (*.mdb)};dbq="&dbpath
    titleID=request("titleID")
    set rs=conn.execute("select * from titles where titleID="&clng(titleID))
    if rs.eof then
       response.Redirect("title.asp")
    else
       sql="select * from details where titleID="&clng(titleID)&" order by detailID desc"
       set rsdetail=conn.execute("select * from details where titleID="&clng(titleID)&" order by detailID")
    end if
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
    words=replace(" "&rs("words"),chr(13),"
")
    Email="<a href="">"
%>
<center>
    <table>
       <tr>
           <td>作者:<%=rs("name")%></td>
           <td>Email:<%=Email%></td>
           <td>时间:<%=rs("createdate")%></td>
       </tr>
       <tr>
           <td colspan="3">主题:<%=rs("subject")%></td>
       </tr>
       <tr>
           <td colspan="3"><%=words%></td>
       </tr>
    </table>
</center>
<%
    while not rsdetail.eof
       detailoutput rsdetail
       rsdetail.movenext
    wend
%>
<center>发表回复</center>
<form action="detnew.asp" method="post">
    <input type="hidden" name="titleID" value="<%=Request("TitleID")%>">
    <center>
       <table border="0">
           <tr>
              <td>姓名:</td>
              <td><input type="text" size="30" name="name" value="<%=session("name")%>"></td>
           </tr>
           <tr>
              <td>信箱:</td>
              <td><input type="text" size="30" name="Email" value="<%=session("Email")%>"></td>
           </tr>
           <tr>
              <td>主题:</td>
              <td><input type="text" size="60" name="subject"></td>
           </tr>
           <tr>
              <td>内容:</td>
              <td><textarea name="words" rows="8" cols="60"></textarea></td>
           </tr>
           <tr>
              <td align="center" colspan="2"><input type="submit" value="提交">
               <input type="reset" value="清空"></td>
           </tr>
       </table>
    </center>
</form>
<center><a href="title.asp">返回主题页</a></center>
</body>
</html>

detnew.asp


<" CODEPAGE="CP_ACP"%>
<!--#include virtual="adovbs.inc"-->
<%
    dbpath=server.MapPath("news.mdb")
    set conn=server.CreateObject("adodb.connection")
    conn.open"driver={Microsoft Access Driver (*.mdb)};dbq="&dbpath
    titleID=request("titleID")
    name=request("name")
    Email=request("Email")
    subject=request("subject")
    words=request("words")
    if subject="" or words="" or name="" or Email="" then
       outputmsg="字段不能为空,请填写完整信息!"
    else
       set rs=server.CreateObject("adodb.recordset")
       rs.open "details",conn,adopendynamic,adlockpessimistic
       rs.addnew
           rs("name")=name
           rs("Email")=Email
           rs("subject")=subject
           rs("words")=words
           rs("titleID")=titleID
       rs.update
       outputmsg="您的回复已加入!"
       session("name")=name
       session("Email")=Email
      sql="update titles set lastnewsdate=now(),shu=shu+1 where titleID="&clng(titleID)    
       conn.execute(sql)
    end if
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="refresh" content="1;URL=detail.asp?titleID=<%=titleID%>">
</head>
<body>
<center><%=outputmsg%></center>
</body>
</html>

detout.asp


<%
    sub detailoutput(rs)
       words=replace(server.HTMLEncode(" "&rs("words")),chr(13),"
")
       words=replace(words," "," ")
       Email="<a href="">"
%>
<center>
    <table>
       <tr>
           <td>作者:<%=rs("name")%></td>
           <td>Email:<%=Email%></td>
           <td>时间:<%=rs("newdate")%></td>
       </tr>
       <tr>
           <td colspan="3">主题:<%=rs("subject")%></td>
       </tr>
       <tr>
           <td colspan="3"><%=words%></td>
       </tr>
    </table>
</center>
<%
    end sub
%>

这个程序只是一个简单的范例,还有许多功能没有加入,只是给大家作为参考。

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: