畢業(yè)設(shè)計-網(wǎng)上貼吧系統(tǒng)-論文_第1頁
畢業(yè)設(shè)計-網(wǎng)上貼吧系統(tǒng)-論文_第2頁
畢業(yè)設(shè)計-網(wǎng)上貼吧系統(tǒng)-論文_第3頁
畢業(yè)設(shè)計-網(wǎng)上貼吧系統(tǒng)-論文_第4頁
畢業(yè)設(shè)計-網(wǎng)上貼吧系統(tǒng)-論文_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

網(wǎng)上貼吧系統(tǒng)目錄摘要 2第一章引

言 2第二章、ASP技術(shù)綜述 32.1

ASP的產(chǎn)生 32.2

ASP與IIS 42.2.1

IIS簡介 42.2.2

IIS與ASP的結(jié)合 42.3

ASP的內(nèi)部特點2.3.1

ASP內(nèi)部6大對象 52.3.2

Global

文件 62.4

利用ADO訪問數(shù)據(jù)庫 62.5

ASP與CGI的比較 8第三章、網(wǎng)上貼吧系統(tǒng)分析及實現(xiàn) 93.1網(wǎng)上貼吧系統(tǒng)說明 93.1.1分析需求,確定思路 103.1.2設(shè)計功能 113.1.3劃分功能模塊 123.2數(shù)據(jù)庫設(shè)計 143.2.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計 14各表之間的聯(lián)系 153.2.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計 163.2.3連接數(shù)據(jù)庫 203.3主要界面及相關(guān)代碼分析 223.3.1用戶登陸 223.3.2用戶注冊 253.3.3版面模塊 353.3.4帖子模塊 383.3.5管理人員模塊 44第四章、網(wǎng)上貼吧系統(tǒng)運行環(huán)境 44第五章、結(jié)論 45第六章、致謝 45第七章、參考文獻 45摘要20世紀末,隨著計算機科學的發(fā)展,數(shù)據(jù)庫技術(shù)在Internet中的應(yīng)用越來越廣泛,為廣大網(wǎng)絡(luò)用戶提供了更加周到和人性化的服務(wù)。個性化已逐漸成為當今Web應(yīng)用的潮流。本文研究了一種基于數(shù)據(jù)關(guān)聯(lián)規(guī)則網(wǎng)上貼吧系統(tǒng),貼吧也稱為BBS,BBS是BULLETINBOARDSYSTEM的縮寫,意即電子公告板,一種在INTERNET上常用的用于信息服務(wù)的web系統(tǒng),他的主要服務(wù)是用來幫助瀏覽者相互溝通,吸引用戶、服務(wù)用戶的。Bbs起源于20世紀80年代初。最初只是用于公布公告信息和討論問題的在線交流平臺;后來隨著網(wǎng)絡(luò)的普及,貼吧的功能越來越豐富。受到廣大網(wǎng)民的歡迎。因此商業(yè)網(wǎng)站對貼吧重視起來,紛紛在自己的網(wǎng)站上開辟貼吧,作為與網(wǎng)民交流的園地,同時在線技術(shù)和在線服務(wù)也在貼吧開展起來。

本文中所做的主要工作如下:(1)介紹了個性化頁面的背景及Win2000+IIS+ASP系統(tǒng)的一般原理;

(2)闡述整個個性化頁面的系統(tǒng)結(jié)構(gòu)及工作原理;分析了系統(tǒng)實現(xiàn)中的特殊性、難點和重點。(3)設(shè)計實現(xiàn)用戶管理、帖子管理、版面管理、數(shù)據(jù)庫管理、瀏覽和查找、短消息功能等ASP頁面

。(4)分析并解決實現(xiàn)中的若干技術(shù)問題。(5)建立完整的網(wǎng)上貼吧,進行測試并分析結(jié)果。【關(guān)鍵詞】網(wǎng)上貼吧、ASP、ACCESS第一章、引

言Internet是目前世界上最大的計算機互聯(lián)網(wǎng)絡(luò),它遍布全球,將世界各地各種規(guī)模的網(wǎng)絡(luò)連接成一個整體。作為Internet上一種先進的,易于被人們所接受的信息檢索手段,World

Wide

Web(簡稱WWW)發(fā)展十分迅速,成為目前世界上最大的信息資源寶庫。據(jù)估計,目前Internet上已有上百萬個Web站點,其內(nèi)容范圍跨越了教育科研、文化事業(yè)、金融、商業(yè)、新聞出版、娛樂、體育等各個領(lǐng)域,其用戶群十分龐大,因此,建設(shè)一個好的Web站點對于一個機構(gòu)的發(fā)展十分重要。近年來,隨著網(wǎng)絡(luò)用戶要求的不斷提高及計算機科學的迅速發(fā)展,特別是數(shù)據(jù)庫技術(shù)在Internet中的廣泛應(yīng)用,Web站點向用戶提供的服務(wù)將越來越豐富,越來越人性化。我們發(fā)現(xiàn)這樣一個事實,一個用戶在訪問一個網(wǎng)站時一般來講只對該網(wǎng)站的部分內(nèi)容感性趣,而且這種興趣會持續(xù)一段時間。這點啟發(fā)了我們,如果能根據(jù)用戶的喜好為不同的用戶顯示其個性化的頁面,即著重顯示該用戶感興趣的內(nèi)容,將為用戶節(jié)約大量的檢索時間,而且這樣的網(wǎng)頁顯然是更具有吸引力的。一些站點已經(jīng)在這方面作出了一定的嘗試,通常采用的方法是,在用戶登陸時為其提供一系列的選項,使用戶能夠?qū)φ军c進行一些自主的設(shè)置。這樣做能夠使站點呈現(xiàn)一定程度的個性化,但是對用戶來講,還是比較煩瑣,而且在用戶了解一個站點前讓其對站點進行設(shè)置,其結(jié)果未免有些粗糙。于是我們構(gòu)想了這樣一種方案,對用戶登陸后的動作進行跟蹤,分析,發(fā)掘用戶點擊的規(guī)律,即用戶先后點擊的關(guān)聯(lián)規(guī)則,這樣,在用戶點擊一個主題(鏈接)之后,系統(tǒng)能夠自動生成一頁面,其中包含了該主題下用戶經(jīng)常關(guān)注的內(nèi)容(若干鏈接),這樣便在無須用戶作出任何額外工作的情況下實現(xiàn)了為用戶量身訂做的個性化頁面。要實現(xiàn)這樣的功能,離不開后臺數(shù)據(jù)庫的支持。用戶驗證信息,收集到的用戶點擊信息,主題層次信息,分析得出的關(guān)聯(lián)規(guī)則表等大量的數(shù)據(jù)都由數(shù)據(jù)庫管理系統(tǒng)管理。本文中數(shù)據(jù)庫服務(wù)器端采用了Microsoft

Access數(shù)據(jù)庫作為ODBC(Open

DataBase

Connectivity

)數(shù)據(jù)源,并以先進的ADO(ActiveX

Data

Objects)技術(shù)進行數(shù)據(jù)庫存取等操作,使Web與數(shù)據(jù)庫緊密聯(lián)系起來。整個個性化頁面生成系統(tǒng)主要由使用Dreamweaver_MX開發(fā)的關(guān)聯(lián)規(guī)則采掘系統(tǒng)和利用IIS+ASP技術(shù)實現(xiàn)的個性化Web頁面生成器兩部分組成。關(guān)聯(lián)規(guī)則采掘系統(tǒng)對數(shù)據(jù)庫中的歷史記錄進行分析,產(chǎn)生用戶關(guān)聯(lián)規(guī)則表;頁面生成器則負責記錄用戶行為和根據(jù)關(guān)聯(lián)規(guī)則表動態(tài)生成用戶個性化Web頁面。二者通過數(shù)據(jù)庫服務(wù)器和Web服務(wù)器連接。本文作者主要完成Web服務(wù)器端的用戶管理、帖子管理、版面管理、數(shù)據(jù)庫管理、瀏覽和查找、短消息功能等設(shè)計、實現(xiàn)與完善以及整個實驗網(wǎng)站的組織建立和測試工作。第二章、ASP技術(shù)綜述2.1

ASP的產(chǎn)生近年來隨著Internet技術(shù)的飛速發(fā)展及用戶需求的不斷升級,Web頁面技術(shù)也不斷的推陳出新,使得Web站點的功能越來越強大,能夠提供的服務(wù)種類越來越繁多。從HTML、Client

Script

到CGI,從JAVA的誕生到ActiveX,

Web頁面設(shè)計人員不斷受到?jīng)_擊,微軟公司在總結(jié)了以往技術(shù),重新思考Web頁面設(shè)計的真正需要后,推出了Active

Server

Pages

(ASP),一種用以取代CGI(Common

Gateway

Interface,通用網(wǎng)關(guān)接口)的技術(shù)。簡單講,ASP是位于服務(wù)器端的腳本運行環(huán)境,通過這種環(huán)境,用戶可以創(chuàng)建和運行動態(tài)的交互式

Web

服務(wù)器應(yīng)用程序,如交互式的動態(tài)網(wǎng)頁,包括使用

HTML

表單收集和處理信息,上傳與下載等等。更重要的是,ASP使用的ActiveX技術(shù)基于開放設(shè)計環(huán)境,用戶可以自己定義和制作組件加入其中,使自己的動態(tài)網(wǎng)頁幾乎具有無限的擴充能力,這是傳統(tǒng)的Web編寫工具所遠遠不及的地方。使用ASP還有個好處,就在于ASP可利用ADO(Active

Data

Object,微軟的一種新的數(shù)據(jù)訪問模型)方便快捷地訪問數(shù)據(jù)庫,從而使得開發(fā)基于WWW的應(yīng)用系統(tǒng)成為可能,這也是本文選擇ASP作為開發(fā)工具最重要的原因之一。2.2

ASP與IIS2.2.1

IIS簡介Web服務(wù)器是Web應(yīng)用程序的心臟。IIS(Internet

Information

Server)是微軟推出的Windows

NT

Option

Pack的主要成員,作為Win2000server的擴展,自推出以來已經(jīng)有了很大發(fā)展,其體系結(jié)構(gòu)是當今市場上最受關(guān)注的Web服務(wù)器之一。新推出的IIS4.0版本增強了系統(tǒng)安全性,具有服務(wù)器端腳本開發(fā)調(diào)試,內(nèi)容管理和站點分析,崩潰防護,內(nèi)置JAVA虛擬機及全面支持ASP等強大功能。2.2.2

IIS與ASP的結(jié)合在過去,客戶機/服務(wù)器結(jié)構(gòu)的設(shè)計與Web的相關(guān)技術(shù)幾乎處于平行線上,兩者相互獨立并無法作出集成性的設(shè)計。現(xiàn)在我們利用IIS+ASP構(gòu)成三層式Web結(jié)構(gòu)(如圖2.1所示)的中間一層,將客戶機/服務(wù)器結(jié)構(gòu)與Web密切結(jié)合,完成前后端兩者的集成輸出功能,使得Web站點的開發(fā)更方便,實現(xiàn)的功能更強大。利用IIS+ASP技術(shù)來集成Web前后端所帶來的強大效益可歸結(jié)為以下幾個方面:1.減少構(gòu)建和維護成本2.加快聯(lián)機過程3.應(yīng)用軟件集中在服務(wù)器端開發(fā)管理4.前端可使用任何5.后端可存取任何數(shù)據(jù)庫

(SQL、Access…..)6.可使用任何腳本語開發(fā)

(VBScript、JavaScript、PERL…..)瀏覽器(IE、Netscape…..)2.3

ASP的內(nèi)部特點2.3.1

ASP內(nèi)部6大對象ASP提供了6個功能強大的內(nèi)部對象,每個對象具有各自的屬性(Property)、方法(Method),有的還擁有數(shù)據(jù)集合(Collection)與事件(Event),它們共同完成Web中的一些重要工作。這6個對象及其功能描述如表2.1所示。表2.1

ASP

內(nèi)部6大對象及其功能對象名稱功能描述Request從客戶端取得信息Response將信息送給客戶端Server提供一些Web服務(wù)器工具Session儲存在一個Session內(nèi)的用戶信息,該信息僅可被該用戶訪問Application在一個ASP-Application中讓不同的客戶端共享信息ObjectContext配合Microsoft

Transaction服務(wù)器進行分布式事務(wù)處理合理地運用這些對象可以使原本復(fù)雜,煩瑣的工作變得簡捷而條理清晰。我們可以用以下的語法直接使用這些對象:對象/屬性/方法/數(shù)據(jù)集合2.3.2

Global

文件每一個以Active

Server

Pages為基礎(chǔ)的應(yīng)用程序都擁有一個Global.asa文件(ASA后綴名其實是Active

Server

Application的縮寫),它位于每一個應(yīng)用程序的基點目錄之下。當Active

Server

Pages做下面兩個動作時,Server便會去讀Global.asa文件:1.Web

Server啟動之后,一個應(yīng)用程序目錄中任一個ASP文件被提出第一個HTTP請求(Request)時。2.不具有任何Session的客戶端向Server請求一個ASP文件時。前面已經(jīng)提到Application和Session這兩個ASP的內(nèi)部對象。Application對象內(nèi)的信息供所有正在執(zhí)行該應(yīng)用程序的用戶分享,它創(chuàng)建于Web

Server啟動后一個應(yīng)用程序中任一ASP文件被提出第一個HTTP請求時,結(jié)束于Server端停止運行。而Session對象僅屬于一位用戶,維持一個用戶端的信息,其他用戶無法訪問,它創(chuàng)建于一個不具有Session的用戶向Server請求一個ASP文件時,結(jié)束于該Session到期(即用戶端超過某時間段沒有向Server提出要求或刷新Web頁面)或Abandon語句的調(diào)用。可見,Global.asa文件的調(diào)用與Application與Session這兩個對象密切相關(guān)。事實上我們通常在Global。asa文件中寫入以下內(nèi)容:1.Application或Session的開始事件(Start-event)。2.Application或Session的結(jié)束事件

(End-event)。這樣,在一個Application或Session對象被創(chuàng)建或結(jié)束時,系統(tǒng)會自動完成Global.asa文件中寫入的相應(yīng)事件。值得注意的是,如果一個Application與一個Session同時開始,Active

Server

Pages會先處理Application的開始事件,而如果一個Application與一個Session同時結(jié)束,Active

