麻辣家族討論版版's Archiver

小誌 發表於 2010-5-25 19:55

(實戰專題) 文字檔聯絡簿 下篇

[color=DarkOrange][size=5][b]記錄資料的順序[/b][/size][/color]

當我們使用OpenTextFile方法來開啟檔案同時將這個檔案的開啟格式設定為可寫入的時候,有一個很大的缺點,就是當我們寫入資料時是從檔案的最尾端寫入資料,也就是說:我們在查看『觀看意見留言結果』的網頁內容時,後來加入的意見留言資料將會被放置在網頁的最後面,好像沒有人這樣做吧!應該是最新的資料要擺在網頁的最前頭耶!所以我們必須再利用檔案物件的MoveFile(檔案更名)方法與DeleteFile(檔案刪除)方法來改良我們的ASP程式。

[color=Green][size=4][b]使用MoveFile方法來更改檔案名稱[/b][/size][/color]
更改檔案名稱的MoveFile方法標準用法: 檔案物件名.MoveFile 舊檔案的真實完整路徑與檔名 新檔案的真實完整路徑與檔名

例如:我們將 information.txt 檔案名稱變更為 oldinfo.txt

[attach]910[/attach]

其實MoveFile方法的真正功能是:複製一個檔案名稱不同而檔案內的資料完全相同的檔案,我們這麼做的用意是將新的留言紀錄先寫到information.txt檔案中,然後再將oldinfo.txt檔案內舊的留言紀錄資料加到information.txt檔案中內,如此一來,最新的資料就會擺在留言資料記錄檔的最前面,我們在查看『觀看意見留言結果』的網頁內容時,最新的留言資料就會出現在網頁的最前頭。

當然,FileStstemObject物件也提供了我們一個複製檔案的方法『CopyFile』,但是這個方法我們並不適用,因為Copy方法只能完整的將一個檔案複製成為另一個新的檔案。


[color=Green][size=4][b]使用DeleteFile方法來刪除檔案[/b][/size][/color]
[list=1]
[*]刪除檔案的DeleteFile方法標準用法:

檔案物件名.DeleteFile 欲刪除的檔案真實完整路徑與檔名 若為唯讀檔是否刪除


[*]為何我們必須使用DeleteFile方法刪除檔案,因為當我們將新的留言紀錄先寫到information.txt檔案中,然後再將oldinfo.txt檔案內舊的留言紀錄資料加到information.txt檔案中內,如此一來,最新的留言資料就已經全部放置在information.txt檔案中,所以我們就可以將沒有用處的oldinfo.txt檔案刪除了。


[*]DeleteFile方法的『若為唯讀檔是否刪除』參數有兩個選擇『True』與『False』,若我們給的參數值是『True』則當我們要刪除檔案時,即使檔案的屬性是唯讀的將依樣會被刪除掉;若參數值是『True』則當我們要刪除的檔案它的檔案屬性是唯讀的話,ASP程式就將會引發錯誤。這個參數我們也可以省略不填,若不填則預設值為『False』。

[attach]911[/attach]
[/list]

小誌 發表於 2010-5-25 19:58

[color=darkorange][size=5][b]建立完整的程式[/b][/size][/color]

到現階段,我們已經完成『意見發表表單』的網頁『issue.asp』的製作,並且已經大致了解了寫作紀錄以及處理留言的ASP程式網頁檔案『handel.asp』所需的方法CreateTextFile(建立檔案)、OpenTextFile(開啟檔案)方法、WriteLine(逐行寫入資料)方法、ReadAll(讀取全部檔案資料)方法、MoveFile(檔案更名)方法與DeleteFile(檔案刪除)方法。現在我們就用這些方法來組合寫作完成我們的寫作紀錄以及處理留言的ASP程式。

 還記得我們已經完成 『意見發表表單』的網頁『issue.asp』中所使用的幾個輸入欄位名稱嗎?簡列如下
