亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 利用asp打造個性化論壇.txt

?? 利用ASP打造個性化論壇
?? TXT
?? 第 1 頁 / 共 3 頁
字號:
利用ASP打造個性化論壇 

統一教學網
日期:2001-10-24 19:21:00
出處:塞迪網 
作者:Jacky 
 
前言:現在網上的論壇到處都有,但不知您是否遇到過這樣的情況:在雜亂無章的討論信息中來尋找自己想要的內容,是一件很費費時費力的事情,到后來,您就都不想去看什么論壇了。那么我們能不能對自己網站論壇的內容增加審核功能呢?即所有網友發到論壇的文章,并不立即被顯示出來,必須經過站長或者版主審閱之后,認為有價值,有必要推薦給其它網友的,就發表出來。否則就刪掉了,免得浪費空間,搞得有點像精華區的意味,這樣你的論  
壇比起一般的論壇來,能夠提供給為明確有益的內容。放到你的網站上,應該能夠吸引更多的網友來訪問。這個設想當然可以實現,下面我就簡單介紹如何制作。 
注:由于本文適用于對ACCESS數據庫、HTML、ASP有一定了解的讀者。 

一、論壇結構分析 
通過上面的功能需求分析,我們可以將論壇的制作分為四大部分: 
(1) 網友注冊和管理模塊:因為引入了站長或者版主,在論壇中就必須能夠對其進行身份驗證。這個模塊的功能,就是管理注冊的網友,并能夠提供相關的查詢。比如,查詢指定作者的所有發表的文章,查詢當前發表文章最多的十個網友,等等。如果你的論壇不是很大,這個模塊可以省略為只帶有版主身份驗證的功能,而去掉那些關于注冊,查詢的部分。 
(2) 文章顯示模塊:顯示所有版主審核過的,覺得值得推薦的文章。 
(3) 發表文章模塊:為注冊網友提供發表見地的地方,發表后等待版主審閱。 
(4) 文章審閱模塊:版主對所有網又發表但未經審閱的文章進行處理,已決定是發表還是刪除。 
了解了具體的功能需求后,就可以按模塊的開始論壇的設計了。當然,這些模塊的只是在功能上對論壇結構的劃分,實際上并不能夠完全的把他們獨立出來進行設計。對于這種較小的應用,也沒有必要進行完全的模塊化設計,在良好的規劃下直接寫程序代碼或許來的更為簡單一些。 
對于論壇實現起來有一般兩種方法:用文件或者數據庫。相對而言,用數據庫要簡單高效一些,能夠對論壇進行更好的控制,也能夠對資料提供一些驗證和保護。這兒我使用的是ACCESS數據庫,對于一般的中小型的應用,ACCESS應該是能夠勝任的。 

從上面的分析可以知道應該有四個表,下面我給出每個表的結構。 
(1)作者表(用來存放作者訊息): 
ID:文本類型,必填。是網友代號。 
密碼:文本類型,必填。 
昵稱:文本類型,必填。 
EMAIL:文本類型,必填。 
職務:數字類型,必填。-1代表普通網友,0代表站長。大于0的數字代表版主,并且號碼是相應的看板表中某個板的ID,表示是那個板的版主。 
文章數:數字類型,必填。網友發表的文章總數。 
姓名:文本類型,可選。 
性別:文本類型,可選。 
電話:文本類型,可選。 
(2)內容表(用來存放具體文章內容和相關訊息): 
ID:自動編號,并為其設置索引,以加快搜尋的速度。 
看板ID:數字類型,來自看板列表,表示文章所屬看板。 
主題ID:數字類型,來自主題表,表示文章所屬主題。 
作者ID:文本類型,來自作者表,表示文章的作者。 
日期:日期/時間類型,預置初值為函數NOW(),系統在添加這一條字段時,將自動取系統當前時間為其值。 
標題:文本類型。文章的標題。 
發表:是/否類型,為"真"時表示文章已經通過審閱,可以發表;為"否"表示文章尚待審閱。 
推薦度:數字類型,文章的推薦程度。 
內容:備注類型,文章的具體內容。 
點擊次數:數字類型,文章的點擊次數。 
(3)看板列表(用來存放有關看板的訊息): 
ID:自動編號,同樣的,也為其設置了索引。 
名稱:文本類型,看板的名稱。 
板主:文本類型,看板版主的ID。 
主題數:數字類型,看板中包含的主題數。 
(4)主題表(用來存放有關主題的訊息): 
ID:自動編號,并為其設置索引。 
標題:文本類型,表示主題名。 
看板:數字類型,來自看板列表,表示主題所屬的看板。 
文章數:數字類型,主題中包含的文章數。 
所有的表是設計完了,但是數據庫的設計并沒有完,所以我們還需要建立表間關系,這樣就能夠讓數據庫執行一些相關性檢查,避免資料出錯。建立表間關系的另外的一個好處,就是通過它能夠很容易的建立出復雜的JOIN查詢。 
通常我們在ASP中操作數據庫的時候,都是使用的執行時生成的查詢,然后由傳遞給數據庫解釋執行。而在這兒我們要用的是存貯查詢。與執行時查詢比較而言,預存程序具有更多的優點。 
它保存在數據庫中,獨立于ASP程序代碼,使得他更容易建立和修改,并且查詢的效率更高,速度更快,可以調試好了以后再放在ASP頁面中使用,能避免很多問題。而且使用存貯查詢的ASP程序代碼更加容易閱讀和修改。可能大家都對在ASP中使用SQL查詢感到很煩,特別是那些逗號啊,分號啊什么的,一不小心就會出錯。使用存貯查詢后,就可以不用顧慮這些問題了。當然,預存程序再使用上也有一些要注意的地方,在后面我會詳細的講解它的使用方法。在ACCESS中建立預存程序是一件很容易的事,這兒我就不再多說了。在這兒我只給出各個查詢的SQL語句程序代碼。 