Server

Pages則會先處理Session的結(jié)束事件。2.4

利用ADO訪問數(shù)據(jù)庫ADO(ActiveX

Data

Objects)是一種操作Microsoft所支持的數(shù)據(jù)庫的新技術(shù)。在ASP中,ADO可以看作是一個服務(wù)器組件(Server

Component),更簡單點說,是一系列的對象,應(yīng)用這些功能強大的對象,即可輕松完成對數(shù)據(jù)庫復(fù)雜的操作。本文中個性化頁面的實現(xiàn)便大量地用到了ADO技術(shù)。具體的操作步驟可以歸納為以下幾步:1.創(chuàng)建數(shù)據(jù)庫源名(DSN)2.創(chuàng)建數(shù)據(jù)庫鏈接(Connection)3.創(chuàng)建數(shù)據(jù)對象4.操作數(shù)據(jù)庫5.關(guān)閉數(shù)據(jù)對象和鏈接每一步的作法如下:一、創(chuàng)建數(shù)據(jù)源名DSN(Date

Source

Name)即數(shù)據(jù)源名稱。我們知道,ODBC是一種訪問數(shù)據(jù)庫的方法,只要系統(tǒng)中有相應(yīng)的ODBC驅(qū)動程序,任何程序就可以通過ODBC操縱驅(qū)動程序的數(shù)據(jù)庫。比如我們系統(tǒng)中有Access的ODBC驅(qū)動程序,那么即使我們沒有Access軟件,也可以在我們的程序中對一個Access的MDB數(shù)據(jù)庫加、刪、改記錄。而且我們根本不用知道這個數(shù)據(jù)庫是放在哪里的。我們只要寫出SQL語句,ODBC驅(qū)動程序就會幫我們做一切事情。我們在給ODBC驅(qū)動程序傳SQL指令時,即是用DSN來告訴它到底操作的是哪一個數(shù)據(jù)庫。如果數(shù)據(jù)庫的平臺變了,比如我們改用了SQL

Server的數(shù)據(jù)庫,只要其中表的結(jié)構(gòu)沒變,我們就不用改寫我們的程序,只要重新在系統(tǒng)中配置DSN就行了。由此可見,DSN是應(yīng)用程序和數(shù)據(jù)庫之間的橋梁。二、創(chuàng)建數(shù)據(jù)庫鏈接(Connection)鏈接用以保持一些關(guān)于正在訪問的數(shù)據(jù)的一些狀態(tài)信息,以及鏈接者信息。ASP文件中如果要訪問數(shù)據(jù),必須首先創(chuàng)建與數(shù)據(jù)庫的鏈接,其語法如下:set

Conn=Server.createObject(“ADODB.CONNECTION”)這條語句創(chuàng)建了鏈接對象Conn,接下來:Connstr="Driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath(db)conn.Open

connstr這條語句打開鏈接,用到了DSN,本例為“connstr”。以上兩個步驟缺一不可,因為鏈接對象的創(chuàng)建與打開是兩回事,只有打開了才真正可以使用。三、創(chuàng)建數(shù)據(jù)對象(Record

Set)ADO中的數(shù)據(jù)對象通常保存的是查詢結(jié)果。Record

Set是ADO中最復(fù)雜的對象,有許多屬性和方法。Record

Set保存的是一行行的記錄,并標有一個當前記錄。以下是創(chuàng)建方法:Set

Record

Set=Conn.Execute(sqtStr)這條語句創(chuàng)建并打開了對象Record

Set,其中Conn是先前創(chuàng)建的鏈接對象,sqtStr是一個字串,代表一條標準的SQL語句。例如:sqtStr=“SELECT

*

FROM

shop_books”Set

Record

Set=Conn.Execute(sqtStr)這條語句執(zhí)行后,對象Record

Set中就保存了表tab1中的所有記錄。四、操作數(shù)據(jù)庫我們通過調(diào)用鏈接對象的Execute方法來將查詢結(jié)果返回給一個數(shù)據(jù)對象或進行插入、刪除、修改等操作。例如:sqtStr=“INSERT

INTO

tab1

VALUES(1,2)”Conn.Execute(sqtStr)/執(zhí)行插入操作sqtStr=“Delete

from

tab1where

a=b”/執(zhí)行刪除操作sqtStr=“update

tabset

a=b,c=d”/執(zhí)行修改操作五、關(guān)閉數(shù)據(jù)對象和鏈接對象在使用了ADO對象之后要關(guān)閉它,因為它使用了一定的服務(wù)器資源。通過調(diào)用方法close實現(xiàn)關(guān)閉,然后再釋放它。Record

Set.closeSet

Record

Set=Nothing/關(guān)閉創(chuàng)建的數(shù)據(jù)對象Conn.closeSet

/關(guān)閉創(chuàng)建的鏈接對象2.5

ASP與CGI的比較CGI(Common

Gateway

Interface,通用網(wǎng)關(guān)接口)也是Internet上一種功能強大的Web頁面技術(shù),其工作方式有別于ASP。我們現(xiàn)對二者進行比較。Active

Server

Pages開發(fā)Web應(yīng)用程序的特點:1.完全嵌入HTML,與HTML、Script語言完美結(jié)合。2.無須手動編譯和鏈接程序。3.面向?qū)ο螅⒖蓴U展ActiveX

Server組件功能。4.使用腳本語言(JavaScript、VBScript或PERL)編寫。5.存取數(shù)據(jù)庫輕松容易(使用ADO組件)。6.可使用任何語言編寫自己的ActiveX

