麻辣家族討論版版's Archiver

小誌 發表於 2010-5-26 01:13

(實戰專題) 資料庫聯絡簿 下篇

[b][size=5][color=DarkOrange]留言處理程式[/color][/size][/b]

當學生家長在『意見發表表單』中填寫好相關資料然後按下『送出意見』按鈕,表單中的資料內容就會以『POST』的方式由SEVER端讀取,因為我們在表單傳送的Action參數指定Server端處理此一表單資料內容的程式為『add.asp』,因此我們就必須來撰寫能夠處理這些意見資料的ASP程式『add.asp』。

將在這個處理意見資料的ASP程式,我們可分為下列幾個部分:

[list=1]
[*]接收來自『意見發表表單』中的各欄位資料

    要將家長發言資料作後續處理及將這些資料內容存入資料庫之前,我們必須先把各個欄位的資料承接下來:[code]'接收addmsg.asp傳來的資訊
subject=Request("subject") '主題
parent = Request("parent")   '家長姓名 
email = Request("email")   'E-Mail
dadmam=Request("dadmam") '爸爸或媽媽的圖片
memo = Request("memo")   '發言內容
personal = Request("personal") '發言性質[/code][*]變更發言性質欄位所傳來的資料內容

    判斷家長發言的性質是否為『只給老師看』的悄悄話,如果是就將其資料表『私人公開』欄位的內容設為"Yes",如果發言的性質是『大家來討論』則其資料表『私人公開』欄位的內容設為"NO":[code]If personal = "大家來討論" or len(personal) = 0 Then
personal = "NO"
Else
personal = "YES"
End If[/code][*]建立與資料庫的連結
    要將承接下來的各個欄位的資料寫入資料庫之前,必須先建立與資料庫的連結,連結物件Connection的使用,之前我們已經談過不在贅言:[code]'與資料庫連線
Set CN = Server.CreateObject("ADODB.Connection")
CN.Open "Driver={Microsoft Access Driver (*.mdb)};-
DBQ="&Server.MapPath("message.mdb")If personal = "大家來討論" or len(personal) = 0 Then[/code][*]建立新增資料錄的Insert Into指令  
Insert Into指令敘述格式:[code]Insert Into  資料表名  (欄位名) values (欄位值)[/code]這種插入新資料錄的格式又可分為兩種形式:
[list=1]
[*]逐一將欄位值設定給相對應的欄位,然後再新增至資料表中,例如:
[attach]938[/attach]

[*]另一種方式與上一種格式雷同,但是省略了欄位名稱:
[attach]939[/attach]
    建議儘量避免使用第二種方式,因為少了欄位對應很容易發生資料誤填的情況!
[/list]

    建立與資料庫的連結後,我們首先組合將新增資料錄的Instert Into指令組合起來,然後再寫入資料庫檔案中:
'將資料寫入資料庫[code]sql = "Insert Into allmessage (家長姓名, 留言主題, 聯絡信箱, 留言內容, 私人公開, 爸媽) Values ("
sql = sql & chgStr(parent) & ", "
sql = sql & chgStr(subject) & ", "
sql = sql & chgStr(email) & ", "
sql = sql & chgStr(memo) & ", "
sql = sql & chgStr(personal) & ", "
sql = sql & chgStr(dadmam) & ")"
CN.Execute sql[/code][*]建立chgStr函數
    由於家長發言的資料必須單引號括起來的的型式與Insert Into指定結合在一起,但如果家長發言的資料內容原本就使用了單引號,將會使程式產生錯誤,因此我們就先自行建立一個chgStr函數,將家長發言的資料內容先經過chgStr函數過濾,若資料內容含有單引號則將單引號轉換為雙引號:[code]'將單引號置換為雙引號
Function chgStr( data )
chgStr = "'" & Replace( data, "'", "''" ) & "'"
End Function[/code][*]轉向至顯示留言意見的網頁guest.asp  
    當家長發言的資料內容處理完畢並儲存至資料庫檔案中後,我們則必須將網頁轉向至顯示留言意見的網頁guest.asp,如此一來,發言的家長就可看見他的發言是否已經順利的登錄:[code]Response.Redirect "guest.asp"[/code][/list]


