?? 利用asp打造個性化論壇.txt
字號:
< tr bgcolor="#FFFFCC">
< td width="89%" height="21">主題</td>
< td width="11%" height="21">文章數</td>
< /tr>
< %
do
topicid=rs("id")
topicname=rs("標題")
sum=rs("文章數")
response.write "< tr>< td><a href=qtopic.asp?topicid=" & topicid& "&boardname=" & boardname& ">" & topicname &"< /a>< /td>"
response.write "< td>" &sum & "< /td>< /tr>"
rs.movenext
loop until rs.eof
%>
< /table>
< /body>
< /html>
注:qBoard.asp列出了某個版面下的所有的主題,在點擊了主題名稱后就會進入相應的主題文章列表。這個列表的是由qTopic.asp這個ASP腳本來實現的。Qtopic.asp的程序代碼在本質上幾乎和qBoard.asp沒有區別,只是在各自的細節上有所區別,這兒也不打算再多講了。
(4)在點擊了文章列表中的文章標題后,會進入文章內容瀏覽頁article.asp:
< %
articleid=request("articleid")
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver(*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = "按id查詢文章"
ReDim param(0) ' 聲明
param(0) = CLng(articleid) ' Cint 不可忽略
Set rs = cmd.Execute( ,param )
author=rs("作者id")
title=rs("標題")
data=rs("日期")
rate=rs("推薦度")
boardid=rs("看板id")
topicid=rs("主題id")
boardname=rs("看板名")
topicname=rs("主題名")
content=rs("內容")
content=replace(content,vbCrlf,"</p>< p>")
content="< p>" & content& "< /p>"
注:這是一個要注意的地方,在內容字段中包含的是備忘類型的文本,其中可以包含換行字符。在HTML的顯示中,必須要把換行字符(也就是vbCrlf常數)換成HTML的段落符號。這樣在段落與段落的銜接處,就不會打亂原來輸入時的格式。如果要設計的更好些,可以通過CSS來復位義< P>標簽,設定其test-indent屬性,就可以實現每段開頭空格了。
(5)把點擊次數加一
sql="Update 內容表 Set 點擊次數=點擊次數+1Where ID=" & articleid
conn.execute sql
注:這兒有一個SQL語句,沒當頁面被顯示的時候,會把相應的表中點擊次數字段加一,這樣就能夠對文章瀏覽的次數做出統計,并可按順序排名。在執行條語句的時候,我發現:本來在SQL語句中,嵌入的變量名應該加上單引號以與區別,但在這兒的articleid變量上我并沒有加單引號,居然也能夠通過,而我以前這樣寫從來都是會引發錯誤的,不知是不是由于新版本的ADO的緣故。
set cmd=nothing
%>
< html>
< head>
< title>Untitled Document< /title>
< meta http-equiv="Content-Type"content="text/html; charset=GB2312">
< /head>
< body bgcolor="#E9E9E4">
< table width="89%" border="0"cellspacing="0" cellpadding="0"align="center">
< tr bgcolor="#CCCCCC">
< td>作者:< font color="#FF3366"><a href="qauthor.asp?author=< %=author%>">< %=author%> < /a>< /font>發表日期:< font color="#FF3333"><%=data%>< /font>
看板:< font color="#FF3333"><a href="qboard.asp?boardid=< %=boardid%>">< %=boardname%>< /a>< /font>板主推薦:< font color="#FF3333">#rate#</font>< /td>
< /tr>
< tr bgcolor="#CCCCCC">
< td>標題:< font color="#FF3333"><%=title%>
主題:< a href="qtopic.asp?topicid=<%=topicid%>"> < %=topicname%>< /a> < /font>< /td>
< /tr>
< tr valign="top">
< td>
< hr>
< font color="#FF3366">文章內容:< /font>< br>
< br>
< font color=blue>< %response.writecontent%>< /font>
< br>
< br>
< /td>
< /tr>
< tr valign="top">
< td height="18">
< table width="50%" border="0"cellspacing="0" cellpadding="0"align="right" bgcolor="#CCCCCC">
< tr>
< td width="0%"> < /td>
<td width="65%">關于此話題<a href="submit.asp?topicid=< %=topicid%>&boardid=<%=boardid%>">發表評論< /a></td>
這個連接允許網友對此評論的話題發表自己的見解,這是下一個模塊要講的內容了,這兒且按下不表。
< /tr>
< /table>
< /td>
< /tr>
< /table>
< /body>
< /html>
< %
set rs=nothing
conn.close
set conn=nothing
%>
到此,文章顯示部分也完成了。下面再來看看文章發表部分是如何實現的。
3、構建文章發表部分
文章發表模塊只有兩個頁面,一個是前面提到的用來提供輸入窗體的submit.asp,還有一個是用來處理窗體輸入的subresult.asp。前面的那個頁面很簡單,基本上就是一個HTML窗體,沒有什么好講的,下面來看看subresult.asp的內容:
< html>
< head>
< title>發表文章< /title>
< meta http-equiv="Content-Type"content="text/html; charset=GB2312">
< /head>
< body bgcolor="#FFFFFF">
< %
author=request("author")
password=request("password")
topicid=request("topicid")
boardid=request("boardid")
content=request("content")
title=request("title")
注:這一段取出在submit.asp中提交的表但內容,放在相應的變量中。
< html>
< head>
< title>發表文章< /title>
< meta http-equiv="Content-Type"content="text/html; charset=GB2312">
< /head>
< body bgcolor="#FFFFFF">
< %
author=request("author")
password=request("password")
topicid=request("topicid")
boardid=request("boardid")
content=request("content")
title=request("title")
(1)查詢作者是否已存在
cmd.CommandText = "select * from 作者表where id='" & author &"'"
Set rs = cmd.Execute()
(2)檢查權限
cmd.CommandText = "select * from 作者表where id='" & author &"'"
Set rs = cmd.Execute()
注:這一段是對作者權限進行檢查,對于帳號不存在或者密碼錯誤做出相應的錯誤處理。在這兒可以看到response.end的用法,它是用來結束當前ASP腳本。結合if語句,可以對程序中的預期錯誤進行處理。在一個好的WEB應用中,錯誤處理是必不可少的。
(3)將資料中的單引號改成兩個單引號,并且在前后加上單引號
Function SqlStr( data )
SqlStr = "'" & Replace( data,"'", "''" ) & "'"
End Function
'寫入數據庫
sql = "Insert Into 內容表 (看板id,主題id,作者id,標題,內容)Values( "
sql = sql & SqlStr(topicid) & ","
sql = sql & SqlStr(boardid) & ","
sql = sql & SqlStr(author) & ","
sql = sql & SqlStr(title) & ","
sql = sql & SqlStr(content) & ")"
conn.Execute sql
%>
< h2>文章已經被發送到數據庫,當板主審閱后就可以看到了<h2>
< /body>
< /html>
到這兒,文章已經被保存在數據庫中了。但是,它并不能夠立刻被顯示出來,還需要版主的認可才行。下面,就來看看論壇的管理部分的內容。
4、論壇的管理部分
這兒是我們這個論壇的核心之所在,但它實現起來也沒有什么特別的地方。還是那些老東西:窗體處理,數據庫查詢,在用ASP把他們有機的結合起來。當進入了文章審閱模式(前面提到的板務處理)之后,最為首要的內容,應該是對版主的身份進行驗證了。下面來看看版主登陸頁面:
< %
boardid=request("boardid")
(注:boardid是由進入這個頁面的連接所傳遞過來的,是要進行板務處理的看板的ID。通過它才能知道處理的是那個板的板務。)
Set conn = erver.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = "板主密碼查詢"
ReDim param(0)
param(0) = CLng(boardid) //注:CLng 不可忽略
Set rs = cmd.Execute( ,param )
boardmanager=rs("板主")
set cmd=nothing
%>
< html>
< head>
< title>Untitled Document< /title>
< meta http-equiv="Content-Type"content="text/html; charset=GB2312">
< /head>
< body bgcolor="#FFFFFF">
< p>只有板主< %=boardmanager%>才能夠進入這個地方</p>
< p>請輸入驗證密碼, 并且為了保持身份驗證,請打開瀏覽器的Cookies。</p>
< form method="post" action="managerloginrest.asp">
< input type="password" name="password">
< input type="hidden" name="boardid"value=< %=boardid%>>
< input type="submit" name="Submit"value="確定">
< /form>
注:這個頁面僅僅是用來登陸用的,它得到斑竹輸入的密碼后,并不能進行驗證,而是將驗證的工作放到下一個頁面中進行。實際上,密碼輸入和驗證的工作是可以放在一個頁面中完成的,只不過程序代碼的結構安排上有點麻煩。
< /body>
< /html>
< %
set rs=nothing
conn.close
set conn=nothing
%>
現在得到了版主ID和輸入的密碼,下面就是進行驗證的工作managerloginrest.asp了,它接受上面那個文件中窗體的內容,并進行相關處理:
< %
response.buffer=true
注:把緩沖區設置為允許使用。這一條一般來說,是應該加在每個ASP頁面的首部的,這樣能夠提高ASP頁面的性能。在打開了緩沖區后,ASP中還有一些相應的特殊用法,在后面會提及。
boardid=request("boardid")
password=request("password")
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = "板主密碼查詢"
ReDim param(0) ' 聲明
param(0) = CLng(boardid)//注:CLng不可忽略
Set rs = cmd.Execute( ,param )
boardmanager=rs("板主")
if password< > rs("密碼")then %>
< html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -