標題:
[教學]
(實戰專題) 線上討論區 下篇
[打印本頁]
作者:
小誌
時間:
2010-5-26 20:54
標題:
(實戰專題) 線上討論區 下篇
新討論主題處理程式
之前談到:如果想要發表新的討論項目,就可直接在程式網頁(Index.asp)下方的發言表單中輸入資料來建立新的討論主題,但是,Index.asp網頁程式並不負責處理新討論主題建立與寫入資料庫中的任務,而是將相關的資料於填寫完按下『送出討論主題』按鈕後交由addnew.asp程式來處理:
[attach]977[/attach]
注意:
要在資料表中新增一筆資料,請使用資料錄的AddNew方法新增資料錄。
利用rs("欄位名稱")=欄位值,將欄位資料寫入相對應的欄位,這樣的動作並沒有真正的將資料寫入資料庫中,只是將資料寫入至緩衝區,我們必須再呼叫Update方法,才能將資料真正的寫入資料庫中,切記。
完成新增資料錄並利用Update方法將資料寫入資料庫後,記得將網頁連結轉向回Index.asp程式網頁,否則瀏覽者所見到的將只是一個空白網頁。
Addnew.asp
<%
'建立資料庫連結物件
Set conobject = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("bbs.mdb")
'連結資料庫
conobject.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&DBPath
'建立資料庫存取物件
Set RS=Server.CreateObject("ADODB.Recordset")
'打開資料表
RS.Open "主標題",conobject,1,3
'儲存資料
rs.AddNew
rs("姓名") = Request("姓名")
rs("Email") = Request("Email")
rs("主題") = Request("主題")
rs("內容") = Request("內容")
rs("篇數") = 0
rs.Update
Response.Redirect "index.asp"
%>
複製代碼
作者:
小誌
時間:
2010-5-26 20:57
單一討論主題程式網頁
當我們在討論項目列表程式網頁index.asp中,點選了某一個已存在的討論項目『主題』超連結,就會連結進入該討論主題的對應討論網頁join.asp,此程式網頁同樣分為兩個部分,一個是目前全部的討論文章列表(下圖A部分),另一是參與目前主題討論的發言表單(下圖B部分):
[attach]978[/attach]
特別注意:
我們連結進入討論網頁join.asp的網址,在其網址尾端含有一個『ID=X』的參數,這個參數值X就是討論主題的編號,也就是資料表中『主編號』欄位的資料值。
在目前主題全部的討論文章列表的部分,我們必須分別讀取資料庫中的『主標題』資料表來讀取『討論主題』的發言(下圖A部分),及資料庫中的『次標題』資料表來讀取『參予討論』的發言資料(下圖B部分):
[attach]979[/attach]
因為資料讀取的方式與討論項目列表程式網頁相同,所以小誌贅述,不過提醒你不必重新建立資料庫的Connection物件喔!只要在『主標題』資料表中的資料讀取完畢後將資料錄物件Close起來,然後再重新使用Open方法打開『次標題』資料表來讀取資料即可!
參與目前主題討論的發言表單與一般的表單製作相同,當按下『送出討論內容』按鈕後,表單資料將送交joinnew.asp程式處理,但是我們在表單中還另外增加了一個傳送目前討論主題的『主編號』隱藏欄位,為何要有這個隱藏欄位?小誌後續單元說明。
[attach]980[/attach]
join.asp
<%
'建立資料庫連結物件
Set conobject = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("bbs.mdb")
'連結資料庫
conobject.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&DBPath
'建立資料庫存取物件
Set RS=Server.CreateObject("ADODB.Recordset")
'打開資料表
SQL = "Select * From 主標題 Where 主編號=" & request("ID")
RS.Open SQL,conobject,1,3
'儲存資料
%>
<HTML>
<BODY>
<h2 Align="Center"><img border="0" src="bbs.gif"></h2>
<!-- 以下為「討論主題」部分 -->
<TABLE Width="100%"><TR><TD Align=Center bgColor=#000080>
<B><font color="#FFFFFF" size="2">
問 題 討 論 </font></B></TD></TR></TABLE>
<%
Email = "<A HREF=mailto:" & rs("Email") & ">" & rs("Email") & "</A>"
%>
<CENTER><TABLE width="100%">
<TR><TD width="10%" bgcolor="#00CCFF"><font color="#000080"><B>
<font size="2">作者:</font></B><font size="2">
<%=rs("姓名")%></font></font></TD>
<TD width="10%" bgcolor="#00CCFF"><B><font size="2" color="#000080">
Email:</font></B><font size="2" color="#000080"><%=Email%></font>
</TD><TD width="55%" bgcolor="#00CCFF"><B><font size="2">
<font color="#000080">主題:</font></font></B><font size="2">
<%=rs("主題")%></font> </TD>
<TD width="20%" bgcolor="#00CCFF"><B><font color="#000080">
<font size="2">日期:</font></font></B>
<font size="2" color="#000080"><%=rs("發言日期")%></font>
</TD></TR>
<TR><TD BgColor=Cyan colspan="4"><font size="2"><%=rs("內容")%></font></TD></TR>
</Table></CENTER>
<HR>
<!-- 以下為「參予討論文章」部分 -->
<%
RS.close
SQL = "Select * From 次標題 Where 主編號=" & request("ID")
SQL = SQL & " Order By 次編號 Desc"
RS.Open SQL,conobject,1,3
While Not rs.EOF
Email = "<A HREF=mailto:" & rs("Email") & ">" & rs("Email") & "</A>"
%>
<CENTER><TABLE width="100%">
<TR><TD width="10%" bgcolor="#00CC00"><B>
<font size="2" color="#000000">作者:</font></B>
<font size="2" color="#000000"><%=rs("姓名")%></font></TD>
<TD width="10%" bgcolor="#00CC00"><font color="#000000">
<B><font size="2">Email:</font></B>
<font size="2"><%=Email%></font></font></TD>
<TD width="55%" bgcolor="#00CC00"><B><font size="2">
<font color="#000000">主題:</font></font></B><font size="2">
<%=rs("主題")%></font></TD>
<TD width="20%" bgcolor="#00CC00"><B><font size="2">
<font color="#000000">日期:</font></font></B><font size="2">
<%=rs("發表時間")%></font></TD></TR>
<TR><TD BgColor=#99FF33 colspan="4"><font size="2">
<%=rs("內容")%></font></TD></TR>
</Table></CENTER><hr size="1" color="#008000">
<%
rs.MoveNext
Wend
%>
<!-- 以下為「參與討論」輸入表單 -->
<TABLE Width="100%"><TR><TD Align=Center bgColor=#000080>
<B><font color="#FFFFFF" size="2">
參 與 本 問 題 討 論</font></B></TD></TR></TABLE>
<FORM action=joinnew.asp method=POST>
<Input Type=Hidden Name=ID Value=<%=Request("ID")%>>
<CENTER><TABLE Border="1" bordercolor="#FF9933" cellspacing="0" bgcolor="#FFCC66">
<TR><TD><font size="2">姓名:</font></TD>
<TD><font size="2"><INPUT Type=Text Size="30" name="姓名"></font></TD></TR>
<TR><TD><font size="2">Email:</font></TD>
<TD><font size="2"><INPUT Type=Text Size="30" name="Email">
</font></TD></TR>
<TR><TD><font size="2">主題:</font></TD>
<TD><font size="2"><INPUT Type=Text Size="60" name="主題">
</font></TD></TR>
<TR><TD><font size="2">內容:</font></TD>
<TD><font size="2"><TEXTAREA name="內容" rows="8" cols="60">
</TEXTAREA></font></TD></TR>
</TABLE>
<INPUT Type="submit" value=" 送出討論內容 "></CENTER>
</Form>
<HR>
<p align="right"><A HREF="index.asp">回討論區</A>
</BODY>
</HTML>
複製代碼
作者:
小誌
時間:
2010-5-26 21:01
參予討論文章處理程式
當瀏覽者在進入某一討論主題並發表參與討論的意見後(join.asp),其所發表的資料就會送交參予討論文章處理程式joinnew.asp處理,此程式第一件要做的事是將討論文章的內容寫入到『次標題』資料表中:
[attach]981[/attach]
請對照上圖部分的程式碼:
rs("主編號")=ID:ID就是我們在參與目前主題討論的發言表單所傳送目前討論主題的『主編號』隱藏欄位值,其目的是用來作為主標題與次標題的『主從索引』。
在將討論內容利用Update方法寫入資料庫後,我們利用Close方法暫時將資料錄關閉起來,為何要這樣?別忘了!在主標題資料表中我們還必須更新『篇數』欄位的資料值(參予討論的文章計數),所以還會再利用Open方法來打開主標題資料表。
[attach]982[/attach]
我們打開主標題資料表要更新『篇數』欄位的資料值,當然要先找出特定主題的資料錄嘍!因此我們要在開啟資料表的同時,加上『"Where 主編號=" & ID』才行(ID就是發言表單中的隱藏欄位值),如果我們沒有加上這個條件式,則主標題資料表中所有資料錄的『篇數』欄位都會被更新資料喔!
[attach]983[/attach]
Juinnew.asp
<%
ID=Request("ID")
'建立資料庫連結物件
Set conobject = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("bbs.mdb")
'連結資料庫
conobject.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&DBPath
'建立資料庫存取物件
Set RS=Server.CreateObject("ADODB.Recordset")
'打開資料表
SQL = "Select * From 次標題"
RS.Open SQL,conobject,1,3
'儲存資料
rs.AddNew
rs("姓名") = Request("姓名")
rs("Email") = Request("Email")
rs("主題") = Request("主題")
rs("內容") = Request("內容")
rs("主編號") = ID
rs.Update
rs.close
SQL = "Select * From 主標題 Where 主編號=" & ID
RS.Open SQL,conobject,1,3
rs("篇數")=rs("篇數")+1
RS.update
Response.Redirect "join.asp?ID=" & ID
%>
複製代碼
(實戰專題) 線上討論區 完整範例壓縮檔:
[attach]984[/attach]
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)