Server組件。7.無瀏覽器兼容問題。8.程序代碼隱藏,客戶端僅能看到ASP輸出的HTML文件。9.縮短Web開發(fā)時間。相比之下,使用CGI開發(fā)Web應(yīng)用程序具有以下缺點:1.不易與HTML文件集成。2.須使用其他較復(fù)雜的語言來開發(fā)CGI程序。3.程序開發(fā)時間較長。4.存取數(shù)據(jù)庫不容易。5.每個CGI程序被不同用戶執(zhí)行時都得重新執(zhí)行一次,并占去Server的一個端口(Port),降低Server效率。可見,ASP在數(shù)據(jù)庫訪問、與HTML的集成、提高服務(wù)器的效率等諸多方面都優(yōu)于CGI,更適應(yīng)Web應(yīng)用程序開發(fā)的需要,因此本文選擇了ASP作為個性化頁面生成器的開發(fā)工具。第三章、網(wǎng)上貼吧系統(tǒng)分析及實現(xiàn)3.1網(wǎng)上貼吧系統(tǒng)說明在開始制作之前,要明確貼吧能做些什么事情,,也就是所謂的需求。所以必須把需求做清楚,然后才能進行設(shè)計。其實在貼吧里大家最熟悉的就是用戶瀏覽貼吧已有的內(nèi)容,針對別人的主題展開討論,也可以發(fā)表自己的觀點供大家品評。同時為了防止用戶發(fā)布一些不健康不合法的內(nèi)容需要有管理人員來對這些內(nèi)容進行刪除修改,在擴展一點,若用戶想在貼吧發(fā)布信息,不允許他再來發(fā)布非法內(nèi)容。這樣需要管理員對用戶和貼吧的內(nèi)容都要進行管理。我們要做一個多版面的貼吧。在這里用戶可以注冊,瀏覽貼吧版面和帖子,發(fā)布自己的帖子,也可以相互聯(lián)系。管理人員可以設(shè)置貼吧的系統(tǒng)參數(shù),管理注冊用戶和版面。當用戶來到貼吧可以看到版面列表。通過版面可以看到相關(guān)的帖子。如果需要進一步的功能,就需要用戶注冊。用戶注冊以后,可以發(fā)表自己的帖子或者回復(fù)別人的主題,也可以修改自己的帖子,如果發(fā)帖數(shù)量很多,會給用戶一定的積分。用戶也可以升級為版主,可以刪除別人的帖子,將帖子置頂,設(shè)為精華等。用戶還可以修改自己的信息,查看其他用戶公開的注冊信息。管理人員可以管理版面、帖子、用戶、設(shè)置系統(tǒng)參數(shù)。3.1.1分析需求,確定思路瀏覽者瀏覽者注冊登錄瀏覽板塊瀏覽帖子回復(fù)用戶發(fā)帖管理用戶管理帖子搜索管理員管理版塊首先來做名詞分析。大家可能覺得奇怪,這不是閱讀理解,為什么要做這個?分析需求就是要理解需求,得出重點。首先要做的就是找出這個貼吧要針對哪些進行操作,對需求中的名詞進行一次篩選,得出一個簡潔的列表。下邊這個表是表示各個對象間關(guān)聯(lián)的,關(guān)聯(lián)是單向的,是指左側(cè)對象對上方對象的活動。沒有關(guān)聯(lián)我們就用X,如果兩者只有單向關(guān)聯(lián),那么另一個對象反關(guān)聯(lián)時我們用對號表示。根據(jù)需求,得出各個對象間的關(guān)聯(lián)表。如表3.1所示表3.1個對象間的關(guān)聯(lián)表用戶版面帖子管理人員系統(tǒng)參數(shù)用戶注冊】修改瀏覽聯(lián)系瀏覽瀏覽發(fā)布修改刪除特殊操作√X版面√XX√X帖子√XX√X管理人員刪除授權(quán)添加刪除修改添加刪除修改X設(shè)置系統(tǒng)參數(shù)XX√X3.1.2設(shè)計功能有了表3.1就可以進行十實質(zhì)性的工作了。現(xiàn)在就來設(shè)計功能。首先從用戶開始,在表3.1中用戶關(guān)聯(lián)的對象是自身,版面,帖子,分別根據(jù)用戶與這些對象的聯(lián)系給出一個明確的菜單,見表3.2表3.2用戶功能列表序號功能名稱說明1用戶注冊用戶在貼吧填寫必要的信息后就可以注冊成為注冊用戶,用戶登錄網(wǎng)站可以修改自己的用戶信息2用戶登錄用戶在貼吧注冊后,可以使用用戶名密碼在貼吧登錄3瀏覽其他用戶信息用戶注冊后可以查看其他用戶信息4瀏覽版面用戶可以看到以列表形class.asp式展現(xiàn)的版面信息5瀏覽帖子用戶可以以列表形式瀏覽帖子主題及帖子的全部內(nèi)容6發(fā)布刪除修改帖子用戶在登錄后可以發(fā)布帖子,修改自己的帖子。如果被賦予版主權(quán)限還可以修改其他用戶的帖子7與其他用戶聯(lián)系在用戶注冊時要求用戶填寫電子郵件地址,那么其他用戶可以利用電子郵件與其聯(lián)系8對帖子特殊操作接下來的版面,帖子都沒有和其他對象的關(guān)聯(lián),他們在貼吧屬于被動的對象,是被其他對象所操作的。因此針對他們的功能主要是由其他對象產(chǎn)生,例如瀏覽版面就屬于用戶的功能。管理人員是貼吧的一個特殊群體,他們的主要工作的是保證貼吧的正常運轉(zhuǎn),他們可以和所有對象產(chǎn)生聯(lián)系,因此他們的功能也很豐富。表3.3列出了管理人員的功能。表3.3管理人員功能列表序號功能名稱說明1用戶刪除對于在貼吧發(fā)表一些非法言論。給貼吧造成很壞的影響的用戶應(yīng)該刪除他們的身份,不允許他們的存在2用戶授權(quán)貼吧的管理是紛繁復(fù)雜的,需要很多的知識需要給一些具有能力用戶一些特殊權(quán)限讓他們幫助管理人員完成對貼吧的維護。3版面管理版面是貼吧的枝干,對于新的只是需要添加新的版面有些版面的內(nèi)容可能不太適合了可以考慮修改,對于沒有存在意義的版面就要刪除了。4帖子的管理帖子是一個貼吧的葉子,他們的內(nèi)容如何,反應(yīng)了貼吧使用者和管理這的水平,需要管理人員對帖子的全權(quán)管理,以保證貼吧內(nèi)容的水平。、5設(shè)置系統(tǒng)參數(shù)系統(tǒng)參數(shù)包含的內(nèi)容很多他們直接關(guān)系到貼吧的正常運行。現(xiàn)在系統(tǒng)功能部分已經(jīng)分析完了,接下來需要對這些功能進行分類,同時根據(jù)功能給出詳細的數(shù)據(jù)庫設(shè)計。3.1.3劃分功能模塊一般初學程序設(shè)計的人,即掌握了某種程序設(shè)計語言的語法,按照教材做過簡單實例的人,在遇到現(xiàn)實生活的應(yīng)用系統(tǒng)時,他的分析思路是從計算機實現(xiàn)的角度來考慮問題,而不是從系統(tǒng)的使用者的角度考慮問題,這就制約了他的思路一個系統(tǒng)是給人用的,開發(fā)者需要考慮用戶使用起來是否方便,而不是及其實現(xiàn)起來是否方便。模塊的劃分主要是按每一個對象操作來歸類。貼吧操作的對象是上面所歸納的5個,下面就針對這5個對象劃分功能模塊。用戶:應(yīng)該有兩個模塊,一個是用戶注冊、登錄、修改信息等功能組合,是用戶對用戶的操作;另一個是管理人員對用戶進行刪除,授權(quán),是管理人員對用戶的操作。這兩個模塊功能列表如3.4所示表3.4用戶功能模塊列表模塊模塊包含的功能用戶模塊用戶注冊用戶登錄瀏覽其他用戶信息與其他用戶聯(lián)系用戶控制自己的信息用戶登錄添加驗證碼管理人員模塊用戶刪除用戶授權(quán)版面:也有兩個模塊,一個是瀏覽模塊,一個是管理模塊,其功能模塊列表如表3.5所示表3.5版面功能模塊列表模塊模塊包含的功能版面瀏覽模塊瀏覽版面版面管理模塊版面管理帖子:帖子的功能是最多的,也是最復(fù)雜的,但是仍把它分為兩大模塊。根據(jù)操作對象來區(qū)分,有很多功能是重復(fù)的,但是由于操對象不同仍然需要列出。其功能如表3.6所示表3.6帖子功能模塊模塊模塊包含的功能帖子模塊瀏覽帖子發(fā)布、修改、刪除帖子對帖子的特殊操作帖子收藏帖子搜索帖子管理模塊帖子管理管理人員:管理人員主要是對其它對象進行操作,針對他的模塊就沒有了。但是這里很多模塊的操作人員是他,同時把系統(tǒng)參數(shù)設(shè)置的功能也劃分出來。其功能列表如表3.7所示。表3.7管理人員管理功能模塊模塊模塊包含的功能管理人員管理模塊設(shè)置系統(tǒng)參數(shù)數(shù)據(jù)備份非法言論過濾非法IP限制這樣貼吧的模塊劃分就完成了。從以上分析可以了解到模塊劃分的依據(jù),就是功能的使用者。從表可以的到貼吧的功能框架,即系統(tǒng)的各個部分已經(jīng)確定,知道貼吧是什么樣的,但是要把貼吧系統(tǒng)完整的構(gòu)架出來,還需要進一步思考模塊間的關(guān)系。3.8貼吧整體架構(gòu)圖注冊登錄注冊登錄用戶管理用戶選擇板塊瀏覽帖子發(fā)帖回帖管理板塊管理帖子搜索管理員3.2數(shù)據(jù)庫設(shè)計貼吧系統(tǒng)信息的存儲一般是在文件或者數(shù)據(jù)庫中,在這里選擇數(shù)據(jù)庫,用數(shù)據(jù)庫要簡單高效一些,能夠?qū)N吧進行更好的控制。使用數(shù)據(jù)庫的第一步就是涉及數(shù)據(jù)庫的表結(jié)構(gòu),一個良好的數(shù)據(jù)庫表結(jié)構(gòu),可以提高效率,方便維護,并且以后進行功能的擴充留有余地,就好比高樓大廈的地基一樣,有了穩(wěn)固的基礎(chǔ),才能有優(yōu)秀的成果。下面來設(shè)計貼吧的數(shù)據(jù)庫。3.2.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計首先給出貼吧使用的數(shù)據(jù)表如表3.9所示表3.9貼吧數(shù)據(jù)表序號表名說明1QiQiBoy_Admin_Disp管理員信息表2QiQiBoy_Board_Disp貼吧列表3QiQiBoy_Class_Disp二級版面信息表4QiQiBoy_Nlass_Disp一級版面信息表5QiQiBoy_Status_Disp貼吧狀態(tài)表6QiQiBoy_System_Disp系統(tǒng)信息表7QiQiBoy_Topic_Disp主題,帖子信息表8QiQiBoy_User_Disp用戶信息表各表之間的聯(lián)系用戶用戶名用戶密碼郵箱地址用戶用戶名用戶密碼郵箱地址主題主題名主題內(nèi)容主題狀態(tài)主題發(fā)表人主題主題名主題內(nèi)容主題狀態(tài)主題發(fā)表人帖子帖子帖子編號帖子所屬版面帖子內(nèi)容帖子狀態(tài)版面版面版面名稱上級版面號版面編號版主3.2.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計完畢就可以通過數(shù)據(jù)庫軟件轉(zhuǎn)化為實際的數(shù)據(jù)模型,即數(shù)據(jù)庫的邏輯設(shè)計。本系統(tǒng)采用的數(shù)據(jù)庫軟件是MICROSOFTACCESS.用戶信息表(QiQiBoy_User_Disp)序號字段名字段類型說明備注1UserID自動編號用戶編號主鍵2UserName文本用戶帳號3Pwd文本用戶密碼4Sex數(shù)字用戶性別5Email文本用戶郵箱6OICQ文本用戶qq7Question文本找回密碼提示問題8Answer文本提示答案9UserGroupID數(shù)字用戶類別10Ip文本用戶IP11RegTime日期/時間用戶注冊時間12LastLogin日期/時間用戶最后登錄時間13Visits數(shù)字用戶訪問次數(shù)14LockUser數(shù)字是否鎖定15Integral數(shù)字用戶積分16Topics數(shù)字用戶發(fā)表主題數(shù)17Replys數(shù)字用戶回復(fù)帖子數(shù)18Area文本用戶地址19Websites文本用戶主頁20List備注用戶簡介21Photo文本用戶頭像在用戶信息表里保存的是所有在貼吧注冊的用戶的信息,用戶編號是用戶在貼吧的唯一標識,是不重復(fù)的,同時用戶名在貼吧中也是不能重復(fù)的,大家可能奇怪既然用戶名也不可以重復(fù),為什么不用用戶名作為用戶在貼吧中的唯一標識呢?大家可以考慮一下,假如你有一份一百個人的名單,每個人有一個序號,這是讓你從中找一個人,如果只告訴你名字,那么找起來會很麻煩,如果告訴你他是多少號是不是要簡單的多?同樣道計算機對數(shù)字的檢索更加快速,特別是用用戶很所的時候。用戶名和密碼是不能為空的,這是因為當用戶名登錄時必須輸入用戶名和密碼我們才能定位到用戶的信息,驗證用戶是不是真正在貼吧注冊了,電子郵件不能為空的目的是為了是其他用戶能夠很方便的和該用戶聯(lián)系,同時又可以作為用戶忘記密碼是取回密碼的聯(lián)系方式。密碼問題和密碼答案的主要應(yīng)用是。當用戶忘記密碼時,由系統(tǒng)提問,如果用戶能夠準確的給出密碼答案我們將提示給用戶密碼。2.管理員信息表(QiQiBoy_Admin_Disp)序號字段名字段類型說明備注1ID自動編號管理員ID主鍵2uid文本管理員姓名3pwd文本管理員密碼4groups文本管理員類別5loginip文本管理員登錄IP6updatetime日期/時間管理員最后登錄時間7loginnum數(shù)字管理員登錄次數(shù)3.二級版面信息表(QiQiBoy_Class_Disp)序號字段名字段類型說明備注1BoardClass自動編號二級版面編號主鍵2BoardClassName文本二級版面名字3BoardNlass數(shù)字上級版面4.貼吧狀態(tài)表(QiQiBoy_Status_Disp)序號字段名字段類型說明備注1StatusID自動編號狀態(tài)信息ID主鍵2RegUsers數(shù)字注冊用戶數(shù)3TotalBoards數(shù)字版面數(shù)4TotalTopics數(shù)字主題數(shù)5TotalReplys數(shù)字回復(fù)主題數(shù)5.版面信息表2(QiQiBoy_Class_Disp)序號字段名字段類型說明備注1BoardNlass自動編號一級版面ID主鍵2BoardNlassName文本版面名稱版面列表(QiQiBoy_Board_Disp)序號字段名字段類型說明備注1BoardID數(shù)字版面ID主鍵2BoardNlass數(shù)字二級版面編號3BoardClass數(shù)字一級版面編號4BoardName文本版面名稱5BoardDescription文本版面描述6BoardMaster文本版主7LastModify日期/時間最后修改時間8BoardTopics數(shù)字版面主題數(shù)9BoardReplys數(shù)字版面回復(fù)數(shù)6.系統(tǒng)信息表(QiQiBoy_System_Disp)序號字段名字段類型說明備注1SystemID自動編號系統(tǒng)信息編號主鍵2SystemName文本網(wǎng)站名稱3SystemList文本網(wǎng)站介紹4SystemUrl文本網(wǎng)站地址5SystemLogo文本網(wǎng)站LOGO6SystemUser網(wǎng)站站長7Systememailr文本郵件地址8SystemQQ文本QQ號碼9SystemReg備注注冊提示信息10SystemHelp備注網(wǎng)站幫助指南11SystemPic備注12SystemFilter備注過濾字符13SystemMeun備注首頁導(dǎo)航菜單14SystemFont文本字體顏色15SystemRefresh數(shù)字開啟/關(guān)閉防刷新功能16SystemRefreshTime數(shù)字防刷新間隔時間17SystemOff數(shù)字網(wǎng)站開啟/關(guān)閉18SystemVip數(shù)字會員發(fā)表/回復(fù)帖子19SystemUbb數(shù)字UBB編輯功能20SystemUp數(shù)字圖片上傳功能21SystemMailAddress文本在線發(fā)送郵箱地址22SystemSmtpAddress文本發(fā)送郵箱SMTP地址23SystemMailName文本發(fā)送郵箱登陸帳號24SystemMailPass文本發(fā)送郵箱登陸密碼25SystemCopyTxt文本26SystemCode數(shù)字27SystemEmNum數(shù)字帖子表情允許數(shù)目這是個核心表,但是他的每個字段都很簡單,貼吧設(shè)置字段存儲了貼吧名稱,貼吧地址,貼吧聯(lián)系方式,過濾詞這個字段很重要。他的內(nèi)容是不允許發(fā)布在貼吧上的當用戶發(fā)布題寫非法言論是,可以通過這個字段檢查出來。7.主題,帖子信息表(QiQiBoy_Topic_Disp)序號字段名字段類型說明備注1TopicID自動編號主題id主鍵2ParentID數(shù)字父文章id3RootID數(shù)字主題號4BoardNlass數(shù)字一級版面號5BoardClass數(shù)字二級版面號6UserName文本發(fā)表主題者7LastPost文本最后發(fā)帖者8Title文本主題類型9Content備注主題內(nèi)容10Img文本主題圖片內(nèi)容11DateAndTime日期/時間發(fā)表主題時間12UpdateTime日期/時間最后發(fā)帖時間13Reads數(shù)字閱讀次數(shù)14Replys數(shù)字回復(fù)次數(shù)15Status數(shù)字主題狀態(tài)16TopicIp文本發(fā)表主題者的IP17ReplyIp文本回復(fù)者的IP18Favorite備注收藏該主題3.2.3連接數(shù)據(jù)庫在整個系統(tǒng)開發(fā)的過程中,數(shù)據(jù)庫連接是必不可少的,是公用的,我們可以把這一部分先拿出來,單獨做成一個頁面,在需要的時候只需要調(diào)用這個頁面就可以了,而不用每次都去寫連接數(shù)據(jù)庫的程序,這個做法叫做復(fù)用,是在程序開發(fā)中經(jīng)常用到的。首先要建立同數(shù)據(jù)源的連接,我們利用ADO的Connection來建立同數(shù)據(jù)庫的連接。建立asodb.connection對象,使用此對象的open方法打開數(shù)據(jù)庫。現(xiàn)在來看代碼如程序3.01所示:數(shù)據(jù)庫連接程序(conn.asp)<%.OnErrorResumeNextDimConn,Connstr,DbDb="data/data.mdb"Setconn=Server.CreateObject("ADODB.Connection")Connstr="Driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath(db)Conn.OpenConnstrIfErrThenerrclearresponse.write"<fontsize=""4"">·數(shù)據(jù)庫連接錯誤</font>"Response.EndEndIfFunctionCloseDatabaseConn.closeSetEndFunction%>第一行是容錯語句,發(fā)生錯誤后,繼續(xù)執(zhí)行下一句,接下來就用dim聲明了變量rs,sql,Conn,Connstr,Db,connstr這個變量是用來存儲連接數(shù)據(jù)庫的信息的,變量db聲明了數(shù)據(jù)庫文件所在的路徑。第五行,為connstr賦值。這是很關(guān)鍵的一步,這里聲明的是oledb連接數(shù)據(jù)庫的方式,只看datasourse部分,他后面跟的是數(shù)據(jù)庫文件的路徑。Server.mappath函數(shù)是asp內(nèi)置的server對象的一個函數(shù),用來獲取五網(wǎng)站目錄下文件的絕對路徑。在7~9行寫了一個判斷錯誤的信息,如果連接數(shù)據(jù)庫錯誤,系統(tǒng)會給出一個錯誤,這時候通過asp的err對象判斷錯誤的存在,首先將錯誤信息從內(nèi)存清除,然后將conn對象從內(nèi)存中清除。3.3主要界面及相關(guān)代碼分析數(shù)據(jù)庫連接完了,接下來要做的就是實際模塊程序的編寫了。首先要寫的是用戶模塊,用戶模塊包含7個功能,其中有些功能是相輔相成的。現(xiàn)在就一步步地實現(xiàn)本模塊的功能。3.3.1用戶登陸我們已經(jīng)有了用戶信息表,其中的用戶名和用戶密碼字段是用來驗證用戶身份的,有了這兩個字段,我們就可以很容易地寫出驗證用戶登陸的程序了。首先來看用戶登陸的界面,如圖所示。我們將這個頁面命名為login.asp,先看頁面的內(nèi)容。“用戶帳號”和“用戶密碼”這兩項就是用來讀取用戶名和密碼的地方。接下來是一個cookie選項,cookie是用來保存用戶信息的一種方式,系統(tǒng)登錄頁面所涉及的HTML表單元素如表2所示:表2系統(tǒng)登錄頁面所涉及的HTML表單元素名稱類型含義重要屬性formForm表單action="loginfox.asp"method="POST"UserNametext用戶帳號onFocus="this.select();"onmouseover="this.style.background='#EAEAEA';"onmouseout="this.style.background='#FFFFFF'"Passwordpassword用戶密碼onFocus="this.select();"onmouseover="this.style.background='#EAEAEA';"onmouseout="this.style.background='#FFFFFF'"verifycodetext驗證碼onFocus="this.select();"onmouseover="this.style.background='#EAEAEA';"onmouseout="this.style.background='#FFFFFF'"size="6"maxlength="4"AutoLogincheckboxCookiestype="checkbox"id="AutoLogin"value="true"submitsubmit【我要登錄】按鈕class="input"value="我要登錄"submit2reset【擦除重填】按鈕value="擦除重填"class="input"驗證用戶身份程序(loginfox.asp)<%dimUserName,Password,VerifyCodeUserName=replace(trim(Request.form("UserName")),"'","")Password=replace(trim(Request.form("Password")),"'","")VerifyCode=replace(trim(Request.Form("VerifyCode")),"'","")ifUserName=""thenresponse.write("<script>alert('友情提示!\n\n用戶帳號不能為空!');history.back();</script>")response.endendififPassword=""thenresponse.write("<script>alert('友情提示!\n\n用戶密碼不能為空!');history.back();</script>")response.endendifIfHOST_CODE=0thenifVerifyCode=""thenresponse.write("<script>alert('友情提示!\n\n驗證編碼不能為空!');history.back();</script>")response.endendififVerifyCode<>Trim(Session("VerifyCode"))thenresponse.write("<script>alert('友情提示!\n\n驗證編碼錯誤!');history.back();</script>")response.endendifendifip=request.ServerVariables("HTTP_X_FORWARDED_FOR")ifip=""thenip=request.ServerVariables("REMOTE_ADDR")Sql="select*from[QiQiBoy_User_Disp]whereLockUser=0andUserName='"&showstring(UserName)&"'"SetRs=Conn.execute(Sql)fRs.eofandrs.bofthenResponse.Write("<script>alert('友情提示!\n\n用戶帳號錯誤或已被鎖定!');history.back();</script>")Response.endelseifrs("Pwd")<>md5(Password)thenResponse.Write("<script>alert('友情提示!\n\n用戶密碼錯誤!');history.back();</script>")Response.endelseresponse.Cookies("UserName")=UserNameresponse.Cookies("Pwd")=Md5(Password)response.cookies("automember")=UserNameresponse.Cookies("automember").Expires=now()+365ifLCase(Request.Form("AutoLogin"))="true"thenresponse.Cookies("UserName").Expires=now()+365response.Cookies("Pwd").Expires=now()+365endifSql="Update[QiQiBoy_User_Disp]setVisits=Visits+1,LastLogin='"&now()&"',ip1='"&ip&"',Integral=Integral+1whereUserName='"&showstring(UserName)&"'"Conn.execute(Sql)endifendifrs.closesetrs=nothingResponse.Write("<script>alert('友情提示!\n\n登錄成功,歡迎您的到來...!');self.opener.location.reload();window.close();</script>")Response.end%>Rs.eofandrs.Bofthen判斷用戶信息是否存在,eof和bof是數(shù)據(jù)查詢記錄集的屬性,它們分別表示最后一條記錄的后面和第一條記錄的前面。看這一句,既在最后一條的后面,又是第一條前面,說明這樣的記錄集一定是空的,用戶是不存在的。如果數(shù)據(jù)集不為空,我們將把數(shù)據(jù)集的信息寫入存儲用戶信息的字符串中。這里的SQL語句中只用了用戶名來取信息,下邊ifrs("Pwd")<>md5(Password)then這一句的內(nèi)容就是判斷用戶密碼是否和數(shù)據(jù)庫中的密碼相符。在經(jīng)過許多判斷之后就獲得了用戶的信息。接下來談?wù)凜ookie。我們知道,用戶進入了貼吧后,需要訪問很多頁面,其中的一部頁面是需要注冊用戶登陸才能看到的,那么要想知道用戶是否登陸,這就用到Cookie了,Cookie是由Web頁服務(wù)器置于硬盤上的一個非常小的文本文件。從本質(zhì)上講,它是你的身份證。它不能作為代碼執(zhí)行,也不會傳送病毒。它為你所專有,并且只能有提供它的服務(wù)器來讀取。但是Cookie是有限制的,每個Cookie文件的大小不超過4KB。另外瀏覽器中選擇可接受Cookie,否則一旦ASP程序中使用了Cookie,它們將無法正常運行。現(xiàn)在我們把用戶信息寫入Cookie的程序,如程序所示。<%response.Cookies("UserName")=UserNameresponse.Cookies("Pwd")=Md5(Password)response.cookies("automember")=UserNameresponse.Cookies("automember").Expires=now()+365ifLCase(Request.Form("AutoLogin"))="true"thenresponse.Cookies("UserName").Expires=now()+365response.Cookies("Pwd").Expires=now()+365%>3.3.2用戶注冊涉及到用戶注冊,我們就會想到用戶信息的驗證,總不能一個用戶只寫個空格我們也讓他注冊吧,還有就是用戶如果忘記密碼怎么辦?我們也應(yīng)提供相應(yīng)的服務(wù),現(xiàn)在我們就對用戶注冊部分的網(wǎng)頁部分,以及各個網(wǎng)頁間的聯(lián)系:如圖11所示。下面就來說明程序是如何編寫的。首先是registr.asp。用戶注冊,首先要檢查的就是用戶填寫的信息其中包括:字段是否為空白兩次輸入的密碼是否一至用戶名是否被使用電子郵件是否被使用表注冊頁面所涉及的HTML表單元素名稱類型含義重要屬性formForm表單action="registrfox.asp"method="POST"usernametext用戶帳號maxLength="8"size="25"name="username"value="<%=session("UserName")%>"Passwordpassword用戶密碼maxLength="18"size="25"name="password"checkPasswordtext驗證密碼inputtype="password"maxLength="18"size="25"name="checkPassword"sexlist用戶性別<optionvalue="1"name="sex"<%ifsession("Sex")="1"thenresponse.write("selected")endif%>>帥哥</option><optionvalue="2"name="sex"<%ifsession("Sex")="2"thenresponse.write("selected")endif%>>靚女</option>areatext用戶地區(qū)maxLength="80"size="30"name="area"value="<%=session("Area")%>"emailtext郵箱地址maxLength="180"size="40"name="email"value="<%=session("Email")%>"questiontext密碼問題maxLength="18"size="30"name="question"value="<%=session("Question")%>"answertext密碼答案maxLength="18"size="50"name="answer"value="<%=session("Answer")%>"websitestext個人主頁size="60"name="websites"maxLength="250"value="<%=session("Websites")%>"listtextarea個人簡介rows="6"cols="60"><%=session("List")%>submitsubmit【我要注冊】按鈕class="input"value="我要登錄"submit2reset【擦除重填】按鈕value="擦除重填"class="input"用戶注冊各個頁面與數(shù)據(jù)庫間的聯(lián)系QiQiBoy_User_DispQiQiBoy_User_Disp寫入修改信息忘記密碼寫入讀取讀取新用戶注冊registr.aspaspaspaspaspedit.asp下面看用戶注冊驗證程序(registrfox.asp)<%UserName=replace(trim(Request.Form("UserName")),"'","")Password=replace(trim(Request.Form("Password")),"'","")checkPassword=replace(trim(Request.Form("checkPassword")),"'","")Sex=replace(trim(Request.Form("Sex")),"'","")Area=replace(trim(Request.Form("Area")),"'","")Email=replace(trim(Request.Form("Email")),"'","")Oicq=replace(trim(Request.Form("Oicq")),"'","")Question=replace(trim(Request.Form("Question")),"'","")Answer=replace(trim(Request.Form("Answer")),"'","")Websites=replace(trim(Request.Form("Websites")),"'","")List=replace(trim(Request.Form("List")),"'","")Photo=replace(trim(Request.Form("Photo")),"'","")VerifyCode=replace(trim(Request.Form("VerifyCode")),"'","")ifUserName=""then response.write("<script>alert('友情提示!\n\n用戶帳號不能為空!');history.back();</script>") response.endendififPassword=""then response.write("<script>alert('友情提示!\n\n用戶密碼不能為空!');history.back();</script>") response.endendififcheckPassword=""then response.write("<script>alert('友情提示!\n\n驗證密碼不能為空!');history.back();</script>") response.endendififcheckPassword<>Passwordthen response.write("<script>alert('友情提示!\n\n驗證密碼與用戶密碼不相同!');history.back();</script>") response.endendififSex=""then response.write("<script>alert('友情提示!\n\n用戶性別不能為空!');history.back();</script>") response.endendififArea=""then response.write("<script>alert('友情提示!\n\n用戶地區(qū)不能為空!');history.back();</script>") response.endendififEmail=""then response.write("<script>alert('友情提示!\n\n郵箱地址不能為空!');history.back();</script>") response.endendififisvalidemail(Email)=falsethen response.write("<script>alert('友情提示!\n\n郵箱地址格式錯誤或無效!');history.back();</script>") response.endendififOicq=""then response.write("<script>alert('友情提示!\n\nOICQ號碼不能為空!');history.back();</script>") response.endendififnotisnumeric(Oicq)then response.write("<script>alert('友情提示!\n\nOICQ號碼必須是數(shù)字!');history.back();</script>") response.endendififQuestion=""then response.write("<script>alert('友情提示!\n\n密碼問題不能為空!');history.back();</script>") response.endendififAnswer=""then response.write("<script>alert('友情提示!\n\n密碼答案不能為空!');history.back();</script>") response.endendififList<>""then iflen(List)>250then response.write("<script>alert('友情提示!\n\n個人簡介長度不能超過250字符!');history.back();</script>") response.end else List=trim(List) endifendifIfHOST_CODE=0then ifVerifyCode=""then response.write("<script>alert('友情提示!\n\n驗證編碼不能為空!');history.back();</script>") response.end endif ifVerifyCode<>Trim(Session("VerifyCode"))then response.write("<script>alert('友情提示!\n\n驗證編碼錯誤!');history.back();</script>") response.end endifendififYes=""then response.write("<script>alert('友情提示!\n\n必須接受注冊協(xié)議條款!');history.back();</script>") response.endendifIp=Request.ServerVariables("HTTP_X_FORWARDED_FOR")IfIp=""ThenIp=Request.ServerVariables("REMOTE_ADDR")Sql="select*from[QiQiBoy_User_Disp]whereUserName='"&showstring(UserName)&"'"SetRs=Conn.execute(Sql)IfnotRs.eofthen Response.Write("<script>alert('友情提示!\n\n用戶帳號已被注冊使用!');history.back();</script>") Response.endelse Sql="select*from[QiQiBoy_User_Disp]whereEmail='"&showstring(Email)&"'" SetRs=Conn.execute(Sql) ifnotRs.eofthen Response.Write("<script>alert('友情提示!\n\n郵箱地址已被注冊使用!');history.back();</script>") Response.end else Sql="selectMax(UserID)from[QiQiBoy_User_Disp]" SetRs=Conn.execute(Sql) MaxUserID=Rs(0) IfisNull(MaxUserID)thenMaxUserID=0 Sql="insertinto[QiQiBoy_User_Disp](UserID,UserName,Pwd,Sex,Area,Email,OICQ,Question,Answer,Websites,List,Photo,UserGroupID,Ip,Integral)values("&MaxUserID+1&",'"&UserName&"','"&md5(Password)&"','"&Sex&"','"&Area&"','"&Email&"','"&OICQ&"','"&Question&"','"&md5(Answer)&"','"&Websites&"','"&List&"','"&Photo&"',1,'"&Ip&"',2)" SetRs=Conn.execute(Sql) Sql="Update[QiQiBoy_Status_Disp]setRegUsers=RegUsers+1whereStatusID=1" SetRs=Conn.execute(Sql) response.cookies("automember")=UserName response.Cookies("automember").Expires=now()+365 endif rs.close setrs=nothingendifrs.closesetrs=nothingResponse.Write("<script>alert('友情提示!\n\n謝謝您的注冊...!');window.close();</script>")Response.end%>一、BOF與EOF屬性通常我們在ASP程序中編寫代碼來檢驗BOF與EOF屬性,從而得知目前指標所指向的RecordSet的位置,使用BOF與EOF屬性,可以得知一個Recordset對象是否包含有記錄或者得知移動記錄行是否已經(jīng)超出該Recordset對象的范圍。如:<%ifnotrs.eofthen...%><%ifnot(rs.bofandrs.eof)%>若當前記錄的位置是在一個Recordset對象第一行記錄之前時,BOF屬性返回true,反之則返回false。若當前記錄的位置是在一個Recordset對象最后一行記錄之后時,EOF屬性返回true,反之則返回false。BOF與EOF都為False:表示指標位于RecordSet的當中。BOF為True:目前指標指到RecordSet的第一筆記錄。EOF為True:目前指標指到RecordSet的最后一筆記錄。BOF與EOF都為True:在RecordSet里沒有任何記錄。二、Move方法您可以用Move方法移動指標到RecordSet中的某一筆記錄,語法如下:rs.MoveNumRecords,Start這里的“rs”為一個對象變量,表示一個想要移動當當前記錄位置的Recordset對象;“NumRecords”是一個正負數(shù)運算式,設(shè)定當前記錄位置的移動數(shù)目;“start”是一個可選的項目,用來指定記錄起始的標簽。所有的Recordset對象都支持Move方法,如果NumRecords參數(shù)大于零,當前記錄位置向末尾的方向移動;如果其小于零,則當前記錄位置向開頭的方向移動;如果一個空的Recordset對象調(diào)用Move方法,將會產(chǎn)生一個錯誤。MoveFirst方法:將當前記錄位置移至第一筆記錄。MoveLast方法:將當前記錄位置移至最后一筆記錄。MoveNext方法:將當前記錄位置移至下一筆記錄。MovePrevious方法:將當前記錄位置移至上一筆記錄。Move[n]方法:移動指標到第n筆記錄,n由0算起。用戶修改信息程序(edit.asp)<%UserName=replace(trim(Request.Form("UserName")),"'","")Password=replace(trim(Request.Form("Password")),"'","")checkPassword=replace(trim(Request.Form("checkPassword")),"'","")Sex=replace(trim(Request.Form("Sex")),"'","")Area=replace(trim(Request.Form("Area")),"'","")Email=replace(trim(Request.Form("Email")),"'","")Oicq=replace(trim(Request.Form("Oicq")),"'","")Question=replace(trim(Request.Form("Question")),"'","")Answer=replace(trim(Request.Form("Answer")),"'","")Websites=replace(trim(Request.Form("Websites")),"'","")List=replace(trim(Request.Form("List")),"'","")Photo=replace(trim(Request.Form("Photo")),"'","")VerifyCode=replace(trim(Request.Form("VerifyCode")),"'","")Yes=replace(trim(Request.Form("Yes")),"'","")ifisvalidemail(Email)=falsethen response.write("<script>alert('友情提示!\n\n郵箱地址格式錯誤或無效!');history.back();</script>") response.endendif<%functionisvalidemail(email)dimnames,name,i,cisvalidemail=truenames=Split(email,"@")ifubound(names)<>1thenisvalidemail=falseexitfunctionendifforeachnameinnamesiflen(name)<=0thenisvalidemail=falseexitfunctionendiffori=1tolen(name)c=lcase(mid(name,i,1))ifinStr("abcdefghijklmnopqrstuvwxyz_-.",c)<=0andnotisnumeric(c)thenisvalidemail=falseexitfunctionendifnextifleft(name,1)="."orright(name,1)="."thenisvalidemail=falseexitfunctionendifnextifinStr(names(1),".")<=0thenisvalidemail=falseexitfunctionendifi=len(names(1))-instrrev(names(1),".")ifi<>2andi<>3thenisvalidemail

溫馨提示

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

評論

0/150

提交評論