第11章网络程序开发实例书店BBS论坛.ppt
第11章 网络程序开发实例书店BBS论坛,11.1 书店BBS论坛设计 11.2 书店BBS论坛的实现,本章主要介绍网络程序开发实例书店BBS论坛。通过本章的学习,读者应该掌握以下内容: 书店BBS论坛设计 书店BBS论坛的实现,11.1 书店BBS论坛设计,本章通过一个简单的BBS例子,完成的主要功能包括发表新文章、回复文章,并且可以统计单击次数和回复文章次数。通过学习读者主要应体会BBS的设计思想。,11.2 书店BBS论坛的实现,BBS论坛实现主要包括8个文件,它们分别如下。 bbs.mdb:数据库文件,用来存储文章信息。 index.asp:BBS首页,分页显示文章信息。, odbc_conn.asp:连接数据文件。 function.asp:子程序文件。 count_hit.asp:计算单击次数的文件。 part.asp:显示文章的具体内容文件。 announce.asp:发表新文章文件。 re_announce.asp:发表回复文章文件。,1数据库文件bbs.mdb 为了保存信息,就要建立数据库,在Access建立数据库文件bbs.mdb,并建立一个表bbs,数据结构如图11-1所示。,图11-1 bbs数据结构,2BBS首页文件index.asp 首页的任务是显示数据库中的文章,并提供发表新文章的超链接。,% dim sql,rs '因为要分页显示查询结果,所以用下面方法创建一个recordset对象 sql=“select * from bbs 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=10 '每页显示10条记录,if Request(“page_no“)=“ then '如果第一次打开,则page_no为1,否则,由传回的参数决定 page_no=1 else page_no=cint(Request(“page_no“) end if,session(“page_no“)=page_no '将page_no存入session,以备其他页返回时用 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 j0 '循环知道当前页结束或文件结尾 i=i+1 j=j-1 %,3数据库连接文件odbc_conn.asp 数据库连接文件的任务是完成连接数据库的操作。 % '连接BBS数据库 dim db,connstr connstr=“DBQ=“,set db=Server.CreateObject(“ADODB.connection“) db.Open connstr %,4自定义函数文件function.asp % private sub select_page(page_no,total_page) response.write “请选择页码:“ dim i for i=1 to total_page if i=page_no then response.write i & “ “,else response.write “ & i & “ “ end if next end sub %,5计算单击次数文件count_hits.asp % dim bbs_id bbs_id=request(“bbs_id“),'下面一段将点击次数加1,然后引导至part.asp以显示内容 sql=“update bbs set hits=hits+1 where bbs_id=“ & bbs_id '更新次数 db.execute(sql) db.close response.redirect “part.asp?bbs_id=“ & bbs_id %,6显示具体内容文件part.asp '以下显示当前记录内容 dim sql,rs sql=“select * from bbs where bbs_id =“ & bbs_id set rs=db.execute(sql) %,'以下显示所有回复文章内容 sql=“select title,body,user_name,submit_date from bbs where“ sql=sql & “ parent_id=“ & bbs_id '这个条件是为了显示所有回复的文章 sql=sql + “ order by submit_date desc“ set rs=db.execute(sql),dim I '这个变量是为了给回复的文章编号 I=0 DO WHILE NOT RS.EOF I=I+1 %,7发表新文章文件announce.asp 发表新文章 发表新文章,“ and request(“user_name“)“ then dim title,body,layer,parent_id,child,hits,ip,user_name '定义变量方便使用 title=request.form(“title“) '返回文章标题 body=request.form(“body“) '返回文章内容,user_name=request.form(“user_name“) '返回作者姓名 layer=1 '这是第一层 parent_id=0 '因为是第一层,父编号设为0 child=0 '回复文章数目为0 hits=0 '点击数为0,ip=Request.ServerVariables(“remote_addr“) '作者IP地址 '以下将文章保存到数据库 dim sql,svalues SQL = “Insert into bbs(title,layer,parent_id,child,hits,ip,user_name,submit_date“ svalues = “values('“ & title & “',“ & layer & “,“ & parent_id & “,“ &child & “,“ & hits & “,'“ & ip & “','“ & user_name & “','“ & date() & “'“,if body“ then '如果有内容,则添加body字段 sql = sql & “,body“ svalues = svalues & “,“ & “'“ & body & “'“ end if sql = sql & “) “ & svalues & “)“ db.execute(sql) db.close '关闭connection对象,'保存完毕,重定向回首页 response.redirect “index.asp?page_no=“ & session(“page_no“) end if %,8回复文章文件re_announce.asp 回复文章 ,“ and request(“user_name“)“ then dim body,layer,parent_id,child,hits,ip,user_name '定义变量方便使用 title=request.form(“title“) '返回文章标题 body=request.form(“body“) '返回文章内容,user_name=request.form(“user_name“) '返回作者姓名 layer=2 '这是第二层 parent_id=bbs_id '因为是第二层,父编号为bbs_id child=0 '回复文章数目为0 hits=0 '点击数为0,ip=Request.ServerVariables(“remote_addr“) '作者IP地址 '以下将文章保存到数据库 dim sql,svalues sql = “Insert into bbs(title,layer,parent_id,child,hits,ip,user_name,submit_date“ svalues = “values('“ & title & “',“ & layer & “,“ & parent_id & “,“ &child & “,“ & hits & “,'“ & ip & “','“ & user_name & “','“ & date() & “'“,if body“ then sql = sql & “,body“ svalues = svalues & “,“ & “'“ & body & “'“ end if sql = sql & “) “ & svalues & “)“ db.execute(sql),'下面两句将原文章的回复数加1 sql=“update bbs set child=child+1 where bbs_id=“ & bbs_id db.execute(sql) db.close '重定向回原来页面 response.redirect “part.asp?bbs_id=“ & bbs_id end if %,