Asp.net+Xml完成無數(shù)據(jù)庫論壇一些即通
發(fā)表時(shí)間:2024-05-13 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]起草語:流行論壇(我們重點(diǎn)討論ASP,ASP。NET論壇)的開發(fā)思路老手可略過此節(jié),就讀下節(jié)。目前,網(wǎng)上論壇各式各樣各種版本不計(jì)其數(shù),歸根結(jié)底如何神通其核心數(shù)據(jù)存取倉庫都是“數(shù)據(jù)庫”,我是指我們常用的ACCESS SQLSERVER等等這種形式的“數(shù)據(jù)庫”,而后由PHP ASP ASP。NET J...
起草語:流行論壇(我們重點(diǎn)討論ASP,ASP。NET論壇)的開發(fā)思路
老手可略過此節(jié),就讀下節(jié)。
目前,網(wǎng)上論壇各式各樣各種版本不計(jì)其數(shù),歸根結(jié)底如何神通其核心數(shù)據(jù)存取倉庫都是“數(shù)據(jù)庫”,我是指我們常用的ACCESS SQLSERVER等等這種形式的“數(shù)據(jù)庫”,而后由PHP ASP ASP。NET JSP等等這些后臺語言通過中心“ADO,SQL”兩條線,像伐木搭橋似的一小塊一小塊(會員注冊、會員登陸、論壇欄目分類、項(xiàng)目統(tǒng)計(jì)、單個(gè)欄目、帖子瀏覽、后臺管理……)積木似的累積成形式各異的論壇系統(tǒng),而這一塊塊的“積木”,如何異樣然終歸就是對數(shù)據(jù)庫的存取其成分無非就是構(gòu)成木料的物質(zhì)不會變成鐵的,可見,好的論壇程序并不難寫,難得是清晰的思路、優(yōu)質(zhì)的“數(shù)據(jù)庫結(jié)構(gòu)”,既然是這樣,下面我就將本人著手開發(fā)ASP。NET+XML無數(shù)據(jù)庫實(shí)現(xiàn)論壇總結(jié)的一些經(jīng)驗(yàn)思路一一陳述,讀畢若有興趣不妨自己動手一試,嘗試一下用全新的手段開發(fā)論壇的樂趣
第一節(jié):廢話不說、解答疑問
1:這篇文章需熟悉哪些知識的人才能讀懂?
至少從事學(xué)習(xí)一年以上WEB后臺網(wǎng)站編程綜合知識的人即可讀懂,熟悉ASP。NET編程及XML文檔結(jié)構(gòu)的程序員更能深入意會
2:Xml能充當(dāng)“數(shù)據(jù)庫”嗎?
能,只不過是不同的概念和組織形式
3:用Xml充當(dāng)數(shù)據(jù)庫制作論壇的開發(fā)難度是否比使用ACCESS、SQLSERVER等為數(shù)據(jù)庫的開發(fā)難度高?
高許多,甚至有些功能本人水平有限無從下手解決(XML充當(dāng)數(shù)據(jù)庫相比ACCESS等有一定本質(zhì)上的局限),但并不代表不可能
4:本文為什么選擇ASP。NET做為后臺程序語言來結(jié)合XML建造論壇?
無特殊意義,ASP、PHP、JSP或其他后臺程序語言均可,甚至VB、VC、JAVA等能以軟件形式表現(xiàn)論壇
5:兩者相比,Xml充當(dāng)“數(shù)據(jù)庫”做的論壇或其他系統(tǒng)有何好處?
如程序及XML結(jié)構(gòu)精妙完善,無論在大小程序系統(tǒng)上均在
-速度(基于文件,相對憂于ADO存取數(shù)據(jù)庫)
-資源占用(無論數(shù)據(jù)總和多少,基本是處理分布式的小型文件(通常在1-100K內(nèi)),無論是在內(nèi)存或CPU的占用等均憂于數(shù)據(jù)庫)
-分布式(單一的文件集合于文件夾,與將數(shù)據(jù)集成為一身的數(shù)據(jù)庫,各有優(yōu)勢)
-移植性和通用性(XML本身即是一種通用數(shù)據(jù)描述語言,無論是在不同操作系統(tǒng)或程序語言上均能順利移植和應(yīng)用)
-修改、查找、維護(hù)、批量處理(如數(shù)據(jù)量大,則必須借助程序系統(tǒng)操作,如直接在文件夾管理文件非常麻煩,這方面遜于數(shù)據(jù)庫系統(tǒng)的界面和易用性,除非建立自己的XML數(shù)據(jù)處理軟件或WEB系統(tǒng)彌補(bǔ)這方面的不足)
-安全性(大智慧是取決于程序、加密方面,小聰明是更改后臺文件、文件夾的名稱和存放位置,只不過基于XML文件構(gòu)建的數(shù)據(jù)庫結(jié)構(gòu)比較散亂,不如數(shù)據(jù)表封裝的簡單)
第二節(jié):引路入門、建立基地(XML數(shù)據(jù)庫結(jié)構(gòu))
明確做什么樣的論壇系統(tǒng),才能理起思路,這里我們假設(shè)開發(fā)一簡單論壇,其功能功用均效仿常見論壇,我們只要求一個(gè)欄目
XML數(shù)據(jù)庫的實(shí)現(xiàn){
會員資料存儲(在主目錄新建一文件,名為user.xml,該user.xml文件即作為存儲所有會員資料的文件,本例結(jié)構(gòu)可是如下形式)[
<?xml version="1.0" encoding="gb2312"?>
<alluser>
<fyw name="風(fēng)云舞" pass="1234" sex="男士" age="20" img="http://www.lshdic.com/bbs/image/user40.jpg" fatie="20" exp="243" homepage="http://www.lshdic.com" email="lshdic@sina.com" oicq="21152530" qianming="簽名檔內(nèi)容" address="山東臨沂"/>
<cike name="孤獨(dú)刺客" pass="123" sex="男士" age="20" img="man2.gif" fatie="0" exp="20" homepage="" email="gdcike@163.com" oicq="" qianming="風(fēng)云他是豬!吭大爺做關(guān)稅區(qū)的斑竹!" address="山東臨沂"/>
<plgirl name="千千純子" pass="123" sex="女士" age="20" img="woman1.gif" fatie="0" exp="0" homepage="" email="" oicq="" qianming="" address=""/>
</alluser>
]
這是本例所采用的XML存儲結(jié)構(gòu),不難看出一個(gè)標(biāo)簽即包含了一個(gè)會員的所有信息,標(biāo)簽名即是“用戶帳號”,其中name=昵稱、pass=密碼、sex=性別……,其中“用戶帳號”必須保證是唯一的,而且必須限制為英文字母或英文字母后邊帶數(shù)字,關(guān)于XML的文件結(jié)構(gòu)及數(shù)據(jù)一定要求符合XML文檔規(guī)范及命名規(guī)范,若此后在程序中用戶所提交數(shù)據(jù)處理不托,或可導(dǎo)致資料泄露,或該user.xml即宣告報(bào)廢,必須手工查找更正,否則無法正常存取
論壇帖子資料存儲(在主目錄新建一文件夾,名為data,該data文件夾今后即保存所有會員發(fā)表的帖子,其中帖子的文件名是隨機(jī)或有規(guī)律的如1.xml,2.xml,3.xml,這些文件存儲了帖子的所有數(shù)據(jù)包括主題、回復(fù),當(dāng)然這些文件的建立、修改、起名、刪除等都是在以后用程序?qū)崿F(xiàn)的,至于新文件起名的程序部分要保證其名稱與以有文件互不沖突即可,文件名可以是無任何規(guī)律的,畢竟今后我們不以文件名來實(shí)現(xiàn)排序,其單個(gè)XML文件內(nèi)容結(jié)構(gòu)如下)[
1.xml:
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type='text/xsl' href='../file.aspx?dex=1.xml'?>
<document>
<record>
<anthor>fyw</anthor>
<title>帖子標(biāo)題</title>
<date>2003-12-6 3:27:18</date>
<gengxindate>2003-12-6 3:27:18</gengxindate>
<body>帖子內(nèi)容
<hr>內(nèi)容是以過濾HTML等于XML文檔規(guī)范相沖突的字符以后的合法內(nèi)容,標(biāo)題也需要過濾
</body>
</record>
</document>
2.xml:
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type='text/xsl' href='../file.aspx?dex=7908604.xml'?>
<document>
<record>
<anthor>fyw</anthor>
<title>帖子標(biāo)題</title>
<date>2003-12-6 3:54:59</date>
<gengxindate>2003-12-6 3:54:59</gengxindate>
<body>帖子內(nèi)容</body>
<reply>
<anthor>cike</anthor>
<date>2003-12-6 5:53:38</date>
<gengxindate>2003-12-6 5:53:38</gengxindate>
<body>1樓回復(fù)的內(nèi)容</body>
</reply>
<reply>
<anthor>plgirl</anthor>
<date>2003-12-7 5:53:38</date>
<gengxindate>2003-12-7 5:53:38</gengxindate>
<body>2樓回復(fù)的內(nèi)容</body>
</reply>
</record>
</document>
]
這是本例論壇帖子的XML存儲結(jié)構(gòu),現(xiàn)在我們建立起了會員資料存儲文件(user.xml)以及論壇帖子存放地點(diǎn)和存放結(jié)構(gòu)(data\*.xml),你是否以有所啟發(fā)?用程序在這兩者基石上搭橋引線是否真的能夠?qū)崿F(xiàn)復(fù)雜的論壇系統(tǒng)哪?答案是肯定的,只要能通過程序在后臺操縱這兩個(gè)存儲基地,加以友好的界面,即可小試牛刀
}
第三節(jié):諸葛布陣、將士磨刀
XML數(shù)據(jù)存儲結(jié)構(gòu)以完成,下面一一列出完成論壇大業(yè)所需要的材料
項(xiàng)目包括{
通用函數(shù)頁
(建立或一或二這種通用函數(shù)頁或DLL或者是用戶控件,將常用的程序過程、變量、函數(shù)放入其中,此后使用可大大節(jié)省時(shí)間避免重復(fù)勞動,這在下一章將有所提及)
游客與會員的區(qū)分
(即是一個(gè)session,本例為session("who")值是否存在的判斷,如存在即判斷是會員,如不存在值即為游客,我們本例不使用cookies存儲用戶數(shù)據(jù),游客權(quán)限自然是只能瀏覽帖子,不能發(fā)表或回復(fù)帖子,而會員則可以)
會員注冊
(包含各種表單的頁面,目的是完成向user.xml添加一新的標(biāo)簽節(jié)點(diǎn)(等同添加一新的會員數(shù)據(jù)),要處理好用戶所提交的數(shù)據(jù),方法要用到防止跨站提交、會員帳號(即XML節(jié)點(diǎn)頭標(biāo)簽)要用正則表達(dá)式限制為類似程序變量的語法要求或干脆只允許使用英文字母、XML節(jié)點(diǎn)屬性至少要過濾<>&"'以及回車符號、防止申請的會員帳號以存在user.xml、所有數(shù)據(jù)英文符號均轉(zhuǎn)換為小寫格式即不區(qū)分大小寫包括用戶帳號和密碼)
會員登陸
(包含用戶帳號輸入框、密碼輸入框和一個(gè)登陸按鈕,提交后利用XMLDOM搜索user.xml是否有匹配的用戶帳號(要特別注意過濾用戶提交的數(shù)據(jù),尤其是*號等,這在XMLDOM的搜索中被認(rèn)為是通配符),如user.xml存有該帳號,即將一個(gè)session,本例為session("who"),設(shè)值為該用戶帳號,游客身份即成為會員身份)
會員資料修改
(禁止游客瀏覽本頁,樣式保持與會員注冊頁的表單基本一樣(但不包含用戶帳號名稱修改的功能),只不過所有表單的值均是預(yù)讀了user.xml中匹配session("who")該會員的信息,用戶修改過后,單擊完成修改按鈕,此時(shí)后臺程序修改user.xml中該會員對應(yīng)的節(jié)點(diǎn)數(shù)據(jù)即可)
會員資料顯示
(只讀頁面,讀取網(wǎng)址參數(shù)中對應(yīng)的會員帳號,顯示會員所有無需保密的信息)
一個(gè)論壇欄目主頁
(即帖子列表,根據(jù)URL頁碼參數(shù)分頁,顯示data目錄中對應(yīng)頁碼的所有帖子信息,排序自然根據(jù)文件的修改日期,最新更新的最靠頂,這是開發(fā)本論壇中最難的一個(gè)項(xiàng)目之一,要謹(jǐn)慎處理,最好實(shí)現(xiàn)點(diǎn)對點(diǎn)(即1-10,30-40,100-110)形式分頁的抽取data目錄中的文件,可以保證最優(yōu)質(zhì)的運(yùn)行速度)
帖子顯示頁
(本例的帖子顯示是直接在瀏覽器訪問XML文件,即http://xxx.xxx.xxx/xxx.xml的URL形式訪問,由于僅僅使用靜態(tài)XSL控制XML文件的二層輸出形式是遠(yuǎn)遠(yuǎn)不夠的,所以我們采取的顯示結(jié)構(gòu)是三層,其順序?yàn)?1:打開XML文件后查找xml-stylesheet節(jié)點(diǎn)的href所指定的XSL文件---2:由于目標(biāo)文件類型是aspx,我們在目標(biāo)aspx中根據(jù)url參數(shù)訪問參考對應(yīng)的XML文件數(shù)據(jù),控制數(shù)據(jù)流輸出格式為xsl,叢中很好的整理出理想的xsl樣式表,即起到了中間層的關(guān)鍵作用---3:由于aspx輸出的xsl是我們在后臺整理過的,其高度的智能、合理,即可以配合XML數(shù)據(jù)輸出結(jié)構(gòu)復(fù)雜的帖子顯示頁),期間中間層的開發(fā)難度最大,是本論壇系統(tǒng)中最難的一個(gè)步驟,簡單的地方是XMLDOM分析抽取目標(biāo)XML中的節(jié)點(diǎn)數(shù)據(jù),實(shí)現(xiàn)顯示主題、顯示帖子作者、顯示帖子內(nèi)容、顯示帖子所有回復(fù),但最難點(diǎn),本人在著手開發(fā)時(shí),就無法解決帖子回復(fù)的分頁,以及aspx服務(wù)器端控件和xsl文檔規(guī)范相互沖突,可能是本人水平有限,或也是本人原創(chuàng)的這種3層輸出存在本質(zhì)的缺陷,所謂XML實(shí)現(xiàn)數(shù)據(jù)庫容易,但通過XSL實(shí)現(xiàn)超越HTML的理想輸出難)
發(fā)表新貼
(禁止游客發(fā)表,該項(xiàng)目即是一個(gè)輸入主題的輸入框+內(nèi)容輸入框+提交按鈕,可以綁定在欄目帖子列表頁下方或新建一個(gè)專頁,用戶提交發(fā)表后要用server.HTMLEncode()過濾用戶所提交的數(shù)據(jù),而后用程序創(chuàng)建XML文件、給XML文件起名、整理XML文件的文件格式如第二節(jié)所寫的格式、向節(jié)點(diǎn)內(nèi)寫入過濾后的數(shù)據(jù)、修改user.xml對應(yīng)的發(fā)貼會員的節(jié)點(diǎn)實(shí)現(xiàn)積分+2和發(fā)貼數(shù)+1,用cookies限制7秒內(nèi)禁止多次提交灌水)
回復(fù)新貼
(禁止游客回復(fù),該頁可綁定帖子顯示頁下方或新建一個(gè)專業(yè),提供一內(nèi)容輸入框+提交按鈕,提交后如發(fā)表新貼過程類同,要進(jìn)行數(shù)據(jù)過濾,而后在對應(yīng)的帖子存儲XML文件中插入一reply節(jié)點(diǎn),在該節(jié)點(diǎn)中建立用于存儲回復(fù)作者名稱、回復(fù)內(nèi)容、回復(fù)日期、回復(fù)更新日期等節(jié)點(diǎn),修改user.xml對應(yīng)的發(fā)貼會員的節(jié)點(diǎn)實(shí)現(xiàn)積分+1和發(fā)貼數(shù)+1,用cookies限制7秒內(nèi)禁止多次提交灌水)
版主管理功能
(要實(shí)現(xiàn)密碼驗(yàn)證,判斷禁止游客及會員使用,可選的后臺管理功能有獎(jiǎng)勵(lì)會員積分、減少會員積分、刪除會員、修改任何帖子、刪除任何帖子,甚至可以考慮諸多封IP、置頂、鎖定、封版主等等高級功能)
}
第四節(jié):君臨沙場、錦囊相助
通過以上三節(jié)修煉,君若仔細(xì)攻讀,定已胸有成竹,躍躍欲試,此時(shí)想必已經(jīng)動起手來,或者是思路很清晰卻不知程序該如何寫,若真是如此,不必急噪,筆者先將平生所學(xué)一些常用“兵法”一一列出,定可使汝茅塞頓開
1:錯(cuò)誤提示函數(shù)(需要時(shí)使用,可彈出對話框給與用戶錯(cuò)誤提醒,而后自動退回上一頁,此函數(shù)建議保存為一通用文件,需要時(shí)<!--#include file="publicfun.aspx"-->一下即可使用)
<script language=vb runat='server'>
sub t2(tstr2 as string)
response.write (replace("<script language=vbs> msgbox " & chr(34) & tstr2 & chr(34) & ",16," & chr(34) & "錯(cuò)誤提示" & chr(34) & ":history.back()</script>","<","<")):response.end
end sub
</script>
2:一般數(shù)據(jù)檢測函數(shù)(修改XML標(biāo)簽屬性時(shí)建議使用,用于一般檢測,至于用戶帳號等還需要更嚴(yán)密的數(shù)據(jù)過濾)
<script language=vb runat='server'>
sub jiancha(requeststr as string) '本例過濾'"<>&*,如有疏漏請補(bǔ)之
dim array1(5) as string
array1(0)="'":array1(1)=chr(34):array1(2)="<":array1(3)=">":array1(4)="&":array1(5)="*"
dim tempi as integer
for tempi=0 to ubound(array1)
if instr(requeststr,array1(tempi))<>0 then response.write (replace("<script language=vbs> msgbox " & chr(34) & "參考數(shù)據(jù) " & requeststr & " 不可以含有禁止符號 [" & array1(tempi) & "] ,自動返回請更正" & chr(34) & ",16," & chr(34) & "錯(cuò)誤提示" & chr(34) & vbcrlf & "history.back()</script>","<","<")):response.end
next
end sub
</script>
3:asp.net拒絕跨站提交注入(可在會員注冊、會員修改頁等表單較多的頁使用)
<%
if lcase(mid(request.ServerVariables("HTTP_REFERER"),8,len(request.ServerVariables("SERVER_NAME"))))<>lcase(request.ServerVariables("SERVER_NAME")) then t2("拒絕跨站提交!")
%>
4:向目標(biāo)XML文件添加新節(jié)點(diǎn)
<%@import namespace='system.xml'%>
<%
dim userdom1=new xmldocument,userdom2,userdom3
userdom1.load (server.mappath("user.xml")) '裝載需要操作的XML文件
userdom2=userdom1.selectsinglenode("alluser") '操作游標(biāo)指向alluser節(jié)點(diǎn),句柄給userdom2變量
userdom3=userdom1.createElement("fyw") '新創(chuàng)建一名為fyw的節(jié)點(diǎn),并將句柄給userdom3變量
userdom3.setAttribute("name","風(fēng)云舞") '為userdom3添加節(jié)點(diǎn)屬性,新屬性名為name,值為風(fēng)云舞
userdom3.setAttribute("pass","123")
userdom3.innerText="測試" '設(shè)置userdom3節(jié)點(diǎn)所包含的數(shù)據(jù)
userdom2.AppendChild(userdom3) 'userdom2即alluser節(jié)點(diǎn)下添加userdom3所描述的fyw節(jié)點(diǎn)
userdom1.save (server.mappath("user.xml")) '將變動后的新XML數(shù)據(jù)保存到user.xml
%>
5:修改XML節(jié)點(diǎn)
<%@import namespace='system.xml'%>
<%
dim userdom1=new xmldocument,userdom2
userdom1.load (server.mappath("user.xml"))
userdom2=userdom1.selectsinglenode("alluser").getElementsBytagname("fyw") '操作游標(biāo)指向alluser節(jié)點(diǎn)下的fyw節(jié)點(diǎn)
userdom2(0).setAttribute("name","風(fēng)云舞") '設(shè)定fyw節(jié)點(diǎn)數(shù)組的第一個(gè),將其name屬性值修改為風(fēng)云舞
userdom2(0).innerText="測試" '設(shè)定fyw節(jié)點(diǎn)數(shù)組的第一個(gè),將其所包含的數(shù)據(jù)改為測試
userdom1.save (server.mappath("user.xml")) '將變動后的新XML數(shù)據(jù)保存到user.xml
%>
6:查找判斷XML節(jié)點(diǎn)是否存在
<%@import namespace='system.xml'%>
<%
dim userdom1=new xmldocument
userdom1.load (server.mappath("user.xml")) '裝載需要操作的XML文件
'以下正是本人為什么要用“用戶帳號”標(biāo)識用戶唯一身份的目的,查找方便呀:)
if userdom1.selectsinglenode("alluser").getElementsBytagname("fyw").count<>0 then t2("fyw節(jié)點(diǎn)以存在")
%>
7:批量添加XML節(jié)點(diǎn)(在編寫回復(fù)帖子時(shí),用第4例提到的方法一個(gè)一個(gè)填加節(jié)點(diǎn)很麻煩,這時(shí)可以考慮用此方法批量填加)
<%@import namespace='system.xml'%>
<%
dim filedom=new xmldocument,filedom2
filedom.load(server.mappath("data\" & request.querystring("dex"))) 'request.querystring("dex")=6.xml
filedom2=filedom.createElement("reply")
'以下這種方法很方便,而且對XML文件的結(jié)構(gòu)排版也很好,合理的空格和回車可以表現(xiàn)良好的XML文檔結(jié)構(gòu)
filedom2.innerXml=vbcrlf & " <anthor>" & session("who") & "</anthor>" & vbcrlf & " <date>" & now & "</date>" & vbcrlf & " <gengxindate>" & now & "</gengxindate>" & vbcrlf & " <body>" & neirong.value & "</body>" & vbcrlf & " "
filedom.selectsinglenode("document/record").appendChild(filedom2)
filedom.save(server.mappath("data\" & request.querystring("dex"))) 'request.querystring("dex")=6.xml
%>
8:刪除XML節(jié)點(diǎn)
<%@import namespace='system.xml'%>
<%
dim userdom1=new xmldocument,userdom2
userdom1.load (server.mappath("user.xml"))
userdom1.DocumentElement.RemoveChild (userdom1.selectsinglenode("alluser/fyw")) '刪除alluser節(jié)點(diǎn)下的所有fyw節(jié)點(diǎn)
userdom1.save (server.mappath("user.xml"))
%>
9:創(chuàng)建新的XML文件(可以創(chuàng)建任何類型后綴的文件,不局于XML文件)
<%@import namespace='system.io'%>
<%
dim newfile=new StreamWriter(server.mappath("data\" & new DirectoryInfo(server.mappath("data")).getfiles().length+1 & ".xml"),false,System.Text.Encoding.Default)
'以上我們指定默認(rèn)編碼方式為System.Text.encoding.default,或者可改為System.Text.encoding.GetEncoding("gb2312"),不然將以UTF8編碼那樣XML含有中文就無法正常工作了
newfile.write ("<?xml version=" & chr(34) & "1.0" & chr(34) & " encoding=" & chr(34) & "gb2312" & chr(34) & "?>" & _
vbcrlf & "<?xml-stylesheet type='text/xsl' href='../file.aspx?dex=" & filelength+1 & ".xml'?>" & vbcrlf & _
"<document>" & vbcrlf & " <record>" & vbcrlf & " <anthor>" & session("who") & "</anthor>" & vbcrlf & _
" <title>" & server.HTMLEncode(biaoti.value) & "</title>" & vbcrlf & " <date>" & now & "</date>" & vbcrlf & _
" <gengxindate>" & now & "</gengxindate>" & vbcrlf & " <body>" & server.HTMLEncode(neirong.text) & "</body>" & vbcrlf & _
" </record>" & vbcrlf & "</document>")
newfile.close:newfile=nothing
%>
10:刪除指定文件
<%@import namespace='system.io'%>
<%file.delete(server.mappath("data\2.xml"))%>
11:用cookies實(shí)現(xiàn)7秒內(nèi)不許重復(fù)灌水
<%
if not request.cookies("lshdicbbs") is nothing then
if isdate(request.cookies("lshdicbbs")("guanshui"))=false then response.cookies("lshdicbbs")("guanshui")=now
if datediff("s",request.cookies("lshdicbbs")("guanshui"),now)<7 then response.write ("7秒內(nèi)禁止重復(fù)發(fā)貼灌水"):response.cookies("lshdicbbs")("guanshui")=now:response.end
end if
response.cookies("lshdicbbs")("guanshui")=now
%>
12:用正則表達(dá)式限制用戶提交的數(shù)據(jù)必須為英文字母(有興趣可延伸強(qiáng)化為支持英文字母+數(shù)字的形式)
<%
dim name1=request.form("username")
if regex.replace(name1,"[a-z]+","",RegexOptions.IgnoreCase)<>"" then t2("帳號名必須使用A-Za-z范圍的英文字母")
%>
13:擴(kuò)展提示工具(早先原創(chuàng)腳本,可根據(jù)需要修改)
<div style='position:absolute;left:0;top:0;border-bottom:1 solid green;border-right:1 solid green;border-left:1 solid cccccc;border-top:1 solid cccccc;display:none;z-index:500;background-color:#FFF7FF;padding:2;white-Space:nowrap;table-Layout:fixed;' id=showdiv></div>
<script>
var oldtext="加速變量",colors1=new Array("#FFECD5","#FFF7FF","#FFFFEB","white","#F5FFEB","#EEFAFF","#FFFFEE","#EDFFFC")
function document.onmousemove(){
try{
if(event.srcElement.getAttribute('lshdic'))
{
showdiv.style.left=event.x-3;showdiv.style.top=event.y+document.body.scrollTop+18;if(event.srcElement.lshdic!=oldtext){oldtext=event.srcElement.lshdic;showdiv.innerText=oldtext;showdiv.style.backgroundColor=colors1[Math.round(Math.random()*colors1.length)]};if(showdiv.style.display=='none')showdiv.style.display=''
}else{if(showdiv.style.display=='')showdiv.style.display='none';}}catch(e){}
}
</script>
<a lshdic='歡迎訪問作者網(wǎng)站'>藍(lán)麗網(wǎng)</a>
<a lshdic='歡迎訪問藍(lán)麗技術(shù)論壇 2003-12-6 10:31:32'>藍(lán)麗技術(shù)論壇</a>
第五節(jié):神劍在此、贈我知音
經(jīng)過以上4個(gè)章節(jié)的艱苦學(xué)習(xí),我相信您以基本了解了如何用后臺程序結(jié)合XML數(shù)據(jù)庫實(shí)現(xiàn)復(fù)雜的論壇和系統(tǒng),但通讀N邊也起不了實(shí)際作用,你必須著手去做,才能在實(shí)踐中總結(jié)出自己的經(jīng)驗(yàn),本文章僅僅是個(gè)輔助參考而已
由于時(shí)間有限,本人只能將親手開發(fā)的ASP。NET版本的XML無數(shù)據(jù)庫論壇(全稱:藍(lán)麗NetXml無數(shù)據(jù)庫論壇1.0)奉獻(xiàn)給各位研究,由于本人的ASP。NET虛擬空間有點(diǎn)問題,無法提供在線演示,現(xiàn)僅提供全部原代碼下載(以上13例原代碼多數(shù)采摘于本系統(tǒng)中),地址:http://www.lshdic.com/download/netxmlbbs.rar,下載后可參考幫助文件,在您自己的ASP。NET服務(wù)器上測試。