[table]
[tr][td=1,1,154][p=30, 2, center][font=全真中細圓體][font=Courier New][size=2]欄位[/size][/font][/font][/p][/td][td=1,1,157][p=30, 2, center][font=全真中細圓體][font=Courier New][size=2]欄位名稱[/size][/font][/font][/p][/td][td=1,1,150][p=30, 2, center][font=全真中細圓體][font=Courier New][size=2]表單元件[/size][/font][/font][/p][/td][/tr]
[tr][td=1,1,154][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]家長姓名[/size][/font][/color][/font][/p][/td][td=1,1,157][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]name[/size][/font][/color][/font][/p][/td][td=1,1,150][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]單行文字方塊[/size][/font][/color][/font][/p][/td][/tr]
[tr][td=1,1,154][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]聯絡Email[/size][/font][/color][/font][/p][/td][td=1,1,157][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]email[/size][/font][/color][/font][/p][/td][td=1,1,150][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]單行文字方塊[/size][/font][/color][/font][/p][/td][/tr]
[tr][td=1,1,154][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]意見主題[/size][/font][/color][/font][/p][/td][td=1,1,157][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]subject[/size][/font][/color][/font][/p][/td][td=1,1,150][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]單行文字方塊[/size][/font][/color][/font][/p][/td][/tr]
[tr][td=1,1,154][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]意見反映內容[/size][/font][/color][/font][/p][/td][td=1,1,157][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]textmemo[/size][/font][/color][/font][/p][/td][td=1,1,150][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]多行式文字方塊[/size][/font][/color][/font][/p][/td][/tr]
[/table]

