• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

    如何用DW設(shè)計論壇

    來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 08:04:44
    文檔

    如何用DW設(shè)計論壇

    如何用DW設(shè)計論壇:前言:現(xiàn)在網(wǎng)上的論壇到處都有,但不知您是否碰到過這樣的情況:在雜亂無章的討論信息中來尋找自己想要的內(nèi)容,是一件很費費時費力的事情,到后來,您就都不想去看什么論壇了。那么我們能不能對自己網(wǎng)站論壇的內(nèi)容增加審核功能呢?即任何網(wǎng)友發(fā)到論壇的文章
    推薦度:
    導(dǎo)讀如何用DW設(shè)計論壇:前言:現(xiàn)在網(wǎng)上的論壇到處都有,但不知您是否碰到過這樣的情況:在雜亂無章的討論信息中來尋找自己想要的內(nèi)容,是一件很費費時費力的事情,到后來,您就都不想去看什么論壇了。那么我們能不能對自己網(wǎng)站論壇的內(nèi)容增加審核功能呢?即任何網(wǎng)友發(fā)到論壇的文章

    前言:現(xiàn)在網(wǎng)上的論壇到處都有,但不知您是否碰到過這樣的情況:在雜亂無章的討論信息中來尋找自己想要的內(nèi)容,是一件很費費時費力的事情,到后來,您就都不想去看什么論壇了。那么我們能不能對自己網(wǎng)站論壇的內(nèi)容增加審核功能呢?即任何網(wǎng)友發(fā)到論壇的文章


      前言:現(xiàn)在網(wǎng)上的論壇到處都有,但不知您是否碰到過這樣的情況:在雜亂無章的討論信息中來尋找自己想要的內(nèi)容,是一件很費費時費力的事情,到后來,您就都不想去看什么論壇了。那么我們能不能對自己網(wǎng)站論壇的內(nèi)容增加審核功能呢?即任何網(wǎng)友發(fā)到論壇的文章,并不立即被顯示出來,必須經(jīng)過站長或版主審閱之后,認(rèn)為有價值,有必要推薦給其他網(wǎng)友的,就發(fā)表出來。否則就刪掉了,免得浪費空間,搞得有點像精華區(qū)的意味,這樣您的論壇比起一般的論壇來,能夠提供給為明確有益的內(nèi)容。放到您的網(wǎng)站上,應(yīng)該能夠吸引更多的網(wǎng)友來訪問。這個設(shè)想當(dāng)然能夠?qū)崿F(xiàn),下面我就簡單介紹如何制作。

      注:由于本文適用于對ACCESS數(shù)據(jù)庫、HTML、ASP有一定了解的讀者。

      一、論壇結(jié)構(gòu)分析

      通過上面的功能需求分析,我們能夠?qū)⒄搲闹谱鞣譃樗拇蟛糠郑?br />
      (1) 網(wǎng)友注冊和管理模塊:因為引入了站長或版主,在論壇中就必須能夠?qū)ζ溥M(jìn)行身份驗證。這個模塊的功能,就是管理注冊的網(wǎng)友,并能夠提供相關(guān)的查詢。比如,查詢指定作者的任何發(fā)表的文章,查詢當(dāng)前發(fā)表文章最多的十個網(wǎng)友,等等。假如您的論壇不是很大,這個模塊能夠省略為只帶有版主身份驗證的功能,而去掉那些關(guān)于注冊,查詢的部分。

      (2) 文章顯示模塊:顯示任何版主審核過的,覺得值得推薦的文章。

      (3) 發(fā)表文章模塊:為注冊網(wǎng)友提供發(fā)表見地的地方,發(fā)表后等待版主審閱。

      (4) 文章審閱模塊:版主對任何網(wǎng)又發(fā)表但未經(jīng)審閱的文章進(jìn)行處理,已決定是發(fā)表還是刪除。

      了解了具體的功能需求后,就能夠按模塊的開始論壇的設(shè)計了。當(dāng)然,這些模塊的只是在功能上對論壇結(jié)構(gòu)的劃分,實際上并不能夠完全的把他們單獨出來進(jìn)行設(shè)計。對于這種較小的應(yīng)用,也沒有必要進(jìn)行完全的模塊化設(shè)計,在良好的規(guī)劃下直接寫程式代碼或許來的更為簡單一些。

      對于論壇實現(xiàn)起來有一般兩種方法:用文檔或數(shù)據(jù)庫。相對而言,用數(shù)據(jù)庫要簡單高效一些,能夠?qū)φ搲M(jìn)行更好的控制,也能夠?qū)Y料提供一些驗證和保護(hù)。這兒我使用的是ACCESS數(shù)據(jù)庫,對于一般的中小型的應(yīng)用,ACCESS應(yīng)該是能夠勝任的。

      從上面的分析能夠知道應(yīng)該有四個表,下面我給出每個表的結(jié)構(gòu)。

      (1)作者表(用來存放作者訊息):

      ID:

      文本類型,必填。是網(wǎng)友代號。

      密碼:

      文本類型,必填。

      昵稱:

      文本類型,必填。

      EMAIL: 文本類型,必填。

      職務(wù):

      數(shù)字類型,必填。-1代表普通網(wǎng)友,0代表站長。大于0的數(shù)字代表版主。

      文章數(shù):數(shù)字類型,必填。網(wǎng)友發(fā)表的文章總數(shù)。

      姓名:

      文本類型,可選。

      性別:

      文本類型,可選。

      電話:

      文本類型,可選。

      (2)內(nèi)容表(用來存放具體文章內(nèi)容和相關(guān)訊息):

      ID:自動編號,并為其配置索引,以加快搜尋的速度。

      看板ID:數(shù)字類型,來自看板列表,表示文章所屬看板。

      主題ID:數(shù)字類型,來自主題表,表示文章所屬主題。

      作者ID:文本類型,來自作者表,表示文章的作者。

      日期:日期/時間類型,預(yù)置初值為函數(shù)NOW(),自動取系統(tǒng)當(dāng)前時間為其值。

      標(biāo)題:文本類型。文章的標(biāo)題。

      發(fā)表:是/否類型,為"真"時表示文章已通過審閱,能夠發(fā)表;為"否"表示文章尚待審閱。

      推薦度:數(shù)字類型,文章的推薦程度。

      內(nèi)容:備注類型,文章的具體內(nèi)容。

      點擊次數(shù):數(shù)字類型,文章的點擊次數(shù)。

      (3)看板列表(用來存放有關(guān)看板的訊息):

      ID:自動編號,同樣的,也為其配置了索引。

      名稱:文本類型,看板的名稱。

      板主:文本類型,看板版主的ID。

      主題數(shù):數(shù)字類型,看板中包含的主題數(shù)。

      (4)主題表(用來存放有關(guān)主題的訊息):

      ID:自動編號,并為其配置索引。

      標(biāo)題:文本類型,表示主題名。

      看板:數(shù)字類型,來自看板列表,表示主題所屬的看板。

      文章數(shù):數(shù)字類型,主題中包含的文章數(shù)。

      任何的表是設(shè)計完了,但是數(shù)據(jù)庫的設(shè)計并沒有完,所以我們還需要建立表間關(guān)系,這樣就能夠讓數(shù)據(jù)庫執(zhí)行一些相關(guān)性檢查,避免資料出錯。建立表間關(guān)系的另外的一個好處,就是通過他能夠很容易的建立出復(fù)雜的JOIN查詢。

      通常我們在ASP中操作數(shù)據(jù)庫的時候,都是使用的執(zhí)行時生成的查詢,然后由傳遞給數(shù)據(jù)庫解釋執(zhí)行。而在這兒我們要用的是存貯查詢。和執(zhí)行時查詢比較而言,預(yù)存程式具備更多的長處。

      他保存在數(shù)據(jù)庫中,單獨于ASP程式代碼,使得他更容易建立和修改,并且查詢的效率更高,速度更快,能夠調(diào)試好了以后再放在ASP頁面中使用,能避免很多問題。而且使用存貯查詢的ASP程式代碼更加容易閱讀和修改。可能大家都對在ASP中使用SQL查詢感到很煩,特別是那些逗號啊,分號啊什么的,一不小心就會出錯。使用存貯查詢后,就能夠不用顧慮這些問題了。當(dāng)然,預(yù)存程式再使用上也有一些要注意的地方,在后面我會周詳?shù)闹v解他的使用方法。在ACCESS中建立預(yù)存程式是一件很容易的事,這兒我就不再多說了。在這兒我只給出各個查詢的SQL語句程式代碼。

      我把任何要使用到的查詢都作為預(yù)存程式保存在了數(shù)據(jù)庫中,主要的有以下的一些:

      (1)按ID查詢文章:

      SELECT 主題表.標(biāo)題 AS 主題名, 看板列表.名稱 AS 看板名, 內(nèi)容表.*

      FROM 主題表 INNER JOIN (內(nèi)容表 INNER JOIN 看板列表 ON 內(nèi)容表.看板ID = 看板列表.ID) ON 主題表.ID = 內(nèi)容表.主題ID

      WHERE (((內(nèi)容表.ID)=[articleid]));

      (2)版主密碼查詢:

      SELECT 看板列表.板主, 作者表.密碼

      FROM 作者表 INNER JOIN 看板列表 ON 作者表.ID = 看板列表.板主

      WHERE (((看板列表.ID)=[id];

      (3)查詢作者:

      SELECT 作者表.*

      FROM 作者表

      WHERE (((作者表.ID)=[id]));

      (4)發(fā)表文章列表:

      SELECT [內(nèi)容表].[ID], [內(nèi)容表].[標(biāo)題], [內(nèi)容表].[作者ID] AS 作者, [內(nèi)容表].[日期], [內(nèi)容表].[推薦度], [內(nèi)容表].[點擊次數(shù)] AS 點擊數(shù)。

      FROM 內(nèi)容表

      WHERE ((([內(nèi)容表].[主題ID])=[TopicIndex]) And (([內(nèi)容表].[發(fā)表])=True));

      未發(fā)表文章列表:

      SELECT 內(nèi)容表.ID AS 文章id, 主題表.ID AS 主題id, 主題表.標(biāo)題 AS 主題, 內(nèi)容表.標(biāo)題 AS 標(biāo)題, 內(nèi)容表.作者ID AS 作者, 內(nèi)容表.日期 AS 日期

      FROM 主題表 INNER JOIN 內(nèi)容表 ON 主題表.ID = 內(nèi)容表.主題ID

      WHERE (((內(nèi)容表.發(fā)表)=False) AND ((內(nèi)容表.看板ID)=[boardid]));

      (5)主題列表:

      SELECT 主題表.*, 看板列表.名稱 AS 看板名

      FROM 看板列表 INNER JOIN 主題表 ON 看板列表.ID = 主題表.看板

      WHERE (((主題表.看板)=[boardIndex]));

      更有一些查詢,因為大多類同,我就不一一列出了。

      在上面的查詢語句中,能夠看到一些由"["和"]"包圍起來的東西,那就是查詢參數(shù)了。需要在執(zhí)行時給出參數(shù)值,然后把參數(shù)值帶入到查詢語句中才能夠執(zhí)行。更有一點要注意的是:在建立那些INNER JOIN查詢時,是需要把表間關(guān)系添加到設(shè)計視圖中的,否則是不能夠自動生成INNER JOIN查詢語句的。到這兒,數(shù)據(jù)庫的設(shè)計就算完了,以后的工作就是ASP的事了。

      二、構(gòu)建

      1、構(gòu)建主窗體

      先要給出一個窗體,能夠讓網(wǎng)友輸入注冊訊息,這些是HTML的內(nèi)容,且放在一邊,我們來仔細(xì)看看具體實現(xiàn)注冊的ASP腳本。

      (1)將資料中的單引號改成兩個單引號,并且在前后加上單引號

      Function SqlStr( data )

      SqlStr = "''" & Replace( data,"''", "''''" ) & "''"

      End Function

      注:這是個自定義的函數(shù),用來把用戶輸入中的單引號('')轉(zhuǎn)換成兩個單引號('''')。在ASP中,用雙引號圍著的是字符串,因而上面的"''"代表的就是只有一個單引號的字符串。之所以要把一個單引號換成兩個單引號,這是因為在SQL語句中,用單引號圍起來是用來代表變量的。為了不至于混淆,就要把字符串中的單引號用兩個單引號來表示。而任何的用戶輸入都要作為變量嵌入到SQL語句中的,所以這個函數(shù)是必不可少的。

      (2)存貯準(zhǔn)備

      id=Request("id")

      password=Request("password")

      nickname=Request("nickname")

      email=Request("email")

      sex=request("sex")

      注:把來自用戶輸入窗體中的內(nèi)容保存在變量中,這不是必須的,但寫了更容易讀寫。

      if Request("name")=""then name=" " else name=request("name")

      if Request("phone")=""then phone=" " else phone=request("phone")

      因為這些內(nèi)容不是必須填的,為了防止用戶沒有輸入任何內(nèi)容,而造成數(shù)據(jù)庫操作上的錯誤,就必須把沒有填入字段用空格來代替。

      (3)建立連接

      Set conn = Server.CreateObject("ADODB.Connection")

      conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")

      注:這一段是建立數(shù)據(jù)庫連接,數(shù)據(jù)庫的名稱為bbssystem.mdb,這一段中唯一要注意的是Server.MapPath函數(shù)的應(yīng)用。一般來說,凡是涉及到具體的目錄的地方,都不要直接使用目錄名,而用Server.MapPath函數(shù)來代替。善用好Server.MapPath和Request.ServerVariables()等函數(shù),能夠讓您的WEB應(yīng)用具備更好的可移植性。

      Set cmd = Server.CreateObject("ADODB.Command")

      (4)查詢作者是否已存在

      Set cmd.ActiveConnection = conn

      cmd.CommandText = "查詢作者"

      ReDim param(0) '' 聲明參數(shù)數(shù)組

      param(0) = CStr(id) '' Cint 不可忽略

      Set rs = cmd.Execute( ,param )

      注:這一段就是用來執(zhí)行預(yù)存程式的。在ADO中執(zhí)行查詢的方法有很多種,但是對于預(yù)存程式就只能使用Command對象了。首先,建立了一個叫做cmd的Command對象,然后把conn連接對象設(shè)定給cmd對象的ActiveConnection屬性,把要執(zhí)行的查詢名稱"查詢作者"設(shè)定給CommandText屬性,然后為查詢參數(shù)賦值。我們聲明了一個參數(shù)數(shù)組param(0),因為在"查詢作者"這個查詢中只有一個參數(shù),所以數(shù)組就只有一個分量了。一般的,在查詢中有幾個參數(shù),就要申明有相應(yīng)分量個數(shù)的參數(shù)數(shù)組。并且參數(shù)出現(xiàn)的順序是個數(shù)組中分量的順序是對應(yīng)的。在使用參數(shù)查詢的過程中,尤其要注意的是,參數(shù)的類型要嚴(yán)格匹配,否這就會出錯,所以上面的CStr()類型轉(zhuǎn)換函數(shù)是不可缺少的。

      

      if not (rs.eof or rs.bof) then

      response.write "錯誤,您輸入的ID號已被占用,請換一個再試試!"

      else

      sql = "Insert Into 作者表 (id, 昵稱,Email, 密碼,姓名,學(xué)校,系別,性別,電話) Values("

      sql = sql & SqlStr(id) & ","

      sql = sql & SqlStr(nickname) & ","

      sql = sql & SqlStr(email) & ","

      sql = sql & SqlStr(password) & ","

      sql = sql & SqlStr(name) & ",&", "

      sql = sql & SqlStr(sex) & ","

      sql = sql & SqlStr(phone) & ")"

      conn.Execute sql

      使用一個SQL的Insert語句把資料插入到數(shù)據(jù)庫中。其實這一查詢也能夠做成預(yù)存程式放在數(shù)據(jù)庫中,我偷了點懶:-)但是對比之下也能夠看到預(yù)存程式的好處,執(zhí)行時查詢寫起來實在是太麻煩了。

      2、構(gòu)建文章顯示模塊

      前面說過,一片具體的文章是分屬在看板和主體之下的。因此顯示文章也要經(jīng)過看板列表和主體列表這兩頁面后,才能得到特定主題下文章的列表。

      (1)板列表的顯示頁面:

      < html>

      < head>

      < title>看板列表< /title>

      < meta http-equiv="Content-Type"content="text/html; charset=GB2312">

      < /head>

      (2)打開連接,顯示看板列表

      < %Set conn = Server.CreateObject("ADODB.Connection")

      conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")

      sql = "select * from 看板列表"

      set rs=conn.execute(sql)

      %>

      注:簡單的SQL查詢,把任何的看板有關(guān)訊息傳回到紀(jì)錄集RS中。下面的任務(wù)就是顯示紀(jì)錄記得內(nèi)容,并在相應(yīng)的看板名稱上建立顯示看板主題的連接。

      < body bgcolor="#FFFFFF">

      < h2 align="center">看板列表</h2>

      < table width="60%" border="0"cellspacing="0" cellpadding="0"align="center">

      < tr bgcolor="#FFFFCC">

      < td height="35" width="25%">看板名稱</td>

      < td height="35" width="21%">板主</td>

      < td height="35" width="23%">主題數(shù)</td>

      < td height="35" width="31%">板主登陸</td>

      < /tr>

      注:這兒一部分是顯示出表格中每一列的標(biāo)題,這兒我沒有用一個統(tǒng)一的函數(shù)來顯示RS紀(jì)錄記的內(nèi)容,因為這樣能夠?qū)Ρ砀竦耐庥^和風(fēng)格做更多的控制,使用起來雖然有點麻煩,但是卻更為靈活。

      < %

      do

      boardid=rs("id")

      boardname=rs("名稱")

      boardmanager=rs("板主")

      response.write "< tr>< td><a href=qBoard.asp?boardid="& boardid& "&boardname=" & boardname& ">" & boardname &"< /a>< /td>"

      注:這一行是重點,當(dāng)點擊了各個板的名稱后,能夠連接到顯示看板主題的頁面。程式代碼看起來有點麻煩,我分解了給您講,您就會明白了。在點擊之后,瀏覽器請求使用的是qBoard.asp頁面,并帶有一個參數(shù)boardid,代表要顯示看板的ID號,在請求頁面和參數(shù)之間用問號(?)分隔。Boardid是前面設(shè)定了的變量,其中包含的就是對應(yīng)看板的ID號。這個連接中還帶有另外一個參數(shù)boardname,用來把看板名稱傳遞給qBoard.asp頁面。在多個參數(shù)間使用"&"來分隔。這個參數(shù)不是必須的,傳遞過去是為了免得在qBorad.asp中再次用boardid來查詢看板名稱。一般來說,能夠少用數(shù)據(jù)庫操作就應(yīng)當(dāng)盡量的少用,這樣能夠提高ASP頁面的性能。因為Response.Write語句使用字符串作為參數(shù)的,所以上面的字符串和變量之間使用的是"&"聯(lián)結(jié)符。最后ASP頁面解釋的結(jié)果應(yīng)該是像這樣的

      

      <td>< a href=qBoard.asp?boardid=1&boardname=系統(tǒng)板>系統(tǒng)板 < /a>< td>。

      response.write "< td>< a href=qAuthor.asp?author="&boardmanager & ">" &boardmanager & "< /a></td>"

      response.write "< td>" &rs("主題數(shù)") & "< /td>"

      response.write "< td>< a href=managerlogin.asp?boardid="&boardid & ">板務(wù)處理< /a></td>< /tr>"

      注:在這個表中,除了能夠由連接來顯示看板主題的內(nèi)容,更有一個斑竹查詢部分和板務(wù)處理部分,版主查詢能夠是通過qAuthor.asp來實現(xiàn)的,他只是簡單的從數(shù)據(jù)庫中取出作者訊息,并顯示出來,這兒就不多說了。而板務(wù)處理是由managerlogin.asp頁面來處理的。這屬于文章審閱模塊,我在后面再詳說。

      rs.movenext

      loop until rs.eof

      %>

      注:通過一個do … loop循環(huán),把紀(jì)錄集中任何的訊息都顯示了出來。

      < /table>

      < div align="center"><br>

      點擊看板名稱能夠得到主題列表,點擊板主名稱能夠察看板主訊息

      < /div>

      < /body>

      < /html>

      < %

      set rs=nothing

      conn.close

      set conn=nothing

      %>

      (3)打造qBaord.asp頁面:

      < %

      boardid=request("boardid") ''取出由上個頁面?zhèn)鬟f過來的看板ID號

      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) //注:聲明參數(shù)數(shù)組

      param(0) = CLng(boardid)//注:CLng 不可忽略

      Set rs = cmd.Execute( ,param )

      %>

      < html>

      < head>

      < title>主題列表< /title>

      < meta http-equiv="Content-Type"content="text/html; charset=GB2312">

      < /head>

      < body bgcolor="#FFFFFF">

      < h1 align="center"><%=rs("看板名")%>板主題列表 </h1>

      < table width="80%" border="0"cellspacing="0" cellpadding="0"align="center">

      < tr bgcolor="#FFFFCC">

      < td width="89%" height="21">主題</td>

      < td width="11%" height="21">文章數(shù)</td>

      < /tr>

      < %

      do

      topicid=rs("id")

      topicname=rs("標(biāo)題")

      sum=rs("文章數(shù)")

      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列出了某個版面下的任何的主題,在點擊了主題名稱后就會進(jìn)入相應(yīng)的主題文章列表。這個列表的是由qTopic.asp這個ASP腳本來實現(xiàn)的。Qtopic.asp的程式代碼在本質(zhì)上幾乎和qBoard.asp沒有區(qū)別,只是在各自的細(xì)節(jié)上有所區(qū)別,這兒也不打算再多講了。

      (4)在點擊了文章列表中的文章標(biāo)題后,會進(jìn)入文章內(nèi)容瀏覽頁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("標(biāo)題")

      data=rs("日期")

      rate=rs("推薦度")

      boardid=rs("看板id")

      topicid=rs("主題id")

      boardname=rs("看板名")

      topicname=rs("主題名")

      content=rs("內(nèi)容")

      content=replace(content,vbCrlf,"</p>< p>")

      content="< p>" & content& "< /p>"

      注:這是個要注意的地方,在內(nèi)容字段中包含的是備忘類型的文本,其中能夠包含換行字符。在HTML的顯示中,必須要把換行字符(也就是vbCrlf常數(shù))換成HTML的段落符號。這樣在段落和段落的銜接處,就不會打亂原來輸入時的格式。假如要設(shè)計的更好些,能夠通過CSS來復(fù)位義< P>標(biāo)簽,設(shè)定其test-indent屬性,就能夠?qū)崿F(xiàn)每段開頭空格了。

      (5)把點擊次數(shù)加一

      sql="Update 內(nèi)容表 Set 點擊次數(shù)=點擊次數(shù) 1Where ID=" & articleid

      conn.execute sql

      注:這兒有一個SQL語句,沒當(dāng)頁面被顯示的時候,會把相應(yīng)的表中點擊次數(shù)字段加一,這樣就能夠?qū)ξ恼聻g覽的次數(shù)做出統(tǒng)計,并可按順序排名。在執(zhí)行條語句的時候,我發(fā)現(xiàn):本來在SQL語句中,嵌入的變量名應(yīng)該加上單引號以和區(qū)別,但在這兒的articleid變量上我并沒有加單引號,居然也能夠通過,而我以前這樣寫從來都是會引發(fā)錯誤的,不知是不是由于新版本的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>發(fā)表日期:< 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>標(biāo)題:< font color="#FF3333"><%=title%>

      主題:< a href="qtopic.asp?topicid=<%=topicid%>"> < %=topicname%>< /a> < /font>< /td>

      < /tr>

      < tr valign="top">

      < td>

      < hr>

      < font color="#FF3366">文章內(nèi)容:< /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%">關(guān)于此話題<a href="submit.asp?topicid=< %=topicid%>&boardid=<%=boardid%>">發(fā)表評論< /a></td>

      這個連接允許網(wǎng)友對此評論的話題發(fā)表自己的見解,這是下一個模塊要講的內(nèi)容了,這兒且按下不表。

      < /tr>

      < /table>

      < /td>

      < /tr>

      < /table>

      < /body>

      < /html>

      < %

      set rs=nothing

      conn.close

      set conn=nothing

      %>

      到此,文章顯示部分也完成了。下面再來看看文章發(fā)表部分是如何實現(xiàn)的。

      3、構(gòu)建文章發(fā)表部分

      文章發(fā)表模塊只有兩個頁面,一個是前面提到的用來提供輸入窗體的submit.asp,更有一個是用來處理窗體輸入的subresult.asp。前面的那個頁面很簡單,基本上就是個HTML窗體,沒有什么好講的,下面來看看subresult.asp的內(nèi)容:

      < html>

      < head>

      < title>發(fā)表文章< /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中提交的表但內(nèi)容,放在相應(yīng)的變量中。

      < html>

      < head>

      < title>發(fā)表文章< /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)檢查權(quán)限

      cmd.CommandText = "select * from 作者表where id=''" & author &"''"

      Set rs = cmd.Execute()

      注:這一段是對作者權(quán)限進(jìn)行檢查,對于帳號不存在或密碼錯誤做出相應(yīng)的錯誤處理。在這兒能夠看到response.end的用法,他是用來結(jié)束當(dāng)前ASP腳本。結(jié)合if語句,能夠?qū)Τ淌街械念A(yù)期錯誤進(jìn)行處理。在一個好的WEB應(yīng)用中,錯誤處理是必不可少的。

      (3)將資料中的單引號改成兩個單引號,并且在前后加上單引號

      Function SqlStr( data )

      SqlStr = "''" & Replace( data,"''", "''''" ) & "''"

      End Function

      ''寫入數(shù)據(jù)庫

      sql = "Insert Into 內(nèi)容表 (看板id,主題id,作者id,標(biāo)題,內(nèi)容)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>文章已被發(fā)送到數(shù)據(jù)庫,當(dāng)板主審閱后就能夠看到了<h2>

      < /body>

      < /html>

      到這兒,文章已被保存在數(shù)據(jù)庫中了。但是,他并不能夠立即被顯示出來,還需要版主的認(rèn)可才行。下面,就來看看論壇的管理部分的內(nèi)容。

      4、論壇的管理部分

      這兒是我們這個論壇的核心之所在,但他實現(xiàn)起來也沒有什么特別的地方。還是那些老東西:窗體處理,數(shù)據(jù)庫查詢,在用ASP把他們有機(jī)的結(jié)合起來。當(dāng)進(jìn)入了文章審閱模式(前面提到的板務(wù)處理)之后,最為首要的內(nèi)容,應(yīng)該是對版主的身份進(jìn)行驗證了。下面來看看版主登陸頁面:

      < %

      boardid=request("boardid")(注:boardid是由進(jìn)入這個頁面的連接所傳遞過來的,是要進(jìn)行板務(wù)處理的看板的ID。通過他才能知道處理的是那個板的板務(wù)。)

      

      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%>才能夠進(jìn)入這個地方</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>

      

      注:這個頁面僅僅是用來登陸用的,他得到斑竹輸入的密碼后,并不能進(jìn)行驗證,而是將驗證的工作放到下一個頁面中進(jìn)行。實際上,密碼輸入和驗證的工作是能夠放在一個頁面中完成的,只但是程式代碼的結(jié)構(gòu)安排上有點麻煩。

      < /body>

      < /html>

      < %

      set rs=nothing

      conn.close

      set conn=nothing

      %>

      現(xiàn)在得到了版主ID和輸入的密碼,下面就是進(jìn)行驗證的工作managerloginrest.asp了,他接受上面那個文檔中窗體的內(nèi)容,并進(jìn)行相關(guān)處理:

      < %

      response.buffer=true

      注:把緩沖區(qū)配置為允許使用。這一條一般來說,是應(yīng)該加在每個ASP頁面的首部的,這樣能夠提高ASP頁面的性能。在打開了緩沖區(qū)后,ASP中更有一些相應(yīng)的特別用法,在后面會提及。

      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>

      < head>

      < title>身份驗證< /title>

      < meta http-equiv="Content-Type"content="text/html; charset=GB2312">

      < /head>

      < body bgcolor="#FFFFFF">

      密碼錯誤

      < /body>

      < /html>

      < %

      else

      session("beenthere")=boarded

      注:使用Session來保持對版主的身份驗證,這必須需要客戶端瀏覽器的cookie被打開了。因為Session是通過cookie來實現(xiàn)的。在這兒,把看板ID賦給Session變量beenthere,表明版主主已通過了身份驗證。在后面的每個版務(wù)處理的頁面中,都要檢查beenthere是否和相應(yīng)的看版ID相符。

      url="boardmanager.asp?boardid="& boardid

      response.redirect url

      補(bǔ)充:初學(xué)ASP的時候總是為response.redirect這個方法感到困惑,屢用不爽,現(xiàn)在我來告訴您一些技巧。使用他之前,必須通過response.buffer=true來讓ASP頁面使用緩沖區(qū)。這時,在ASP被解釋成HTML程式代碼之前,他是放在緩沖區(qū)中的,而不直接被發(fā)送的客戶端瀏覽器。更有一個必須要知道的是:在使用response.redirect之前,是不能有任何實際的HTML程式代碼被發(fā)送到客戶端瀏覽器的,否則就會出錯。當(dāng)然也有變通的方法,假如在response.redirect之前已有HTML程式代碼被解釋出來,能夠用response.clear方法來清除緩沖區(qū),然后就能夠使用他來進(jìn)行復(fù)位向了。

      end if

      %>

      注:下面就是在上面身份驗證通過后復(fù)位向的目標(biāo):boardmanager.asp。他將列出了任何別有被處理的文章。

      < %

      boardid=request("boardid")

      if session("beenthere")< >boardidthen response.redirect "forums.asp"

      注:這就是檢驗版主身份的地方,因為前面已通過cookie在斑竹的瀏覽器中作了標(biāo)記,現(xiàn)在我們就能夠通過seesion來辨認(rèn)版主的身份了。假如標(biāo)示不符,就會通過response.redirect返回到最開始的登陸頁面。假如版主瀏覽器的cookie沒有打開,那么seesion("beenthere")的值會為空,同樣也無法進(jìn)入這個頁面。

      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

      sql="select 名稱 from 看板列表 whereid=" & boardid

      set rs=conn.execute(sql)

      boardname=rs("名稱")

      cmd.commandtext="未發(fā)表文章列表"

      ReDim param(0)

      param(0) = CLng(boardid)//注:Clng 不可忽略

      Set rs = cmd.Execute( ,param )

      set cmd=nothing

      %>

      < html>

      < head>

      < title>版務(wù)處理< /title>

      < meta http-equiv="Content-Type"content="text/html; charset=GB2312">

      < /head>

      < body bgcolor="#FFFFFF">

      < h1 align="center"><%=boardname%>版務(wù)管理< /h1>

      < hr>

      < %

      if rs.eof or rs.bof then response.write "<H2>現(xiàn)在沒有文章要處理< /h2>"

      response.end

      %>

      注:假如沒有新文章被網(wǎng)友發(fā)布,這給出相應(yīng)的提示,并用response.end來結(jié)束此頁的顯示。

      < table width="90%" border="0"cellspacing="0" cellpadding="0"align="center" >

      < tr bgcolor="#FFFFCC">

      < td width="40%" height="20">主題</td>

      < td width="40%" height="20">文章標(biāo)題</td>

      < td width="8%" height="20">作者</td>

      < td width="12%" height="20">日期</td>

      < /tr>

      < %

      do

      topicid=rs("主題id")

      articleid=rs("文章id")

      data=rs("日期")

      datastr=cstr(year(data)) & "-"& cstr(month(data)) &"-"& cstr(day(data))

      author=rs("作者")

      articlename=rs("標(biāo)題")

      topicname=rs("主題")

      response.write "< tr>< td><a href=qtopic.asp?topicid="& topicid& ">" & topicname &"< /A>< /td>"

      response.write "< td>< a href=managearticle.asp?articleid="&articleid & "&boardid="& boardid &">" &articlename & "< /A>< /td>"

      response.write "< td>< a href=qauthor.asp?author="&author & ">" & author& "< /a>< /td>"

      response.write "< td>" &datastr & "< /td>< /tr>"

      rs.movenext

      loop until rs.eof

      %>

      < /table>

      < /html>

      < %

      set rs=nothing

      conn.close

      set conn=nothing

      %>

      < /body>

      當(dāng)點擊了相應(yīng)文章的聯(lián)結(jié)后,就進(jìn)入此文章的處理頁面managearticle.asp:

      < %

      articleid=request("articleid")

      boardid=request("boardid")

      if session("beenthere")< >boardidthen response.redirect "forums.asp"

      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)//注:Clng 不可忽略

      Set rs = cmd.Execute( ,param )

      author=rs("作者id")

      title=rs("標(biāo)題")

      data=rs("日期")

      rate=rs("推薦度")

      boardid=rs("看板id")

      topicid=rs("主題id")

      boardname=rs("看板名")

      topicname=rs("主題名")

      content=rs("內(nèi)容")

      content=replace(content,vbCrlf,"</p>< p>")

      content="< p>" & content& "< /p>"

      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>發(fā)表日期:< 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>標(biāo)題:< font color="#FF3333"><%=title%>

      主題:< a href="qtopic.asp?topicid=<%=topicid%>"> < %=topicname%>< /a> < /font>< /td>

      < /tr>

      < tr valign="top">

      < td>

      < hr>

      < font color="#FF3366">文章內(nèi)容:< /font>< br>

      < br>

      < font color=blue>< %response.writecontent%>< /font>

      < br>

      < hr>

      < /td>

      < /tr>

      < tr valign="top">

      < form method="post" action="manageresult.asp">

      < td height="18">

      < table width="100%" border="1"cellspacing="1" cellpadding="1">

      < tr>

      < td width="29%">

      < div align="right">

      < input type="hidden" name="boardid"value="< %=boardid%>">

      < input type="hidden" name="topicid"value="< %=topicid%>">

      < input type="hidden" name="articleid"value="< %=articleid%>">

      文章處理:< /div>

      < /td>

      < td width="12%" bordercolor="#006666">刪除:

      < input type="radio" name="manage"value=1>

      < /td>

      < td width="30%" bordercolor="#006666">發(fā)表:

      < input type="radio" name="manage"value=2>

      推薦等級

      < select name="select">

      < option value="1">1</option>

      < option value="2">2</option>

      < option value="3" selected>3</option>

      < option value="4">4</option>

      < option value="5">5</option>

      < /select>

      < /td>

      < td width="20%" bordercolor="#006666">以后再處理:

      < input type="radio" name="manage"value=3>

      < /td>

      < td width="9%">

      < input type="submit" name="Submit"value="確定">

      < /td>

      < /tr>

      < /table>

      < /td>

      < /form>

      < /tr>

      < /table>

      < /body>

      < /html>

      < %

      set rs=nothing

      conn.close

      set conn=nothing

      %>

      

      注:這一頁和文章顯示模塊中的article.asp基本上是相同的,僅僅是多加入了版主處理的窗體,在這兒就不多講了。

      下面,要根據(jù)版主的處理過程,修該數(shù)據(jù)庫相應(yīng)部分

      < %response.buffer=true%>

      < html>

      < head>

      < title>文章處理< /title>

      < meta http-equiv="Content-Type"content="text/html; charset=GB2312">

      < /head>

      < body bgcolor="#E9E9E4">

      < %

      articleid=request("articleid")

      boardid=request("boardid")

      topicid=request("topicid")

      manage=request("manage")

      ''接受窗體內(nèi)容

      response.write manage ''顯示斑竹ID

      if session("beenthere")< >boardidthen response.redirect "forums.asp"

      Set conn = Server.CreateObject("ADODB.Connection")

      conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")

      根據(jù)上頁中版主的操作,下面進(jìn)行相應(yīng)的處理。

      if CLng(request("manage"))=1 then

      sql="delete from 內(nèi)容表 where id="& articleid

      conn.execute sql

      response.write "< h1>文章已被刪除</h1>"

      response.write "< a href=>back</a>"

      elseif CLng(request("manage"))=2then

      sql="update 內(nèi)容表 set 發(fā)表=true whereid=" & articleid

      conn.execute sql

      sql="update 主題表 set 文章數(shù)=文章數(shù) 1where id=" & topicid

      conn.execute sql

      response.write "< h1>文章已發(fā)表</h1>"

      response.write "< a href=>back</a>"

      else

      response.clear

      response.redirect "boardmanager.asp?boardid="& boarded

      end if

      %>

      < /body>

      < /html>

      < %

      conn.close

      set conn=nothing

      %>

      經(jīng)過上面幾步,任何的部分就算是基本完成了,當(dāng)然,這時還不能拿來用,擺不上臺面的。假如想要能夠拿得出來的話,還要在版面設(shè)計,客戶端資料驗證等方面多下一些功夫。但是那都是HTML的內(nèi)容了,和ASP沒多大的關(guān)系,這兒我就不多講了。

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    如何用DW設(shè)計論壇

    如何用DW設(shè)計論壇:前言:現(xiàn)在網(wǎng)上的論壇到處都有,但不知您是否碰到過這樣的情況:在雜亂無章的討論信息中來尋找自己想要的內(nèi)容,是一件很費費時費力的事情,到后來,您就都不想去看什么論壇了。那么我們能不能對自己網(wǎng)站論壇的內(nèi)容增加審核功能呢?即任何網(wǎng)友發(fā)到論壇的文章
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 四虎精品亚洲一区二区三区 | Xx性欧美肥妇精品久久久久久| 国产精品视频一区二区噜噜| 精品乱码一区二区三区四区| 99re这里只有精品6| 99久久成人国产精品免费 | 国产精品一二三区| 91精品国产91久久久久久青草| 国产亚洲精品资在线| 亚洲欧美精品丝袜一区二区| 亚洲精品动漫人成3d在线| 久久精品中文字幕无码绿巨人| 91精品视频网站| 亚洲线精品一区二区三区 | 久久国产精品99国产精| 亚洲欧洲精品无码AV| 高清在线亚洲精品国产二区| 中文字幕日韩精品无码内射| 免费视频精品一区二区| 青青青国产精品一区二区| 久久99久久99小草精品免视看| 精品国产AⅤ一区二区三区4区| 久久99热狠狠色精品一区| 91精品视频网站| 996久久国产精品线观看| 精品久久久久久无码专区| 久久亚洲欧美国产精品| 欧美精品videosse精子| 少妇人妻偷人精品无码视频新浪| 99久久精品九九亚洲精品| 国产精品免费观看| 国内精品一级毛片免费看| 国产精品久久久久久福利69堂| 国产成人精品久久一区二区三区 | 亚洲国产精品人人做人人爱| 日本一区二区三区精品国产| 日韩精品电影一区亚洲| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 综合精品欧美日韩国产在线| 亚洲中文久久精品无码| 精品午夜福利在线观看|