基于ASP的某學(xué)校校園BBS的設(shè)計(jì)與實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)_第1頁
基于ASP的某學(xué)校校園BBS的設(shè)計(jì)與實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)_第2頁
基于ASP的某學(xué)校校園BBS的設(shè)計(jì)與實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)_第3頁
基于ASP的某學(xué)校校園BBS的設(shè)計(jì)與實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)_第4頁
基于ASP的某學(xué)校校園BBS的設(shè)計(jì)與實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于asp的某學(xué)校校園bbs的設(shè)計(jì)與實(shí)現(xiàn)1 引言1.1 課題背景與開發(fā)目的 bbs是bulletin board system的縮寫,即電子公告板。它是以文字為主的界面,為廣大網(wǎng)友提供了一個(gè)彼此交流的空間。隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,網(wǎng)絡(luò)給人們帶來了很多便利,人們借助于網(wǎng)絡(luò)進(jìn)行相互交流變得更加方便。于是,以互聯(lián)網(wǎng)為基礎(chǔ)的網(wǎng)上論壇逐漸成為人們發(fā)表言論的一個(gè)平臺(tái)。一些具有前衛(wèi)風(fēng)格的校園bbs隨著互聯(lián)網(wǎng)的普及在各大高校建立,并逐漸成為學(xué)生之間交流信息,共享資源,娛樂休閑的場所,成為廣大高校學(xué)生課余生活中不可獲缺的一部分。而且在不久的將來,各種各樣展現(xiàn)自身風(fēng)格的校園bbs會(huì)深入到中學(xué)甚至小學(xué)校園。本系統(tǒng)

2、采用b/s模式設(shè)計(jì),開發(fā)目的除了作為在校學(xué)生、老師發(fā)布消息,共享資料,娛樂休閑的平臺(tái),也可成為對(duì)外展示校園的一個(gè)“活廣告”。1.2開發(fā)環(huán)境本系統(tǒng)是在windows xp操作系統(tǒng)下,使用ultraedit-32和dreamweaver作為開發(fā)工具進(jìn)行開發(fā)的。數(shù)據(jù)庫使用的是access。1.3硬件需求在運(yùn)行本系統(tǒng)前,請(qǐng)檢查一下計(jì)算機(jī)是否滿足以下要求。計(jì)算機(jī)要求的配置為:(1) windows servicepack4.0和 internet 信息服務(wù)器 5.0 (iis 5.0)(2) microsoft office access2000以上版本(3) windows 2000/xp 簡體中文版

3、簡體中文ie5.0以上版本 需求分析2.1系統(tǒng)概述根據(jù)該bbs的邏輯功能劃分,本系統(tǒng)一共分為七大功能模塊,分別是用戶注冊(cè)和登陸模塊,用戶資料管理模塊,文章發(fā)表和文章瀏覽模塊,文章搜索模塊,管理員操作模塊,版主操作模塊,論壇短消息功能模塊。其中管理員操作又劃分為論壇文章操作模塊及論壇設(shè)置模塊。用戶資料管理模塊可劃分為用戶密碼重設(shè)模塊,用戶信息查詢模塊,用戶資料修改模塊。其功能結(jié)構(gòu)圖如圖2.1所示。校園bbs系統(tǒng)用戶注冊(cè)和登陸模塊用戶資料管理模塊文章發(fā)表和瀏覽模塊文章搜索模塊管理員操作模塊版主操作模塊論壇短消息模塊用戶信息查詢模塊用戶資料修改模塊用戶密碼重設(shè)模塊論壇文章操作模塊論壇設(shè)置模塊圖2-1

4、 系統(tǒng)功能結(jié)構(gòu)圖(1)用戶注冊(cè)和登陸模塊主要是完成新用戶的注冊(cè),將新用戶注冊(cè)信息加入數(shù)據(jù)庫;登陸模塊主要驗(yàn)證用戶身份,使用會(huì)員身份登陸論壇即可進(jìn)入論壇并享有會(huì)員的使用權(quán)限。(2)用戶資料管理模塊主要功能是注冊(cè)用戶可以隨意修改自己的個(gè)人信息,可隨時(shí)查詢其他用戶的個(gè)人資料;如果不幸遺忘自己的登陸密碼,還可利用本論壇的密碼重設(shè)功能,重設(shè)密碼,極大的方便了用戶使用。(3)文章發(fā)表和文章瀏覽模塊本論壇最主要的功能,登陸用戶和游客都可隨意點(diǎn)擊感興趣的帖子進(jìn)行瀏覽,而登陸用戶還可以隨時(shí)在論壇里發(fā)表自己的文章,或者對(duì)論壇里的帖子進(jìn)行回復(fù)。(4)文章搜索模塊登陸用戶可利用該功能對(duì)感興趣但無法記起位置的帖子進(jìn)行查

5、找,方便用戶游覽論壇的一個(gè)功能。(5)管理員操作模塊本論壇管理者才擁有的功能,可以對(duì)論壇中任意版塊的帖子進(jìn)行固頂,加精,刪除等操作,還可以對(duì)論壇的一些基本設(shè)置進(jìn)行修改。(6)版主操作模塊論壇各個(gè)版塊的具體管理者,在自己的版塊有和管理員一樣的管理權(quán)限,負(fù)責(zé)維護(hù)自己版塊的秩序。(7)論壇短消息功能模塊登陸用戶可利用該功能對(duì)其他論壇用戶留言,進(jìn)行私下的交流。2.2系統(tǒng)角色劃分本系統(tǒng)操作用戶按不同級(jí)別依次可分為:游客,普通會(huì)員用戶、版主、管理員。高級(jí)別的用戶可以繼承低級(jí)別用戶的公用功能。同時(shí),各級(jí)別用戶具有一定的只有以本級(jí)別身分登錄才具有的私有功能。1.游客:只能進(jìn)入論壇瀏覽帖子,無其他權(quán)限。2.普通

6、會(huì)員:瀏覽帖子,發(fā)表或回復(fù)帖子、資料維護(hù)、文章搜索、論壇短消息。3.版主:除會(huì)員基本功能外,可對(duì)自己所在版塊的文章進(jìn)行操作。4.管理員:除會(huì)員基本功能外,可對(duì)所有版塊的文章進(jìn)行固頂,加精,刪除等,并且有論壇設(shè)置修改權(quán)限。3 系統(tǒng)總體設(shè)計(jì)3.1關(guān)鍵技術(shù)3.1.1 asp技術(shù)asp技術(shù)是一種類似html(hypertext markup language超文本標(biāo)識(shí)語言)、script與cgi(common gateway interface通用網(wǎng)關(guān)接口)的結(jié)合體,簡單的講它是一種運(yùn)行于服務(wù)器的腳本語言,但是其運(yùn)行效率比cgi更高、程序編制也比html更方便且更有靈活性,程序安全性及保密性也遠(yuǎn)比sc

7、ript好。其特點(diǎn)歸納如下:1. asp可以和html或其他腳本語言(vb script與java script)互相嵌套。2. asp是一種在web服務(wù)器端運(yùn)行的腳本語言,因此,程序代碼完全保密。3. asp以對(duì)象為基礎(chǔ),因此可以使用activex控件繼續(xù)擴(kuò)充其功能。4. asp內(nèi)置ado組件,因此可以輕松地存取各種數(shù)據(jù)庫,大大縮短了程序開發(fā)時(shí)間。5. asp可以將運(yùn)行結(jié)果以html的格式傳送至客戶端瀏覽器,因此asp可以適用于各種瀏覽器。下面來介紹一下asp的幾個(gè)內(nèi)置對(duì)象:request對(duì)象,我們知道http通訊協(xié)議是一種請(qǐng)求與響應(yīng)(request/response)的通訊協(xié)議,因此通常由

8、客戶端向web服務(wù)器提出請(qǐng)求,web服務(wù)器才會(huì)響應(yīng)信息。因此在asp中,特別將“客戶端提出的要求”與“web服務(wù)器響應(yīng)的信息”等動(dòng)作封裝成request對(duì)象與response對(duì)象。換而言之,request對(duì)象通常包含了用戶端的相關(guān)信息,如瀏覽器的種類、表頭信息、表單參數(shù)及cookies等等。response對(duì)象,每一種程序語言或開發(fā)工具一定都有與用戶溝通的界面或函數(shù),asp也不例外。在asp中負(fù)責(zé)將信息傳達(dá)到用戶的對(duì)象就是response對(duì)象。server對(duì)象,server對(duì)象允許用戶取得服務(wù)器提供的各項(xiàng)功能,例如,server對(duì)象的createobject方法允許客戶端用戶建立一個(gè)activ

9、ex server組件實(shí)例,其所建立組件實(shí)例會(huì)隨著服務(wù)器端完成asp網(wǎng)頁的處理而自動(dòng)被釋放。如果希望此對(duì)象實(shí)例可以跨多個(gè)asp網(wǎng)頁,就要用到session對(duì)象保留該組件實(shí)例,直到session對(duì)象的運(yùn)行時(shí)間到了,或是在其他asp網(wǎng)頁調(diào)用session對(duì)象的abandon方法,此組件實(shí)例才會(huì)被釋放。session對(duì)象,session對(duì)象在asp程序編寫中占了相當(dāng)重的份量,由于網(wǎng)頁是一種無狀態(tài)的程序,因此幾乎無法知道用戶的瀏覽狀態(tài)。必須通過session對(duì)象記錄用戶的相關(guān)信息,以供用戶再次對(duì)此web服務(wù)器提出要求時(shí)作確認(rèn),例如,在某些特定的網(wǎng)頁中,常需要用戶輸入確認(rèn)的賬號(hào)和密碼,假如這些身份確認(rèn)的

10、結(jié)果無法保留,那豈不是每一個(gè)網(wǎng)頁都需要重新輸入一次密碼。換而言之,每一個(gè)session的用戶,web服務(wù)器均會(huì)自動(dòng)的為它們建立一個(gè)session。必須說明,session對(duì)象只能適用于具備cookie功能的瀏覽器。3.1.2 數(shù)據(jù)庫技術(shù)在基于微軟iis/pws的網(wǎng)絡(luò)平臺(tái)上,通過服務(wù)器端運(yùn)行的asp程序來訪問后臺(tái)數(shù)據(jù)庫,是一種最常見的模式了。而對(duì)于小型的數(shù)據(jù)庫應(yīng)用需求,微軟的access數(shù)據(jù)庫應(yīng)該是與asp程序配套使用的首選。由于access數(shù)據(jù)庫的odbc驅(qū)動(dòng)程序支持的sql指令全,執(zhí)行效率高,所以access后臺(tái)數(shù)據(jù)庫+asp服務(wù)器端程序+客戶端ie瀏覽器,是一個(gè)精練實(shí)用高效的組合模式。利用

11、sql語言,可以查詢和管理自已的數(shù)據(jù)庫。它由大約30條命令構(gòu)成,但實(shí)際只需要少數(shù)的幾個(gè)命令就可以完成相當(dāng)多的工作,常用的sql查詢命令有:select、insert、delete、update等。3.1.3 加密技術(shù)本設(shè)計(jì)在會(huì)員密碼和密碼問題的存儲(chǔ)時(shí)使用了md5加密算法來保護(hù)數(shù)據(jù)庫中的重要數(shù)據(jù)。md5以512位分組來處理輸入的信息,且每一分組又被劃分為16個(gè)32位子分組,經(jīng)過一系列的處理后,算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級(jí)聯(lián)后將生成一個(gè)128位的散列值。本設(shè)計(jì)在保存會(huì)員密碼和密碼提示問題答案時(shí)都先將傳遞的數(shù)據(jù)通過md5加密后才存入數(shù)據(jù)庫,故在數(shù)據(jù)庫中只能看到已經(jīng)加密的信息,

12、保證了信息的安全。又因?yàn)樵撍惴ㄊ菃蜗蚣用艿?,所以?dāng)有數(shù)據(jù)要和保存的數(shù)據(jù)進(jìn)行比較時(shí),都是先將新數(shù)據(jù)加密再比較密文的差異。3.2系統(tǒng)流程圖論壇設(shè)計(jì)按照一般操作進(jìn)行設(shè)計(jì):開始非論壇會(huì)員僅可閱讀論壇文章管理員進(jìn)入論壇顯示管理員操作項(xiàng)論壇版主進(jìn)入相應(yīng)版塊顯示版主操作項(xiàng)一般會(huì)員享有的除管理權(quán)限外的一切功能nyynny登陸結(jié)束圖3-1 系統(tǒng)流程圖3.3方案選擇3.3.1 數(shù)據(jù)庫需求分析根據(jù)系統(tǒng)功能和數(shù)據(jù)流程,可以確定一下數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu):1.會(huì)員信息:包括會(huì)員標(biāo)示id號(hào),姓名,性別,論壇頭像,論壇幣,發(fā)帖數(shù)等論壇資料。2.論壇配置信息:包括創(chuàng)建時(shí)間,會(huì)員總數(shù),論壇貨幣單位等。3.版塊信息:版塊說明,版主等。

13、4.論壇帖子信息:帖子號(hào),作者,內(nèi)容,發(fā)表日期,回復(fù)數(shù)等。5.好友信息:論壇好友的姓名,注冊(cè)時(shí)間。3.3.2 數(shù)據(jù)庫設(shè)計(jì)根據(jù)數(shù)據(jù)庫的需求分析,酒店管理系統(tǒng)需要建立10個(gè)數(shù)據(jù)表,他們分別是:論壇文章表(bbs), 論壇版塊表(bbsforumid),論壇配置表(config),用戶好友表(friend),論壇短消息表(message),用戶等級(jí)表(usergroups),用戶信息表(users)。各表具體信息見下表:表3-1 bbs表中字段字段名數(shù)據(jù)類型字段描述id自動(dòng)編號(hào)主題帖子號(hào)id(主鍵)forumid數(shù)字論壇版塊號(hào)rid數(shù)字回復(fù)主題帖子號(hào)idtopicface數(shù)字作者心情貼圖title文

14、本文章標(biāo)題content備注文章內(nèi)容datetime日期/時(shí)間發(fā)表日期username文本作者isbest數(shù)字是否為精華帖istop數(shù)字是否為置頂帖isnews數(shù)字是否為論壇公告islocked數(shù)字是否被鎖isvote數(shù)字是否為投票帖ismana數(shù)字是否需要威望mananum數(shù)字要求威望值lastusername文本最后回復(fù)人lastdatetime日期/時(shí)間最后回復(fù)時(shí)間readtimes數(shù)字瀏覽次數(shù)retimes數(shù)字回復(fù)次數(shù)表3-2 bbsforumid表中字段字段名數(shù)據(jù)類型字段描述forumid數(shù)字論壇版塊號(hào)id(主鍵)版塊說明文本版塊說明版塊名稱文本版塊名稱borderusername文

15、本版主名字表3-3 config表中字段字段名數(shù)據(jù)類型字段描述site_name文本系統(tǒng)名字site_builddate文本系統(tǒng)創(chuàng)建時(shí)間site_postnum數(shù)字論壇發(fā)帖數(shù)site_topicnum數(shù)字論壇主題帖數(shù)site_usernum文本論壇會(huì)員數(shù)site_lastuser文本論壇最近注冊(cè)會(huì)員site_checkreg數(shù)字是否允許新會(huì)員注冊(cè)site_regword文本注冊(cè)校驗(yàn)碼site_moneyunit文本論壇貨幣單位site_postmoney數(shù)字發(fā)帖收入site_replymoney數(shù)字回復(fù)收入site_msgmoney數(shù)字發(fā)送消息消耗貨幣表3-4 usergroups表中字段字段

16、名數(shù)據(jù)類型字段描述usergroupid數(shù)字組idgrouptitle文本用戶組名稱groupclass文本用戶組分類minarticle數(shù)字需發(fā)表多少文章titlepic文本類別圖groupclassid數(shù)字等級(jí)id表3-5 friend表中字段 字段名數(shù)據(jù)類型字段描述id自動(dòng)編號(hào)好友id(主鍵)usernamemd5文本用戶加密名稱friendname文本好友名字joindate日期/時(shí)間加為好友時(shí)間checkuser數(shù)字是否列入黑名單表3-6 message表中字段字段名數(shù)據(jù)類型字段描述id數(shù)字消息id號(hào)(主鍵)title文本消息標(biāo)題content文本消息標(biāo)內(nèi)容to_man文本收件人fr

17、om_man文本發(fā)件人isread數(shù)字是否已讀表3-7 users表中字段字段名數(shù)據(jù)類型字段描述uid自動(dòng)編號(hào)會(huì)員id(主鍵)username文本會(huì)員姓名usernamemd5文本會(huì)員姓名加密userpassword文本會(huì)員密碼userquestion文本密碼提示問題useranswer文本密碼提示問題答案userhonour文本會(huì)員頭銜userface文本會(huì)員頭像usersex數(shù)字會(huì)員性別userhomepage文本會(huì)員主頁useremail文本會(huì)員郵箱usersignature文本會(huì)員簽名userbests數(shù)字會(huì)員精華帖數(shù)userpost數(shù)字會(huì)員發(fā)貼數(shù)usermoney數(shù)字會(huì)員財(cái)富user

18、mana數(shù)字會(huì)員威望joindate日期/時(shí)間會(huì)員注冊(cè)時(shí)間lastloginip文本上次登陸ipuserlogins數(shù)字登陸次數(shù)lastlogin日期/時(shí)間上次登陸時(shí)間usergroup文本會(huì)員用戶組名稱usergroupid數(shù)字會(huì)員等級(jí)組idusergroupclass文本會(huì)員用戶組分類usergroupclassid數(shù)字會(huì)員等級(jí)idisadmin數(shù)字是否為管理員3.3.3 數(shù)據(jù)庫連接的實(shí)現(xiàn)數(shù)據(jù)庫連接操作是一個(gè)相當(dāng)頻繁的操作,在asp的數(shù)據(jù)庫編程中,connection對(duì)象是我們不可能離開的一個(gè)對(duì)象,該對(duì)象是ado對(duì)象模塊中的一個(gè)專門打開和關(guān)閉數(shù)據(jù)庫連接的對(duì)象,在對(duì)數(shù)據(jù)庫進(jìn)行任何的操作,比如

19、更新記錄,插入,刪除,檢索等,都必須以connection對(duì)象的建立為前提。形象地來說,connection對(duì)象就是程序與數(shù)據(jù)庫溝通的管道,所有對(duì)數(shù)據(jù)庫的操作,都必須經(jīng)過它,因此,本系統(tǒng)首先建立一個(gè)connection對(duì)象的實(shí)例變量,然后才能在它的基礎(chǔ)上建立recordset對(duì)象實(shí)例來操作數(shù)據(jù)庫。這里首先利用connection對(duì)象的屬性connstr 設(shè)置數(shù)據(jù)庫的連接方式,使用的是access ole db驅(qū)動(dòng)程序。本設(shè)計(jì)還使用了server對(duì)象的server.mappath(path)方法,作用是將(path)指定的虛擬路徑轉(zhuǎn)換為實(shí)際路徑,大大提高了本系統(tǒng)的移植性。然后使用server.c

20、reateobject方法建立connection對(duì)象的實(shí)例變量conn,使用connection對(duì)象的open方法打開數(shù)據(jù)庫連接,核心代碼如下:mdb = data/mybbs.mdb數(shù)據(jù)庫相對(duì)路徑connstr = provider = microsoft.jet.oledb.4.0;data source = & server.mappath(&mdb&)set conn = server.createobject(adodb.connection) conn.open connstr4 系統(tǒng)的完整設(shè)計(jì)與開發(fā)4.1系統(tǒng)顯示前的準(zhǔn)備4.1.1 論壇基本配置系統(tǒng)運(yùn)行時(shí),有些數(shù)據(jù)庫里的數(shù)據(jù)是會(huì)

21、被頻繁調(diào)用的,為了便于書寫代碼和程序的嚴(yán)謹(jǐn),可以將這些數(shù)據(jù)首先賦給一些變量,在后面的程序運(yùn)行中直接調(diào)用變量,不用頻繁的訪問數(shù)據(jù)庫。一些保存論壇基本信息的數(shù)據(jù)就屬于這類。所以在運(yùn)行時(shí)首先將論壇一些基本參數(shù)在數(shù)據(jù)庫連接后即從數(shù)據(jù)庫中調(diào)出,以上內(nèi)容在conn.asp文件里連接數(shù)據(jù)庫后執(zhí)行,其中使用connection對(duì)象的execute方法對(duì)存放基本配置信息的表進(jìn)行sql查詢,還使用了recordset對(duì)象的bof和eof屬性,其中bof屬性表示查詢數(shù)據(jù)庫的指針位于第一條記錄之前,則為真:eof屬性表示查詢數(shù)據(jù)庫的指針位于最后一條記錄之后,則為真。如果兩者都為真,說明數(shù)據(jù)庫里并沒有對(duì)應(yīng)的數(shù)據(jù),然后可

22、關(guān)閉剛才創(chuàng)建的對(duì)象實(shí)例,并將其清空,釋放系統(tǒng)資源;如果找到需要的記錄,則將其數(shù)據(jù)讀出到創(chuàng)建的變量里以便使用:=讀取論壇基本設(shè)置= set rsconfig = conn.execute(select * from config)創(chuàng)建一個(gè)查詢數(shù)據(jù)庫的對(duì)象實(shí)例 if rsconfig.bof and rsconfig.eof then查詢?yōu)榭斩业阶詈?rsconfig.close關(guān)閉變量 set rsconfig = nothing釋放對(duì)象實(shí)例 response.write 網(wǎng)站配置數(shù)據(jù)丟失!系統(tǒng)無法正常運(yùn)行! response.end else site_name = rsconfig(sit

23、e_name) site_postnum= rsconfig(site_postnum) 省去部分代碼 end if進(jìn)入系統(tǒng)時(shí)由于有些功能只針對(duì)注冊(cè)會(huì)員和管理員開放的,并不是進(jìn)入論壇的人都能使用,這里就涉及到一個(gè)用戶身份判斷的問題。本設(shè)計(jì)包含了一個(gè)用戶驗(yàn)證功能函數(shù)的user_auditing.asp文件,在其他程序執(zhí)行前都會(huì)先執(zhí)行該文件里的函數(shù),在需要驗(yàn)證時(shí)不必重復(fù)書寫代碼,只需在需要身份驗(yàn)證的程序之前調(diào)用該具有驗(yàn)證功能的函數(shù)就行。其中的checkusers()函數(shù)驗(yàn)證會(huì)員,checkunadmin()函數(shù)驗(yàn)證管理員或版主。本設(shè)計(jì)一大特點(diǎn)是使用了cookies來暫存會(huì)員信息,主要是會(huì)員姓名、密

24、碼這兩項(xiàng),這一功能的實(shí)現(xiàn)對(duì)程序的運(yùn)行是十分方便的,如上面提到的checkusers()函數(shù)的功能就是根據(jù)cookies里的會(huì)員密碼來驗(yàn)證會(huì)員是否登陸;因?yàn)橐坏?huì)員登陸后登陸處理程序會(huì)將該會(huì)員的密碼暫存到cookies中,所以只需驗(yàn)證當(dāng)前cookies里的會(huì)員密碼是否為空就可以判斷目前的用戶是否登陸論壇。checkunadmin()函數(shù)則是創(chuàng)建一個(gè)ado對(duì)象模塊的兩個(gè)recordset對(duì)象實(shí)例來訪問數(shù)據(jù)庫中存放管理員身份信息和版主身份信息的表,讀取有關(guān)管理員或版主身份的字段進(jìn)行比較判斷。sub checkunadmin() set wd=server.createobject(adodb.rec

25、ordset)sql=select borderusername from bbsforumidwd.open sql,conn,1,1if wd(borderusername) request.cookies(bbs)(username) then省去部分代碼4.2 系統(tǒng)主要功能分析4.2.1 用戶注冊(cè)在論壇主頁的工具欄里是會(huì)員享有的一般操作選項(xiàng),該工具欄由在user_auditing.asp文件里定義的mybbstop()函數(shù)實(shí)現(xiàn),同樣只需在以后的頁面調(diào)用該函數(shù)實(shí)現(xiàn)工具欄的顯示。該函數(shù)一開始會(huì)先在cookies里去查找會(huì)員姓名,如果發(fā)現(xiàn)會(huì)員姓名為空,則說明當(dāng)前瀏覽論壇的用戶未登陸,則工具欄

26、中會(huì)顯示未登陸的提示信息,以及顯示未注冊(cè)用戶注冊(cè)的信息。若是未注冊(cè)會(huì)員,則可點(diǎn)擊“注冊(cè)”鏈接到注冊(cè)頁面,如下圖:圖4-1 會(huì)員注冊(cè)頁面用戶進(jìn)入該頁面根據(jù)要求填寫上述必要的信息后,會(huì)通過表單傳遞的“post”方法將輸入的內(nèi)容傳遞給后臺(tái)處理頁面的reg()函數(shù)對(duì)信息進(jìn)行處理,其中在傳遞“用戶名”、“密碼”及“密碼問題”等信息時(shí)又調(diào)用了mayhtmlencode和replacebadchar函數(shù)。其中mayhtmlencode函數(shù)的功能是將一些特殊符號(hào)替換成瀏覽器識(shí)別的符號(hào),而replacebadchar函數(shù)的功能是過濾非法的sql字符。從而保證了用戶名等信息符合網(wǎng)頁設(shè)計(jì)的要求。當(dāng)以上所有的數(shù)據(jù)都審

27、核通過后,reg函數(shù)便將返回的內(nèi)容傳遞給自定義變量,然后創(chuàng)建一個(gè)ado對(duì)象模塊的recordset對(duì)象實(shí)例來訪問數(shù)據(jù)庫的用戶信息表,同樣使用了recordset對(duì)象的bof和eof屬性來查看此用戶名是否已被注冊(cè),使用一條ifelse條件語句將條件定為not (rs.eof and rs.bof),若為真,即數(shù)據(jù)不為空,說明用戶名已被注冊(cè),則以response對(duì)象的redirect方法提示用戶重新注冊(cè),保證了會(huì)員名的唯一性,方便論壇的管理。若條件為假,則執(zhí)行else以后的操作,即創(chuàng)建recordset對(duì)象實(shí)例來將當(dāng)前新的用戶信息添加到數(shù)據(jù)庫的用戶信息表里,并將新會(huì)員數(shù)加1更新,完成注冊(cè)功能,同時(shí)

28、將所有注冊(cè)后的會(huì)員信息寫入cookies中。頁面提示用戶注冊(cè)成功,以response對(duì)象的redirect方法跳轉(zhuǎn)回論壇主頁面,此時(shí)會(huì)員就可以享用所有會(huì)員權(quán)限,盡情游覽論壇。response對(duì)象的redirect方法是實(shí)現(xiàn)頁面的跳轉(zhuǎn),使當(dāng)前頁面跳轉(zhuǎn)到指定的頁面。本設(shè)計(jì)中都是以clueinfo.asp文件中的函數(shù)來提示操作完成的信息或錯(cuò)誤信息。當(dāng)操作成功時(shí),則調(diào)用clueinfo.asp文件中的“yes”函數(shù),該函數(shù)即是顯示成功操作的信息,并將頁面跳轉(zhuǎn)鏈接重新定義回主頁面;如果發(fā)生錯(cuò)誤,則調(diào)用clueinfo.asp文件中的“othererr”函數(shù),該函數(shù)即是顯示錯(cuò)誤信息,然后同樣將頁面跳轉(zhuǎn)鏈接

29、重新定義回主頁面,使用戶可以重新操作。4.2.2 論壇顯示下圖是論壇主頁面,里面的分割區(qū)域?qū)⒄搲鍌€(gè)話題不同的版塊分別顯示:圖4-2 論壇主頁面考慮到用戶訪問及發(fā)帖的需要,在每個(gè)版塊中以“forumid”為不同的值表示不同的版塊。版塊結(jié)構(gòu)中分別創(chuàng)建了2個(gè)recordset對(duì)象實(shí)例來訪問數(shù)據(jù)庫,一個(gè)對(duì)象實(shí)例以代表版塊號(hào)的“forumid”的值為查詢條件查詢存放版塊信息的表,將數(shù)據(jù)庫里存放的版塊內(nèi)容和版主名字讀出,并將內(nèi)容以response對(duì)象的write方法顯示到頁面上;另一個(gè)對(duì)象實(shí)例以代表版塊號(hào)的“forumid”的值為查詢條件查詢存放在該版塊所發(fā)表的文章的表,為保證所查詢的結(jié)果為最近的一條信

30、息,在查詢語句中“top 1”和“order by datetime”兩個(gè)查詢條件將時(shí)間最近的第一條信息以response對(duì)象的write方法將顯示到頁面上,查詢語句的核心代碼如下:sql=select top 1 * from bbs where forumid=?order by datetime用戶任意點(diǎn)擊一個(gè)版塊名稱即鏈接到相應(yīng)版塊:圖4-3 論壇“校園新聞”版塊頁面該頁面關(guān)鍵技術(shù)是調(diào)用的session對(duì)象。除了在很多地方創(chuàng)建recordset對(duì)象實(shí)例來訪問數(shù)據(jù)庫的表外,有時(shí)還必須根據(jù)需要對(duì)當(dāng)前版塊號(hào)“forumid”進(jìn)行保存,目的是在任意版塊發(fā)帖的時(shí)候,能夠?qū)⒃撎铀@示的版塊號(hào)一

31、起寫入數(shù)據(jù)庫,保證在哪個(gè)版塊里發(fā)表的帖子能在哪個(gè)版塊里顯示,從而避免在不同版塊發(fā)表文章卻因?yàn)榘鎵K切換而造成的版塊id號(hào)與所要求的id號(hào)不一致,不能正常顯示的問題。利用session對(duì)象的特點(diǎn)就可以解決這個(gè)問題。所以每個(gè)版塊頁面一開始都會(huì)先將版塊號(hào)用session對(duì)象保存。然后在其他地方則都是創(chuàng)建recordset對(duì)象實(shí)例來訪問數(shù)據(jù)庫的表,然后根據(jù)表中字段情況做不同的處理。每個(gè)版塊都分為兩部分,一個(gè)部分是顯示論壇公告等一系列重要主題的區(qū)域,另一部分則是顯示普通文章的區(qū)域。所以在重要主題區(qū)域都會(huì)創(chuàng)建一個(gè)recordset對(duì)象實(shí)例來訪問數(shù)據(jù)庫,但是都以“isnews”為1查詢條件,并用一個(gè)while

32、條件語句來處理,若該字段為 1,則版塊有公告帖,就將公告顯示;若沒有公告等重要主題,while條件為假,則顯示為空。至于在普通主題區(qū)域里則以表示公告的“isnews”和表示固頂?shù)摹癷stop”字段為0為查詢條件查詢數(shù)據(jù)庫,然后將符合條件的文章主題等內(nèi)容讀出并在頁面顯示。這里用了一條do while循環(huán)語句,只要讀取帖子信息的指針沒到最后,則重復(fù)執(zhí)行顯示信息的操作,使所有帖子都依次顯示。在讀取文章之前都會(huì)做關(guān)于是否為“精華”、“鎖定”的判斷,即多使用一條ifelse條件語句,查詢帖子年息中代表“精華”和“鎖定”的“isbest”,“islocked”語句,為真則顯示提示,否則就不顯示。以上所述的

33、關(guān)鍵代碼如下:session(forumid)=1 sql=select * from bbs where isnews=1 and rid=0 and forumid=1 order by id desc while not wc.eof省去部分代碼sql=select * from bbs where istop=0 and isnews=0 and rid=0 and forumid = 1 order by lastdatetime descdo while not wc.eofif wc(isbest) = the_true then response.write省去部分代碼然后會(huì)員

34、可隨意點(diǎn)擊閱讀感興趣的帖子:圖4-4 閱讀帖子頁面此時(shí)調(diào)用read.asp文件實(shí)現(xiàn)內(nèi)容顯示,這里也用到了session對(duì)象來保存當(dāng)前文章所在版塊的id號(hào),并根據(jù)session對(duì)象所暫存的id號(hào)來進(jìn)行ifelse條件選擇,然后在標(biāo)題的“游覽”處添加相應(yīng)的版塊鏈接,這樣在用戶點(diǎn)擊“游覽”時(shí)可根據(jù)剛才保存的id號(hào)返回剛才的版塊頁面,使返回的版塊根據(jù)保存值動(dòng)態(tài)更新,實(shí)現(xiàn)退回版塊主頁的功能。要實(shí)現(xiàn)顯示文章信息的功能首先最關(guān)鍵的是要得到所瀏覽文章的id號(hào),這個(gè)在文章主題的鏈接到read.asp文件時(shí)會(huì)將當(dāng)前文章的id號(hào)一同傳遞給read.asp中的處理程序。所以read.asp中執(zhí)行程序一開始就會(huì)先將從r

35、equest對(duì)象傳遞來的主題id號(hào)保存到變量id中,然后就能以該變量為查詢條件創(chuàng)建recordset對(duì)象實(shí)例來訪問數(shù)據(jù)庫的表,并將作者信息、帖子內(nèi)容等數(shù)據(jù)內(nèi)容以response對(duì)象的write方法顯示到頁面上;顯示文章內(nèi)容是調(diào)用自定義函數(shù)showcontent()實(shí)現(xiàn)的,因?yàn)樵撎映酥黝}帖外,可能還會(huì)有一些跟帖的回復(fù)內(nèi)容,都需要顯示,所以showcontent()函數(shù)使用了do whileloop循環(huán),這種循環(huán)在執(zhí)行do while時(shí),會(huì)查詢“條件”的返回值,若返回值為真則執(zhí)行程序代碼,這里是查看搜索數(shù)據(jù)庫的指針是否沒到最后,若成立,說明還有信息,則用同樣的response對(duì)象的write方

36、法顯示,然后碰到loop又回到do while再次檢查,這樣就保證了文章所有內(nèi)容都顯示出來。以上提到的核心代碼如下:首先利用得到的帖子的id號(hào)做為查詢條件得到帖子作者,id = request(topicid)set rs=server.createobject(adodb.recordset)sql=select * from bbs where id=&id& or rid=&id& order by id asc省去部分代碼session對(duì)象所暫存的id號(hào):forumid2 = session(forumid)if forumid2 = 1 then response.write(游覽)

37、if forumid2 = 2 then response.write(游覽)省去部分代碼showcontent()函數(shù):do while not rs.eof省去顯示文章內(nèi)容的代碼rs.movenextloop4.2.3 發(fā)帖與回復(fù)圖4-5 寫新帖子頁面該頁面實(shí)現(xiàn)較簡單,屬于一個(gè)靜態(tài)表單傳遞頁面,只用于會(huì)員填寫帖子內(nèi)容,關(guān)鍵部分是在提交后的后臺(tái)處理。這里表單傳遞數(shù)據(jù)方法用的是“post”,表單處理程序由標(biāo)準(zhǔn)輸入取得數(shù)據(jù)。將以上內(nèi)容寫好后點(diǎn)擊“提交”按鈕,將由后臺(tái)postings.asp代碼處理并寫入數(shù)據(jù)庫。后臺(tái)以request對(duì)象接受表單傳遞來的數(shù)據(jù),然后將這些數(shù)據(jù)賦給自定義的變量,接著創(chuàng)建

38、recordset對(duì)象實(shí)例來訪問數(shù)據(jù)庫的多個(gè)表,用rs.addnew語句在數(shù)據(jù)庫中添加新的文章信息。這里要特別提出的是新帖子的id號(hào)在數(shù)據(jù)庫中是以自動(dòng)編號(hào)的形式自動(dòng)生成的,從而保證了每個(gè)帖子都有一個(gè)唯一的id號(hào)。完成后則以response對(duì)象的redirect方法提示操作成功并跳轉(zhuǎn),而這里正是以剛才新生成的帖子的主題id號(hào)來做為跳轉(zhuǎn)的條件,這樣就可以直接返回新帖子頁面。以上核心代碼如下:這里的onkeydown=“”的意思是實(shí)現(xiàn)當(dāng)用戶提交帖子時(shí)不需要點(diǎn)擊“提交”按鈕,直接用ctrl+enter組合鍵也能實(shí)現(xiàn)相同的效果,這一點(diǎn)快捷功能在很多的論壇中都有體現(xiàn)。title = mayhtmlenco

39、de(trim(request.form(title)content = trim(request.form(content)省去部分代碼sql=select * from bbsset rs = server.createobject(adodb.recordset)rs.open sql,conn,1,3rs.addnewrs(forumid)=session(forumid)將session對(duì)象保存的版塊id號(hào)寫入數(shù)據(jù)庫rs(title) = title省去部分代碼rs.update添加回復(fù)的頁面和發(fā)表新話題一樣,不同在于選擇“回復(fù)”時(shí)當(dāng)前主題帖子的 id號(hào)做為一個(gè)附加條件一起傳遞給回復(fù)

40、頁面的后臺(tái)代碼,并以當(dāng)前的主題帖的id號(hào)做為查詢條件訪問數(shù)據(jù)庫,在回復(fù)頁面中則可將回復(fù)主題帖子的題目從數(shù)據(jù)庫中讀取出來。在用戶填寫好回復(fù)信息并提交時(shí),剛才保存的主題帖的id號(hào)也一同傳遞到postings.asp文件的回復(fù)處理程序中,將該id號(hào)傳遞給回復(fù)帖子的“rid”標(biāo)示字段,從而保證了回復(fù)的內(nèi)容屬于原來的主題帖子,并可以一同顯示出來。以上核心代碼如下:topicid = request(topicid) 首先得到原帖的id號(hào)topicid = request.form(topicid)主題帖的id號(hào)傳遞到回復(fù)處理程序rs.addnewrs(rid) = topicid 該id號(hào)傳遞給回復(fù)帖子

41、的“rid”標(biāo)示字段注:為方便使用增加了快速回復(fù)功能,其程序?qū)崿F(xiàn)原理與回復(fù)功能一致4.2.4 查看個(gè)人資料會(huì)員可以隨意點(diǎn)擊其他會(huì)員的名字就能查看對(duì)方資料:圖4-6 會(huì)員信息頁面該功能實(shí)現(xiàn)原理同閱讀文章的實(shí)現(xiàn)一致,只是查詢的條件是將從request對(duì)象返回的會(huì)員名字作為查詢數(shù)據(jù)庫里users表的條件,然后將相應(yīng)內(nèi)容讀出。這里要提出的是由于會(huì)員名在保存入數(shù)據(jù)庫時(shí)用到了md5算法加密,而該算法是單向處理的程序,不能解密,所以對(duì)于返回的會(huì)員名字首先要進(jìn)行一次md5加密,將加密后的密文再去和數(shù)據(jù)庫中的內(nèi)容進(jìn)行比較,也在一定程度上保證了信息的安全。 usernamemd5 = md5(trim(reque

42、st(username),32)set rs = conn.execute(select * from users where usernamemd5=&usernamemd5&)用戶名 省去部分代碼會(huì)員也可在“控制面板”中修改自己的信息,該頁面也容易實(shí)現(xiàn),原理同發(fā)表文章類似,在修改信息的表單頁面中填好自己所要修改的信息,然后利用“post”方法將表單數(shù)據(jù)傳遞到usermanager_postings.asp文件里的處理程序中,創(chuàng)建recordset對(duì)象實(shí)例來訪問數(shù)據(jù)庫里的用戶信息表,將新的信息在數(shù)據(jù)庫中進(jìn)行更新。圖4-7 會(huì)員信息修改頁面會(huì)員填好修改信息后,將調(diào)用后臺(tái)處理文件,表單傳遞代碼如

43、下:在處理文件usermanager_postings.asp中自定義了兩個(gè)功能函數(shù),分別是修改會(huì)員資料的usermodify函數(shù)和修改會(huì)員密碼的passwordmodify函數(shù),使用哪個(gè)方法就在action行為后調(diào)用哪個(gè)函數(shù),以實(shí)現(xiàn)功能。同理,修改密碼也是根據(jù)表單傳遞的“post”方法將修改信息傳遞給處理程序調(diào)用passwordmodify函數(shù),并創(chuàng)建recordset對(duì)象實(shí)例來訪問數(shù)據(jù)庫里的用戶信息表,更新會(huì)員密碼。以上核心代碼如下:action = request(action)select case actioncase usermodify修改個(gè)人資料call usermodify(

44、)case passwordmodify修改密碼資料call passwordmodify()case else以上功能查詢數(shù)據(jù)庫都是以當(dāng)前返回的會(huì)員姓名加密后的密問做為查詢條件更新數(shù)據(jù)庫的。4.2.5 個(gè)人好友管理本論壇還為會(huì)員開設(shè)了添加好友或黑名單的功能。進(jìn)入添加好友頁面:圖4-8 會(huì)員好友添加頁面以上功能的實(shí)現(xiàn)是通過會(huì)員對(duì)添加好友還是添加黑名單的不同選擇,調(diào)用friendlist_postings.asp處理程序的addfriend或addcheckuse這兩個(gè)不同的功能函數(shù)實(shí)現(xiàn)。添加好友時(shí)將處理程序的行為是調(diào)用addfriend函數(shù),將添加的會(huì)員姓名作為查詢條件訪問數(shù)據(jù)庫中的frien

45、d表,若存在該會(huì)員且不在當(dāng)前會(huì)員的黑名單中,則將該會(huì)員增加到數(shù)據(jù)庫里;這里程序會(huì)先和當(dāng)前會(huì)員名字比較,防止添加本人。而添加黑名單時(shí)處理程序幾乎一致,只需調(diào)用addcheckuse函數(shù);而兩個(gè)功能最明顯的區(qū)別就在于表中checkuser字段,通過對(duì)表中checkuser字段置1或0來區(qū)別好友和黑名單,因?yàn)闀?huì)員好友名單都是由一張表存放,則以checkuser字段為1是黑名單,為0就是好友來進(jìn)行區(qū)別。friendusername=mayhtmlencode(replacebadchar(trim(request(friendusername)friendusernamemd5 = md5(frien

46、dusername,32)username = md5(request.cookies(bbs)(username),32)if username = friendusernamemd5 then response.write“不能添加自己為好友?!眘ub addfriend()rsadd(checkuser) = the_falsersadd.updatesub addcheckuser()rsadd(checkuser) = the_truersadd.update4.2.6 文章搜索功能本論壇一個(gè)重要功能,即會(huì)員可以根據(jù)一些條件搜索論壇里的相關(guān)文章,十分方便,以下為該頁面:圖4-9 會(huì)員

47、搜索頁面該功能的實(shí)現(xiàn)是根據(jù)會(huì)員所選擇的各種條件,在代碼中由“input”的“ value”值決定。將這些選擇的條件一起通過“post”方法傳遞給后臺(tái)處理程序,處理程序?qū)⒌玫降倪@些參數(shù)作為sql查詢語句的限定條件來決定搜索的范圍,在代碼中以“&”符號(hào)作為查詢條件的連接字符。其中通過“關(guān)鍵詞”傳遞的數(shù)據(jù)作為模糊查詢的條件,語句中以“l(fā)ike”代碼模糊查詢。其他參數(shù)則作為唯一條件查詢。這里的關(guān)鍵代碼如下:關(guān)鍵詞搜索作者搜索日期范圍 :所有日期昨天以來省去部分代碼請(qǐng)選擇要搜索的論壇 全部論壇校園新聞省去部分代碼當(dāng)確定查詢條件后,如選擇“關(guān)鍵詞搜索”,輸入“我是”,然后“日期范圍”定為30天:

48、,查找范圍為“全部論壇”,就會(huì)根據(jù)“關(guān)鍵詞”,“30天”,“全部論壇”這3個(gè)條件進(jìn)行查詢,得到相關(guān)文章信息:圖4-10 搜索結(jié)果頁面:根據(jù)條件處理程序代碼,radio表示為單選框,根據(jù)“ value”確定是使用“關(guān)鍵詞”,于是sql語句條件為 “l(fā)ike”模糊查詢;如果這里選擇是的以“作者”作為查詢條件,則sql語句的條件中直接接上傳遞的作者姓名,不用模糊查詢;然后選擇版塊為“全部論壇”,其值為空,則不加限定,搜索全部版塊號(hào);日期限定“timelimit”不為空,則當(dāng)前日期減去發(fā)帖日期小于限定的“30天”的帖子符合要求: forumid = trim(request.form(forumid)

49、 search = mayhtmlencode(trim(request.form(search) content = trim(request.form(content) timelimit = trim(request.form(timelimit)sql=select * from bbs where rid=0 if search = key then sql = sql & and title like % & content &% else sql = sql & and username = & content & end if if forumid then sql = sql

50、 & and forumid = & forumid & if (timelimit ) then sql = sql & and day(now()-datetime) & timelimit &4.2.7 會(huì)員短消息功能會(huì)員短消息功能是一個(gè)十分實(shí)用的功能,相比其他功能來說更難實(shí)現(xiàn)一些,本設(shè)計(jì)共使用了4個(gè)文件來完成該功能。當(dāng)用戶給某一會(huì)員寫短消息時(shí),首先要將收件人姓名通過request對(duì)象傳遞給一個(gè)變量“to_man”,發(fā)件人即用戶本人的姓名直接從cookies中讀到“from_man”變量中,寫好的表單傳遞給“end.asp”文件處理。在該處理程序中首先會(huì)將變量“to_man”和變量“fr

51、om_man”比較,禁止用戶向自己發(fā)送消息。然后再判斷收件人是否在自己的黑名單中,如果不在,則創(chuàng)建recordset對(duì)象實(shí)例來訪問數(shù)據(jù)庫里的用戶短消息表,將數(shù)據(jù)寫入數(shù)據(jù)庫,完成消息的發(fā)送。表中“isread”字段判斷用戶有無新消息。在每次用戶登陸后都會(huì)先在這里查詢,有未讀消息則提示,用戶可點(diǎn)擊查看新消息。這時(shí)將當(dāng)前用戶名作為查詢條件查詢用戶短消息表,顯示發(fā)送給該用戶的消息,然后將“isread”字段值置1,關(guān)鍵代碼部分:man=request(to_man)from_man=request.cookies(bbs)(username)set rs=server.createobject(adodb.recordset)sql=select * from messagers.open sql,conn,1,3rs.addnewrs(to_man)=manrs(from_man)=from_manrs(isread)=0rs.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論