這些欄位中的資料都是我們ASP程式所要讀取以及處理的資料,因此我們必須先在ASP程式中利用Requst方法來讀取這些欄位中的資料,讀取各欄位中資料的方法列表如下:
[table]
[tr][td=1,1,246][p=30, 2, left][font=全真中細圓體][font=Courier New][size=2]意見發表表單網頁中的欄位名稱[/size][/font][/font][/p][/td][td=1,1,215][p=30, 2, left][font=Courier New][size=2][font=全真中細圓體]ASP[/font][font=全真中細圓體]程式的讀取方法[/font][/size][/font][/p][/td][/tr]
[tr][td=1,1,246][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]name[/size][/font][/color][/font][/p][/td][td=1,1,215][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]Requst("name")[/size][/font][/color][/font][/p][/td][/tr]
[tr][td=1,1,246][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]email[/size][/font][/color][/font][/p][/td][td=1,1,215][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]Requst("email")[/size][/font][/color][/font][/p][/td][/tr]
[tr][td=1,1,246][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]subject[/size][/font][/color][/font][/p][/td][td=1,1,215][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]Requst("subject")[/size][/font][/color][/font][/p][/td][/tr]
[tr][td=1,1,246][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]textmemo[/size][/font][/color][/font][/p][/td][td=1,1,215][p=30, 2, left][font=全真中細圓體][color=#000000][font=Courier New][size=2]Request("textmemo")[/size][/font][/color][/font][/p][/td][/tr]
[/table]

[attach]912[/attach]

如果我們不希望發表意見的家長在各個欄位中不填入資料而留白,我們還可以加上下列這段判斷敘述來檢查各個欄位中是否留下空白沒有填寫資料:[code]If name = "" Or email = "" Or subject = "" Or textmemo = "" Then
Response.Write "您有欄位空白沒有填寫資料!"
Response.End ' 中斷ASP程式執行
End If[/code][attach]913[/attach]

小誌 發表於 2010-5-25 20:00

[color=Green][size=4][b]留言意見資料的轉換[/b][/size][/color]

當我們利用Requst方法將『意見發表表單』的網頁『issue.asp』中的輸入欄位資料讀取出來後,這些資料在顯示於『觀看意見留言結果』的網頁『message.asp』以及將這些意見留言資料寫入留言紀錄資料檔案『information.txt』之前,我們可以先將這些意見留言資料轉換為HTML格式,雖然這麼做將會使我們的留言紀錄資料檔案『information.txt』體積大了一點,但是當我們在製作『觀看意見留言結果』的網頁將會非常輕鬆。

以下為ASP程式處理從『意見發表表單』的網頁『issue.asp』中讀取欄位資料後的資料HTML格式轉換程式敘述:[code]' 第一行為處理姓名欄位資料
Line1 = "留言者:" & name
'第二行為處理E-Mail欄位資料
Line2 = "<A HREF=mailto:" & Email & ">" & Email & "</A>"
' 第三行為處理主題欄位資料
Line3 = "主 題:" & subject & "<BR>"
' 第四行為處理留言內容
'必須先將留言內容中的跳行字元 vbCrLf 取代成為 <BR>
textmemo = Replace( textmemo, vbCrLf, "<BR>" )
' 因為留言內容是多行的文字欄位,
'所以我們利用表格形式顯示
Line4 = "<TABLE BORDER=0><TR><TD>"
Line4 = Line4 & textmemo & "</TD></TR></TABLE>"[/code][color=Red]注意[/color]
在處理留言內容欄位的時候我們'必須利用Replace函數先將留言內容中的跳行字元 vbCrLf 取代成為 <BR>

小誌 發表於 2010-5-25 20:01

[color=Green][size=4][b]讀取與寫入留言意見資料資料[/b][/size][/color]

同家長意見留言資料被轉會為HTML格式後,接下來我們要作的就是將這些最新的意見留言資料留言意見資料與原本存在於留言紀錄資料檔案『information.txt』內的舊意見留言資料合併起來再回存至留言紀錄資料檔案『information.txt』中。[code]' 建立 FileSystemObject 物件
Set fileobject =
Server.CreateObject("Scripting.FileSystemObject")
Application.Lock
' 取得 information.txt 及 oldinfo.txt 的完整路徑
FilePath = Server.MapPath("information.txt")
OldFilePath = Server.MapPath("oldinfor.txt")
' 將 information.txt 更名複製為 oldinfo.txt
fileobject.MoveFile FilePath, OldFilePath
' 開啟 oldinfo.txt
Set TEMP = fileobject.OpenTextFile(OldFilePath, , True)
' 建立 information.txt 來寫入新的意見留言
Set newmessage = fileobject.CreateTextFile(FilePath)
' 將新的意見留言資料寫入 information.txt
newmessage.WriteLine Line1
newmessage.WriteLine Line2
newmessage.WriteLine Line3
newmessage.WriteLine Line4
newmessage.WriteLine "<HR>"
' 一次讀取整個 oldinfo.txt的資料(已經存在於TEMP),
' 然後將位於oldinfo.txt 中舊的意見留言合併寫入 information.txt
newmessage.WriteLine TEMP.ReadAll
' 資料寫入完畢後,關閉 oldinfo.txt
TEMP.Close
' 刪除已經沒有用處的 oldinfo.txt
fileobject.DeleteFile OldFilePath, True
Application.UnLock[/code]在開始檔案資料處理之前我們使用了 Application.Lock方法與在檔案資料處理完畢後使用了 Application.UnLock方法,是為了避免兩位甚至兩位以上的連線瀏覽者同時進行網頁鍊結時造成ASP程式執行的結果發生資料錯誤的預防措施。

小誌 發表於 2010-5-25 20:04

[color=Green][b][size=4]留言意見資料轉向輸出[/size][/b][/color]
後完成了最新的意見留言資料留言意見資料與原本存在於留言紀錄資料檔案內的舊意見留言資料的合併與回存留言紀錄資料檔案的動作後,我們ASP程式的撰寫也將近尾聲,現在最後一個動作就是將這些合併後的最新留言資料與舊的意見留言資料『轉向』輸出到『觀看意見留言結果』的網頁『message.asp』中。

handel.asp[code]<%
' 讀取意見發表表單網頁中的各欄位的資料
name = Request("name")
email = Request("email")
subject = Request("subject")
textmemo = Request("textmemo")
' 檢查各欄位是否空白沒有填寫資料
If name = "" Or email = "" Or subject = "" Or _
textmemo = "" Then
   Response.Write "您有欄位空白沒有填寫資料!"
   Response.End ' 中斷ASP程式執行
End If
'以下為讀入資料的處理,先將讀入的欄位資料改寫成
'HTML形式以方便『觀看意見留言結果』網頁取用

' 第一行為處理姓名欄位資料
Line1 = "留言者:" & name & "<BR>"

'第二行為處理E-Mail欄位資料
Line2 = "<A HREF=mailto:" & Email & ">" & Email & "</A><BR>"

' 第三行為處理主題欄位資料
Line3 = "主 題:" & subject & "<BR>"

' 第四行為處理留言內容
'必須先將留言內容中的跳行字元 vbCrLf 取代成為 <BR>
textmemo = Replace( textmemo, vbCrLf, "<BR>" )
' 因為留言內容是多行的文字欄位,所以我們利用表格形式顯示
Line4 = "<TABLE BORDER=0><TR><TD>"
Line4 = Line4 & textmemo & "</TD></TR></TABLE>"

On Error Resume Next

' 建立 FileSystemObject 物件
Set fileobject = Server.CreateObject("Scripting.FileSystemObject")

Application.Lock

' 取得 information.txt 及 oldinfo.txt 的完整路徑
FilePath = Server.MapPath("information.txt")
OldFilePath = Server.MapPath("oldinfo.txt")

' 將 information.txt 更名複製為 oldinfo.txt
fileobject.MoveFile FilePath, OldFilePath

' 開啟 oldinfo.txt
Set TEMP = fileobject.OpenTextFile(OldFilePath, , True)

' 建立 information.txt 來寫入新的意見留言
Set newmessage = fileobject.CreateTextFile(FilePath)

' 將新的意見留言資料寫入 information.txt
newmessage.WriteLine Line1
newmessage.WriteLine Line2
newmessage.WriteLine Line3
newmessage.WriteLine Line4
newmessage.WriteLine "<HR>"

' 一次讀取整個 oldinfo.txt的資料(已經存在於TEMP),
' 然後將位於oldinfo.txt 中舊的意見留言合併寫入 information.txt
newmessage.WriteLine TEMP.ReadAll

' 資料寫入完畢後,關閉 information.txt
TEMP.Close

' 刪除已經沒有用處的 oldinfo.txt
fileobject.DeleteFile OldFilePath, True

Application.UnLock

' 將合併後的最新留言資料與舊的意見留言資料
'『轉向』輸出到『觀看意見留言結果』的網頁
'『message.asp』中
Response.Redirect "message.asp"

%>
[/code]

小誌 發表於 2010-5-25 20:08

[color=DarkOrange][size=5][b]意見留言結果網頁[/b][/size][/color]
還記得我們在紀錄以及處理留言的ASP程式『handel.asp』中指定要將合併後的最新留言資料與舊的意見留言資料『轉向』輸出到『觀看意見留言結果』的網頁『message.asp』中嗎,沒錯,我們就是要來製作承接並且將意見留眼資料顯示出來的『觀看意見留言結果』的網頁『message.asp』。

       因為我們在ASP程式『handel.asp』中已經先將意見留言資料轉換為HTML格式了,同時我們還在程式中指定將合併後的最新留言資料與舊的意見留言資料『轉向』輸出到『觀看意見留言結果』的網頁『message.asp』中,因此我們在製作message.asp的時候只要將網頁的呈現主體設計出來即可,至於那些意見留言資料只要利用下列這段簡短的程式敘述把它連結包含進來網頁中顯示即可:[code]<!--#include file="information.txt" -->[/code][attach]914[/attach]

到此,我們的網路家長聯絡簿已經全部完成了。
[attach]915[/attach][code]<HTML>
<HEAD><TITLE>網路家長聯絡簿</TITLE>
<meta content="text/html; charset=big5">
</HEAD><BODY>
<H2 ALIGN=CENTER>網路家長聯絡簿</h2>
<hr size="1">

<!--#include file="information.txt" -->

<hr size="1">
<CENTER><A HREF="issue.asp">填寫家長聯絡簿</A></CENTER><P>
</BODY>
</HTML>
[/code][size=4][b][color=RoyalBlue](實戰專題) 文字檔聯絡簿 完整範例壓縮檔:[/color][/b][/size][attach]916[/attach]

頁: [1]

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