返回列表 上一主題 發帖

[教學] (實戰專題) 文字檔聯絡簿 下篇

[教學] (實戰專題) 文字檔聯絡簿 下篇

記錄資料的順序

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

使用MoveFile方法來更改檔案名稱
更改檔案名稱的MoveFile方法標準用法: 檔案物件名.MoveFile 舊檔案的真實完整路徑與檔名 新檔案的真實完整路徑與檔名

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

10-9.png
2010-5-25 19:53


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

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


使用DeleteFile方法來刪除檔案

  • 刪除檔案的DeleteFile方法標準用法:

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


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


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

    10-10.png
    2010-5-25 19:55

心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

建立完整的程式

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

 還記得我們已經完成 『意見發表表單』的網頁『issue.asp』中所使用的幾個輸入欄位名稱嗎?簡列如下

欄位

欄位名稱

表單元件

家長姓名

name

單行文字方塊

聯絡Email

email

單行文字方塊

意見主題

subject

單行文字方塊

意見反映內容

textmemo

多行式文字方塊



這些欄位中的資料都是我們ASP程式所要讀取以及處理的資料,因此我們必須先在ASP程式中利用Requst方法來讀取這些欄位中的資料,讀取各欄位中資料的方法列表如下:

意見發表表單網頁中的欄位名稱

ASP程式的讀取方法

name

Requst("name")

email

Requst("email")

subject

Requst("subject")

textmemo

Request("textmemo")



10-11.png
2010-5-25 19:57


如果我們不希望發表意見的家長在各個欄位中不填入資料而留白,我們還可以加上下列這段判斷敘述來檢查各個欄位中是否留下空白沒有填寫資料:
  1. If name = "" Or email = "" Or subject = "" Or textmemo = "" Then
  2. Response.Write "您有欄位空白沒有填寫資料!"
  3. Response.End ' 中斷ASP程式執行
  4. End If
複製代碼
10-12.png
2010-5-25 19:58
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

留言意見資料的轉換

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

以下為ASP程式處理從『意見發表表單』的網頁『issue.asp』中讀取欄位資料後的資料HTML格式轉換程式敘述:
  1. ' 第一行為處理姓名欄位資料
  2. Line1 = "留言者:" & name
  3. '第二行為處理E-Mail欄位資料
  4. Line2 = "<A HREF=mailto:" & Email & ">" & Email & "</A>"
  5. ' 第三行為處理主題欄位資料
  6. Line3 = "主 題:" & subject & "<BR>"
  7. ' 第四行為處理留言內容
  8. '必須先將留言內容中的跳行字元 vbCrLf 取代成為 <BR>
  9. textmemo = Replace( textmemo, vbCrLf, "<BR>" )
  10. ' 因為留言內容是多行的文字欄位,
  11. '所以我們利用表格形式顯示
  12. Line4 = "<TABLE BORDER=0><TR><TD>"
  13. Line4 = Line4 & textmemo & "</TD></TR></TABLE>"
複製代碼
注意
在處理留言內容欄位的時候我們'必須利用Replace函數先將留言內容中的跳行字元 vbCrLf 取代成為 <BR>
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

讀取與寫入留言意見資料資料

同家長意見留言資料被轉會為HTML格式後,接下來我們要作的就是將這些最新的意見留言資料留言意見資料與原本存在於留言紀錄資料檔案『information.txt』內的舊意見留言資料合併起來再回存至留言紀錄資料檔案『information.txt』中。
  1. ' 建立 FileSystemObject 物件
  2. Set fileobject =
  3. Server.CreateObject("Scripting.FileSystemObject")
  4. Application.Lock
  5. ' 取得 information.txt 及 oldinfo.txt 的完整路徑
  6. FilePath = Server.MapPath("information.txt")
  7. OldFilePath = Server.MapPath("oldinfor.txt")
  8. ' 將 information.txt 更名複製為 oldinfo.txt
  9. fileobject.MoveFile FilePath, OldFilePath
  10. ' 開啟 oldinfo.txt
  11. Set TEMP = fileobject.OpenTextFile(OldFilePath, , True)
  12. ' 建立 information.txt 來寫入新的意見留言
  13. Set newmessage = fileobject.CreateTextFile(FilePath)
  14. ' 將新的意見留言資料寫入 information.txt
  15. newmessage.WriteLine Line1
  16. newmessage.WriteLine Line2
  17. newmessage.WriteLine Line3
  18. newmessage.WriteLine Line4
  19. newmessage.WriteLine "<HR>"
  20. ' 一次讀取整個 oldinfo.txt的資料(已經存在於TEMP),
  21. ' 然後將位於oldinfo.txt 中舊的意見留言合併寫入 information.txt
  22. newmessage.WriteLine TEMP.ReadAll
  23. ' 資料寫入完畢後,關閉 oldinfo.txt
  24. TEMP.Close
  25. ' 刪除已經沒有用處的 oldinfo.txt
  26. fileobject.DeleteFile OldFilePath, True
  27. Application.UnLock
複製代碼
在開始檔案資料處理之前我們使用了 Application.Lock方法與在檔案資料處理完畢後使用了 Application.UnLock方法,是為了避免兩位甚至兩位以上的連線瀏覽者同時進行網頁鍊結時造成ASP程式執行的結果發生資料錯誤的預防措施。
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

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

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

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

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

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

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

  27. On Error Resume Next

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

  30. Application.Lock

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

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

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

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

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

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

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

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

  53. Application.UnLock

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

  58. %>
複製代碼
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

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

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


到此,我們的網路家長聯絡簿已經全部完成了。
10-17.png
2010-5-25 20:06
  1. <HTML>
  2. <HEAD><TITLE>網路家長聯絡簿</TITLE>
  3. <meta content="text/html; charset=big5">
  4. </HEAD><BODY>
  5. <H2 ALIGN=CENTER>網路家長聯絡簿</h2>
  6. <hr size="1">

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

  8. <hr size="1">
  9. <CENTER><A HREF="issue.asp">填寫家長聯絡簿</A></CENTER><P>
  10. </BODY>
  11. </HTML>
複製代碼
(實戰專題) 文字檔聯絡簿 完整範例壓縮檔: guest.rar (2.3 KB)
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

        靜思自在 : 布施如播種,以歡喜心滋潤種子,才會發芽。
返回列表 上一主題