add.asp[code]<%
'接收addmsg.asp傳來的資訊
subject=Request("subject")
parent = Request("parent")
email = Request("email")
dadmam=Request("dadmam")
memo = Request("memo")
personal = Request("personal")
If personal = "大家來討論" or len(personal)  = 0 Then
     personal = "NO"
Else
     personal = "YES"
End If
'與資料庫連線
Set CN = Server.CreateObject("ADODB.Connection")
CN.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("message.mdb")

'將單引號置換為雙引號
Function chgStr( data )
   chgStr = "'" & Replace( data, "'", "''" ) & "'"
End Function
'將資料寫入資料庫
sql = "Insert Into allmessage (家長姓名, 留言主題, 聯絡信箱, 留言內容, 私人公開, 爸媽) Values ("
sql = sql & chgStr(parent) & ", "
sql = sql & chgStr(subject) & ", "
sql = sql & chgStr(email) & ", "
sql = sql & chgStr(memo) & ", "
sql = sql & chgStr(personal) & ", "
sql = sql & chgStr(dadmam) & ")"
CN.Execute sql
'將網頁轉向至顯示留言意見的網頁guest.asp
Response.Redirect "guest.asp"
%>[/code]

小誌 發表於 2010-5-26 01:19

[color=DarkOrange][size=5][b]回覆表單程式網頁[/b][/size][/color]
還記得『顯示留言意見』網頁中如果老師以密碼登入成為管理模式時,必須讓老師們可以針對某位特定學生家長所發表的意見作出獨立的回應嗎?

[attach]940[/attach]

要讓老師們可以針對某位特定學生家長所發表的意見作出獨立的回應,我們當然也必須設計一個『老師回覆表單』,讓老師能夠在上面回覆發言,並且要能將這些意見資料送給我們處理老師回覆資料的ASP程式『anssave.asp』來紀錄以及處理這些回覆資料。

    在這個『老師回覆表單』網頁中我們必須再另外撰寫一個ASP程式將特定的家長發言資料秀在其中,好讓老師能夠對應家長發言來作出回覆:

[attach]941[/attach][code]<%
ID = Request.Querystring("ID")
Set CN = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("message.mdb")
CN.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set RS = Server.CreateObject("ADODB.Recordset")
SQL="SELECT*FROM allmessage WHERE (編號="&ID&")"
RS.Open SQL,CN,1,3
%>[/code]上列這個ASP程式內容您應該不陌生吧!之前我們就已經談了很多,現在就針對我們尚未介紹的SQL語言『Select...From...Where』來作說明:

[color=Green][size=4][b]Select...From...Where篩選敘述[/b][/size][/color]

    之前我們所談的Select...From敘述它所選取的資料錄式資料表中全部的資料,如果我們只要選取某些特定條件的資料錄時該怎麼辦,例如在學生成績資料表中,我們只要篩選出英文成績不及格的同學,那我們的指令敘述如何撰寫?

    首先我們必須先把我們的選取條件定出來,比方說,我們要挑出英文成績低於60分的同學,則我們的條件式應為『英文成績<60』,接著再於這個條件式之前加上Where保留字,最後再將這段組合敘述放在Select...From後面就行了:

[attach]942[/attach]

知道如何將特定的家長發言資料秀在表單中嗎?其實很簡單,我們不過是將資料庫中的資料取出來,然後秀在表單欄位中而已:

『家長姓名』欄位網頁敘述標籤[code]<td bgcolor="#CCCCFF"><font size="2">
<%=RS("家長姓名")%></font></td>[/code]『留言主題』欄位網頁敘述標籤[code]<td bgcolor="#CCCCFF"><font size="2">
<%=RS("留言主題")%></font></td>[/code]『留言內容』欄位網頁敘述標籤[code]<td bgcolor="#CCCCFF"><font size="2">
<%= RS("留言內容") %></font></td>[/code]其實我們『老師回覆表單』的重點是在老師回覆欄位上,老師在回覆欄位中所填入的資料,必須送給我們處理老師回覆資料的ASP程式『anssave.asp』來紀錄以及處理這些回覆資料。當老師填寫好回覆發言的資料後按下『送出回覆』按鈕後,表單中的資料內容就會以『POST』的方式由SEVER端讀取,然後將資料內容交由處理老師回覆資料的ASP程式『anssave.asp』來將資料內容寫入資料庫。[code]<form method="POST" action="anssave.asp">[/code] 