我把所有要使用到的查詢都作為預存程序保存在了數據庫中,主要的有以下的一些: 
(1)按ID查詢文章: 
SELECT 主題表.標題 AS 主題名, 看板列表.名稱 AS 看板名, 內容表.* 
FROM 主題表 INNER JOIN (內容表 INNER JOIN 看板列表 ON 內容表.看板ID = 看板列表.ID) ON 主題表.ID = 內容表.主題ID 
WHERE (((內容表.ID)=[articleid])); 
(2)版主密碼查詢: 
SELECT 看板列表.板主, 作者表.密碼 
FROM 作者表 INNER JOIN 看板列表 ON 作者表.ID = 看板列表.板主 
WHERE (((看板列表.ID)=[id]; 
(3)查詢作者: 
SELECT 作者表.* 
FROM 作者表 
WHERE (((作者表.ID)=[id])); 
(4)發表文章列表: 
SELECT [內容表].2479, [內容表].[標題], [內容表].[作者ID] AS 作者, [內容表].[日期], [內容表].[推薦度], [內容表].[點擊次數] AS 點擊數。 
FROM 內容表 
WHERE ((([內容表].[主題ID])=[TopicIndex]) And (([內容表].[發表])=True)); 
未發表文章列表: 
SELECT 內容表.ID AS 文章id, 主題表.ID AS 主題id, 主題表.標題 AS 主題, 內容表.標題 AS 標題, 內容表.作者ID AS 作者, 內容表.日期 AS 日期 
FROM 主題表 INNER JOIN 內容表 ON 主題表.ID = 內容表.主題ID 
WHERE (((內容表.發表)=False) AND ((內容表.看板ID)=[boardid])); 
(5)主題列表: 
SELECT 主題表.*, 看板列表.名稱 AS 看板名 
FROM 看板列表 INNER JOIN 主題表 ON 看板列表.ID = 主題表.看板 
WHERE (((主題表.看板)=[boardIndex])); 
還有一些查詢,因為大多類同,我就不一一列出了。 
在上面的查詢語句中,可以看到一些由"["和"]"包圍起來的東西,那就是查詢參數了。需要在執行時給出參數值,然后把參數值帶入到查詢語句中才能夠執行。還有一點要注意的是:在建立那些INNER JOIN查詢時,是需要把表間關系添加到設計視圖中的,否則是不能夠自動生成INNER JOIN查詢語句的。 
到這兒,數據庫的設計就算完了,以后的工作就是ASP的事了。 

二、構建 

1、構建主窗體 
先要給出一個窗體,能夠讓網友輸入注冊訊息,這些是HTML的內容,且放在一邊,我們來仔細看看具體實現注冊的ASP腳本。 
(1)將資料中的單引號改成兩個單引號,并且在前后加上單引號 
Function SqlStr( data ) 
SqlStr = "'" & Replace( data,"'", "''" ) & "'" 
End Function 
  

注:這是一個自定義的函數,用來把用戶輸入中的單引號(')轉換成兩個單引號('')。在ASP中,用雙引號圍著的是字符串,因而上面的"'"代表的就是只有一個單引號的字符串。之所以要把一個單引號換成兩個單引號,這是因為在SQL語句中,用單引號圍起來是用來代表變量的。為了不至于混淆,就要把字符串中的單引號用兩個單引號來表示。而所有的用戶輸入都要作為變量嵌入到SQL語句中的,所以這個函數是必不可少的。 
(2)存貯準備 
id=Request("id") 
password=Request("password") 
nickname=Request("nickname") 
email=Request("email") 
sex=request("sex") 
注:把來自用戶輸入窗體中的內容保存在變量中,這不是必須的,但寫了更容易讀寫。 
if Request("name")=""then name=" " else name=request("name") 
if Request("phone")=""then phone=" " else phone=request("phone") 
  

因為這些內容不是必須填的,為了防止用戶沒有輸入任何內容,而造成數據庫操作上的錯誤,就必須把沒有填入字段用空格來代替。 
(3)建立連接 
Set conn = Server.CreateObject("ADODB.Connection") 
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb") 
  

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

(4)查詢作者是否已存在 
Set cmd.ActiveConnection = conn 
cmd.CommandText = "查詢作者" 
ReDim param(0) ' 聲明參數數組 
param(0) = CStr(id) ' Cint 不可忽略 
Set rs = cmd.Execute( ,param ) 
  

注:這一段就是用來執行預存程序的。在ADO中執行查詢的方法有很多種,但是對于預存程序就只能使用Command對象了。首先,建立了一個叫做cmd的Command對象,然后把conn連接對象設定給cmd對象的ActiveConnection屬性,把要執行的查詢名稱"查詢作者"設定給CommandText屬性,然后為查詢參數賦值。我們聲明了一個參數數組param(0),因為在"查詢作者"這個查詢中只有一個參數,所以數組就只有一個分量了。一般的,在查詢中有幾個參數,就要申明有相應分量個數的參數數組。并且參數出現的順序是個數組中分量的順序是對應的。在使用參數查詢的過程中,尤其要注意的是,參數的類型要嚴格匹配,否這就會出錯,所以上面的CStr()類型轉換函數是不可缺少的。 
if not (rs.eof or rs.bof) then 
response.write "錯誤,你輸入的ID號已經被占用,請換一個再試試!" 
else 
sql = "Insert Into 作者表 (id, 昵稱,Email, 密碼,姓名,學校,系別,性別,電話) 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語句把資料插入到數據庫中。其實這一查詢也可以做成預存程序放在數據庫中,我偷了點懶:-)不過對比之下也可以看到預存程序的好處,執行時查詢寫起來實在是太麻煩了。 

2、構建文章顯示模塊 
前面說過,一片具體的文章是分屬在看板和主體之下的。因此顯示文章也要經過看板列表和主體列表這兩頁面后,才能得到特定主題下文章的列表。 
(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查詢,把所有的看板有關訊息傳回到紀錄集RS中。下面的任務就是顯示紀錄記得內容,并在相應的看板名稱上建立顯示看板主題的連接。 
< 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%">主題數</td> 
< td height="35" width="31%">板主登陸</td> 
< /tr> 
  

注:這兒一部分是顯示出表格中每一列的標題,這兒我沒有用一個統一的函數來顯示RS紀錄記的內容,因為這樣可以對表格的外觀和風格做更多的控制,使用起來雖然有點麻煩,但是卻更為靈活。 
< % 
do 
boardid=rs("id") 
boardname=rs("名稱") 
boardmanager=rs("板主") 
response.write "< tr>< td><a href=qBoard.asp?boardid="& boardid& "&boardname=" & boardname& ">" & boardname &"< /a>< /td>" 
  

注:這一行是重點,當點擊了各個板的名稱后,可以連接到顯示看板主題的頁面。程序代碼看起來有點麻煩,我分解了給你講,你就會明白了。在點擊之后,瀏覽器請求使用的是qBoard.asp頁面,并帶有一個參數boardid,代表要顯示看板的ID號,在請求頁面和參數之間用問號(?)分隔。Boardid是前面設定了的變量,其中包含的就是對應看板的ID號。這個連接中還帶有另外一個參數boardname,用來把看板名稱傳遞給qBoard.asp頁面。在多個參數間使用"&"來分隔。這個參數不是必須的,傳遞過去是為了免得在qBorad.asp中再次用boardid來查詢看板名稱。一般來說,能夠少用數據庫操作就應當盡量的少用,這樣可以提高ASP頁面的性能。因為Response.Write語句使用字符串作為參數的,所以上面的字符串和變量之間使用的是"&"聯結符。最后ASP頁面解釋的結果應該是像這樣的< 
td>< a href=qBoard.asp?boardid=1&boardname=系統板>系統板 < /a>< td>。 
response.write "< td>< a href=qAuthor.asp?author="&boardmanager & ">" &boardmanager & "< /a></td>" 
response.write "< td>" &rs("主題數") & "< /td>" 
response.write "< td>< a href=managerlogin.asp?boardid="&boardid & ">板務處理< /a></td>< /tr>" 
  

注:在這個表中,除了可以由連接來顯示看板主題的內容,還有一個斑竹查詢部分和板務處理部分,版主查詢可以是通過qAuthor.asp來實現的,它只是簡單的從數據庫中取出作者訊息,并顯示出來,這兒就不多說了。而板務處理是由managerlogin.asp頁面來處理的。這屬于文章審閱模塊,我在后面再詳說。 
rs.movenext 
loop until rs.eof 
%> 
注:通過一個do … loop循環,把紀錄集中所有的訊息都顯示了出來。 
< /table> 
< div align="center">

點擊看板名稱可以得到主題列表,點擊板主名稱可以察看板主訊息< /div> 
< /body> 
< /html> 
< % 
set rs=nothing 
conn.close 
set conn=nothing 
%> 
  

(3)打造qBaord.asp頁面: 
< % 
boardid=request("boardid") '取出由上個頁面傳遞過來的看板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) //注:聲明參數數組 
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"> 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩色综合| 欧美一级一区二区| 麻豆91在线播放| 一区在线观看免费| 91精品国产全国免费观看| 99久久国产免费看| 国产精品自在在线| 日韩精品福利网| 一区二区三区四区亚洲| 国产清纯在线一区二区www| 欧美日韩精品福利| 色综合天天综合在线视频| 国产精品夜夜嗨| 久久91精品国产91久久小草| 婷婷开心激情综合| 亚洲精品视频在线观看网站| 中文在线资源观看网站视频免费不卡| 91精品蜜臀在线一区尤物| 在线精品视频一区二区三四| 成人avav影音| 国产成人福利片| 国产一区二区精品久久99| 蜜臀av性久久久久蜜臀aⅴ| 亚洲一区二区三区四区中文字幕| 欧美激情在线看| www激情久久| 欧美tickle裸体挠脚心vk| 欧美精品免费视频| 欧美美女直播网站| 欧美午夜视频网站| 欧美色精品在线视频| 色综合激情久久| 97精品久久久午夜一区二区三区 | 国产精品国产三级国产aⅴ原创| 欧美一卡2卡3卡4卡| 7777精品伊人久久久大香线蕉的 | 久久精品国产精品亚洲精品| 日本亚洲免费观看| 在线精品视频免费播放| 国产一区二区三区美女| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲一区二区三区四区五区黄| 亚洲欧美偷拍三级| 亚洲色图.com| 一区二区三区在线观看视频| 亚洲综合清纯丝袜自拍| 亚洲成人av在线电影| 无码av中文一区二区三区桃花岛| 天堂影院一区二区| 美女mm1313爽爽久久久蜜臀| 国产一区二区电影| 成人黄色777网| 色婷婷av一区二区三区大白胸| 欧美综合一区二区三区| 欧美精选午夜久久久乱码6080| 日韩精品中文字幕在线一区| 久久九九99视频| 亚洲欧洲美洲综合色网| 亚洲一区二区成人在线观看| 日韩av电影天堂| 国产精品一区二区黑丝| 91影院在线观看| 欧美日韩激情一区二区三区| 精品美女在线观看| 欧美国产日本视频| 亚洲一区二区在线免费观看视频 | 老司机免费视频一区二区三区| 国产一区二区三区视频在线播放| 成人免费视频播放| 欧美性色黄大片| 久久久久久久久久久久久夜| 综合自拍亚洲综合图不卡区| 午夜欧美视频在线观看| 国产一区二区三区四区五区入口 | 黄色日韩三级电影| a美女胸又www黄视频久久| 欧美日韩国产区一| 成人免费一区二区三区视频 | 欧美日韩免费一区二区三区视频| 欧美一区日韩一区| 国产精品久久久久影院| 亚洲国产精品一区二区久久| 国产乱码字幕精品高清av| 在线中文字幕不卡| 久久在线观看免费| 一区二区日韩av| 久久99国产精品麻豆| 色美美综合视频| 久久在线免费观看| 亚洲aaa精品| av成人动漫在线观看| 欧美一区二区三区在线看| 亚洲欧洲国产专区| 激情图片小说一区| 欧洲一区二区三区在线| 国产欧美一区二区精品忘忧草| 日韩综合在线视频| 91老司机福利 在线| 2020国产精品久久精品美国| 亚洲已满18点击进入久久| 国产999精品久久久久久绿帽| 欧美久久久久中文字幕| 亚洲视频每日更新| 国产在线不卡视频| 91精品视频网| 亚洲第一福利一区| 99久久婷婷国产| 国产午夜精品一区二区三区四区| 日韩国产精品久久久久久亚洲| 99v久久综合狠狠综合久久| 精品国产一区二区三区不卡| 亚洲va天堂va国产va久| 91丝袜国产在线播放| 国产蜜臀97一区二区三区| 国产在线不卡一区| 精品女同一区二区| 毛片不卡一区二区| 在线不卡一区二区| 亚洲成人免费观看| 色狠狠综合天天综合综合| 国产精品欧美久久久久无广告| 精品一区二区日韩| 日韩欧美国产一二三区| 亚洲国产成人精品视频| 日本韩国欧美国产| 亚洲黄色在线视频| 91免费在线视频观看| 国产精品不卡一区| 91免费观看视频| 国产精品麻豆一区二区| 丁香婷婷综合激情五月色| 精品国产第一区二区三区观看体验 | 成人av电影免费在线播放| 欧美精彩视频一区二区三区| 国产精品99久久久久久宅男| 久久夜色精品国产噜噜av| 精品一区二区三区久久| 久久综合精品国产一区二区三区| 国产一区欧美日韩| 久久精品视频免费| 丰满白嫩尤物一区二区| 国产精品久久一级| 91麻豆文化传媒在线观看| 亚洲一区二区三区不卡国产欧美| 欧美在线你懂的| 亚洲第一在线综合网站| 3atv在线一区二区三区| 欧美aaa在线| 国产亚洲人成网站| 99在线精品一区二区三区| 亚洲精品视频一区| 欧美日韩国产综合视频在线观看 | 国产成人在线看| 国产精品免费久久久久| 91香蕉国产在线观看软件| 亚洲一二三四在线| 日韩欧美不卡一区| 国产高清不卡一区| 亚洲精品伦理在线| 91精品国产综合久久久久久漫画| 久久av资源网| 亚洲国产精品二十页| 在线免费一区三区| 久久精品国产网站| 国产精品无码永久免费888| 91福利精品视频| 久热成人在线视频| 中文字幕日本乱码精品影院| 欧美精品色综合| 成熟亚洲日本毛茸茸凸凹| 亚洲激情综合网| 精品久久五月天| 91浏览器在线视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产日本欧洲亚洲| 欧美性受极品xxxx喷水| 精品影视av免费| 一区二区视频免费在线观看| 日韩欧美一二区| 色综合久久综合网97色综合| 久久精品噜噜噜成人88aⅴ| 亚洲少妇30p| 欧美精品一区二区三区蜜桃 | 欧美性色综合网| 国产成人精品午夜视频免费| 亚洲国产一区二区三区| 久久久777精品电影网影网| 在线观看网站黄不卡| 国产精品一区2区| 日韩精品91亚洲二区在线观看| 国产偷国产偷精品高清尤物| 欧美绝品在线观看成人午夜影视| 成人激情开心网| 日韩国产欧美在线视频| 亚洲码国产岛国毛片在线| 国产亚洲美州欧州综合国| 欧美精品乱码久久久久久| 成人黄色免费短视频| 九九九精品视频| 丝袜美腿亚洲色图|