Board logo

標題: [教學] (實戰專題) 線上討論區 上篇 [打印本頁]

作者: 小誌    時間: 2010-5-26 20:28     標題: (實戰專題) 線上討論區 上篇

線上討論區,也就是所謂的『BBS』,本討論區的程式編寫有一定程度的挑戰性,不僅僅是ASP程式的問題,還包括了ACCESS資料庫『關聯性』的問題!本章範例中小誌將會簡單的說明如何建立資料表間的關聯性(只介紹與本章範例相關的部分操作,至於其他較深入的部份就得請您自行參閱相關書籍了),並且將ASP程式網頁做重點是的拆解與說明。


程式流程
本討論區程式範例共分為五大部分,分別是:

作者: 小誌    時間: 2010-5-26 20:33

主從資料表的欄位

主標題資料表
在主標題資料表中,我們必須配合問題討論項目列表程式網頁Index.asp功能表建立四個基礎欄位,分別是:姓名、主題、發言日期與篇數。

[attach]960[/attach]

篇數欄位存放的是該主題討論發言的總篇數,但是並不包括討論主題本身。

同時,配合單一主題討論列表程式網頁join.asp中,必須顯示原始討論主題的內容與發起討論者的電子信箱,所以還得加上『Email』與『內容』欄位:

[attach]961[/attach]

除此之外,還有一個非常重要的欄位:『主編號』欄位,這是主標題資料表與次標題資料表產生關聯性的關鍵欄位!因此,我們在主標題資料表中一共必須建立七個欄位,主標題資料的欄位結構如下圖所示:

[attach]962[/attach]

次標題資料表
在次標題資料表中我們則必須配合單一主題討論列表程式網頁join.asp,建立基本的Email、姓名、主題、內容與發表時間等五個欄位:

[attach]963[/attach]

當然還有『主編號』欄位,這個欄位的資料內容將會與主標題中的相同!除此之外,還有一個討論內容的『次編號』欄位,所以在次標題資料表中我們同樣必須建立七個欄位,次標題資料的欄位結構如下圖所示:

[attach]964[/attach]

提示:
由主標題資料表與次標題資料表的欄位結構中,我們不難發現:主編號與次編號乃是一對多的主從關係,我們假設某個討論主題它的主編號是1,如果沒有人對此主題發出討論回應(回應篇數是0),則在次標題資料表中將沒有主編號欄位為1的資料錄存在;相對的,如果有三個人對此主編號是1的討論主題做出回應(主標題資料表中的篇數資料欄位值為3),則在次標題資料表中將有五筆主編號欄位值為1的資料錄存在(但此三筆資料錄的次編號欄位值並不相同)!
這種一對多或多對一的關係關係乃是透過『關聯性』的設定而產生!
作者: 小誌    時間: 2010-5-26 20:39

建立資料表關聯性
了解了主標題資料表與次標題資料表中『主編號』、『次編號』的對應關係後,我們就來進行主標題資料表與次標題資料表的『關聯性』設定!因為本程式範例的資料庫為ACCESS資料庫,因此小誌就為您簡介一下如何為ACCESS資料庫中的資料表建立關聯性:

打開我們已經建立好主標題資料表與次標題資料表的bbs.mdb資料庫。




作者: 小誌    時間: 2010-5-26 20:47

討論區項目列表程式

討論項目列表程式網頁index.asp是進入『討論區』的大門網頁,這個網頁包含兩大部分,一是全部討論項目的列表部分(下圖A部分),進入此一程式網頁後,如果點選了某一個已存在的討論項目『主題』超連結,就可以連結進入該討論主題的對應討論網頁(join.asp),如果想要發表新的討論項目,就可直接在程式網頁下方的發言表單(下圖B部分)中輸入資料來建立新的討論主題:

[attach]972[/attach]

 因此,我們程式的設計就分為兩個部分,在全部討論項目的列表部分,我們只要開啟資料庫,然後將『主標題』資料表中的相關欄位資料取出來,並且加上相關的HTML表格標籤組合就可完成任務:

[attach]973[/attach]

 利用While Wend 迴圈敘述將所有資料表中資料錄欄位的資料全部取出列表,迴圈敘述停止執行的條件為 not rs.eof,意思就是說動作中資料錄的位置若超過資料錄最後一筆資料時就停止迴圈敘述,當然,在迴圈中敘述執行讀取一筆資料錄資料後,我們還必須利用資料錄的MoveNext方法將作用中資料錄的位置移至下一筆資料上!


提示:


index.asp
  1. <%
  2. '建立資料庫連結物件
  3.         Set conobject = Server.CreateObject("ADODB.Connection")
  4.         DBPath = Server.MapPath("bbs.mdb")
  5. '連結資料庫       
  6.         conobject.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&DBPath
  7. '建立資料庫存取物件       
  8.         Set RS=Server.CreateObject("ADODB.Recordset")
  9. '打開資料表       
  10. SQL = "Select * From 主標題 Order By 發言日期 Desc"
  11.         RS.Open SQL,conobject,1,3
  12. %>

  13. <HTML>
  14. <BODY>
  15. <h2 Align="Center"><img border="0" src="bbs.gif"></h2>
  16. <TABLE Border=0 Cellspacing=5 width="100%">     
  17. <TR BgColor=#00FFFF>     
  18. <TD align="center" bgcolor="#0066FF" width="20%"><font size="2" color="#FFFFFF">日期/時間</font></TD>   
  19. <TD NoWrapP align="center" bgcolor="#0066FF" width="20%"><font size="2" color="#FFFFFF">討論發起人</font></TD>   
  20. <TD align="center" bgcolor="#0066FF" width="50%"><font size="2" color="#FFFFFF">主題</font></TD>   
  21. <TD align="center" bgcolor="#0066FF" width="10%"><font size="2" color="#FFFFFF">回應篇數</font></TD></TR>   
  22.    
  23. <% While not rs.eof%>   
  24.    <TR Valign=TOP>   
  25.    <TD NoWrap width="20%">   
  26.     <p align="center"><font size="2"><%=rs("發言日期")%></font></TD>   
  27.    <TD width="20%">   
  28.     <p align="center"><font size="2"><%=rs("姓名")%></font></TD>   
  29.    <TD width="50%"><A HREF=join.asp?ID=<%=rs("主編號")%>>   
  30.    <font size="2">   
  31.    <%=rs("主題")%></font></A></TD>   
  32.    <TD width="10%">   
  33.     <p align="center"><font size="2"><%=rs("篇數")%></font></TD>   
  34.    </TR>   
  35. <%   
  36.    rs.MoveNext   
  37. Wend      
  38. %>   
  39. </TABLE>   
  40.    
  41. <TABLE Width="100%"><TR><TD Align=Center bgcolor=#000080>   
  42. <B><font color="#FFFFFF" size="2">我有新問題要討論</font></B>   
  43. </TD></TR></TABLE>   
  44. <CENTER>   
  45. <FORM Action=addnew.asp Method=POST>   
  46. <TABLE Border="1" bgcolor="#FFCC66" bordercolor="#FF9933" cellspacing="0">   
  47.    
  48. <TR><TD><font size="2">姓名:</font></TD>   
  49. <TD><font size="2"><INPUT Type="text" Size="30" Name="姓名"></font></TD></TR>   
  50.    
  51. <TR><TD><font size="2">Email:</font></TD>   
  52. <TD><font size="2"><INPUT Type="text" Size="30" Name="Email">   
  53.   </font>   
  54. </TD></TR>   
  55.    
  56. <TR><TD><font size="2">主題:</font></TD>   
  57. <TD><font size="2"><INPUT Type="text" Size="60" Name="主題">   
  58.   </font>   
  59. </TD></TR>   
  60.    
  61. <TR><TD><font size="2">內容:</font></TD>   
  62. <TD><font size="2"><TEXTAREA Name="內容" Rows="8" Cols="60">
  63. </TEXTAREA></font></TD></TR>   
  64. </TABLE>   
  65. <INPUT Type="submit" Value="送出討論主題">   
  66. </FORM>   
  67. </CENTER>   
  68. </BODY>   
  69. </HTML>
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)