[color=Red]特別注意:[/color]當我們將資料從資料庫讀出後,必須於結束後將打開的資料表關閉起來,同時中斷與資料庫的連結,所以我們必須在網頁中再加入下列這段ASP程式敘述:[code]<%
RS.CLOSE
CN.CLOSE
%>[/code]teachans.asp[code]<%
ID = Request.Querystring("ID")
Set CN = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("message.mdb")
CN.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set RS = Server.CreateObject("ADODB.Recordset")
SQL="SELECT*FROM allmessage WHERE (編號="&ID&")"
RS.Open SQL,CN,1,3        
%>

<html>
<head><title>家庭聯絡簿</title>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
</head>
<body>


<form method="POST" action="anssave.asp">

  <input type="hidden" name="ID" value="<% =ID %>">
  <div align="center"><center><p><strong><font size="5">
老師意見回覆</font></strong></p>
  </center></div><div align="center"><center>
<table border="0">

      <center></center>
      <TR>
      <td bgcolor="#CCCCFF"><font color="blue" size="2">
家長姓名</font></td>
      <td bgcolor="#CCCCFF"><font size="2">
<%=RS("家長姓名")%></font></td>
    </tr>
    <tr>
      <td bgcolor="#CCCCFF"><font color="blue" size="2" >
留言主題</font></td>
      <td bgcolor="#CCCCFF"><font size="2">
<%=RS("留言主題")%></font></td>
    </tr>
   
    <tr>
      <td bgcolor="#CCCCFF"><font color="blue" size="2" >
留言內容</font></td>
      <td bgcolor="#CCCCFF"><font size="2">
<%= RS("留言內容") %></font></td>
    </tr>
    <tr>
      <td bgcolor="#CCCCFF"><font color="blue" size="2" >
老師答覆</font></td>
      <td bgcolor="#CCCCFF"><font size="2"><textarea rows="5" name="teachans" cols="39"><%= RS("老師回覆") %></textarea></font></td>
    </tr>
  </table>
  </center></div><div align="center"><center><input type="submit"
  value="送出回覆">
  </center></div>
  <div align="center"><center>&nbsp;
[<a href="guest.asp"><font color="#FF0000">
<font onmouseover="this.style.color='#0000BB'"
onmouseout="this.style.color='red'">返回聯絡簿</font></font></a>]
  </center></div>
</form>
<%
  RS.CLOSE
  CN.CLOSE
%>
</body>
</html>[/code]

小誌 發表於 2010-5-26 01:21

[color=DarkOrange][size=5][b]回覆留言處理程式[/b][/size][/color]

當老師在『老師回覆表單』中填寫好回覆資料然後按下『送出回覆』按鈕,表單中的資料內容就會以『POST』的方式由SEVER端讀取,因為我們在表單傳送的Action參數指定Server端處理此一表單資料內容的程式為『anssave.asp』,因此我們就必須來撰寫能夠處理這些意見資料的ASP程式『anssave.asp』。

要以下就是ASP程式『anssave.asp』完整的程式內容:
anssave.asp[code]<%
ID = Request.Form("ID")
teachans=Request.Form("teachans")
Set CN = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("message.mdb")
CN.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM allmessage WHERE (編號 = " & ID & ")"
RS.Open SQL,CN,1,3
teachans = Replace(teachans,vbCrLf,"<br>")
RS("老師回覆") =teachans
RS.Update
RS.Close
CN.CLose
Response.Redirect "guest.asp"
%>[/code][color=Green][size=4][b] 資料庫結構[/b][/size][/color]

這個處理老師回覆資料的ASP程式中所使用到的ASP物件與方法,我們都已經介紹過了,因此,我們的『家庭聯絡簿』到此算是一個段落了。至於資料庫檔案『message.mdb』中的資料表『allmessage』的欄位設定,請參考下圖:
[attach]943[/attach]


[color=RoyalBlue][size=4][b] (實戰專題) 資料庫聯絡簿 完整範例壓縮檔:[/b][/size][/color][attach]944[/attach]

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供