12.7 如何製作簡易訪客留言板?

(一)製作訪客留言表單 signin.htm

您可以使用網頁編輯器來快速製作,也可以手動用 HTML 語法來撰寫。

以下是 signin.htm 的內容:

<html>
<head>
<!-- 加上以下這一行,以免有亂碼產生 -->
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>留言板</title>
</head>
<body bgcolor="white">
<hr size=1>
<center>
<!--以下是您的站台名稱-->
<font size=5 color=red>我的訪客留言板</font>
<br>
<!--以下是您的版權宣告-->
<font color="green" size="2"> v1.0 精簡版 (C) 1997 written by OLS3</font>
<hr size=1>
<table align=center border=0><tr><td>

<!--以下是表單內容, 共有二個欄位: 姓名及留言內容, 您可以自行再增添; 
表單採 POST 呼叫法, cgi 程式名稱是 GBK.cgi -->
<form name="ols3" method="post" action="http://主機/cgi-bin/GBK.cgi">

<!--姓名欄位的名稱是 name-->
姓名: <input type="text" name="name" size="30">
<br>

<!--留言內容欄位的名稱是 comment-->
留言內容:<br>
<textarea name="comment" rows="5" cols="45"></textarea>
<p>
<input type="submit" value="確定"> <input type="reset" value="清除">
<input type="button" value="回上一頁" onClick="history.back()">
</form>

</td></tr></table></center>
</body>
</html>

(二)製作留言寫入程式 GBK.cgi

留言寫入的方式有許多種,這裡介紹的是靜態標記法。

所謂靜態標記法是說:將留言內容,直接寫入某一個 HTML 檔中,該 HTML 檔,
事先即存在一個特殊的標記,此標記的目的,是用來識別留言要從何處開始寫入,
也就是說,在該標記之後,就是留言開始要寫入的地方。
將來若要顯示留言內容時,只要直接超連結至這個 HTML 檔即可!
這種方式的留言板算是最簡單輕便的一種。

寫入程式 GBK.cgi 如下:

#!/usr/local/bin/perl

# 先定義留言寫入的 HTML 檔案位置及名稱
$gbkhtml="/var/www/html/gbk.html";

# 設定留言板的 URL 位址
$gbkurl="http://主機/gbk.html";

# 取得表單傳遞過來的內容
read(STDIN, $temp, $ENV{'CONTENT_LENGTH'});
@pairs=split(/&/,$temp);
foreach $item(@pairs)  {
  ($key,$content)=split (/=/,$item,2);
  $content=~tr/+/ /;
  $content=~ s/%(..)/pack("c",hex($1))/ge;
  $OLS3{$key}=$content;
}

#經過上述動作,此時留言者姓名及內容,已分別放在 $OLS3{'name'} 及 $OLS3{'comment'} 中
$name=$OLS3{'name'};
$comment=$OLS3{'comment'};

# 處理斷行問題
$comment=~ s/\cM\n/<br>\n/g;

# 取得留言時間
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=gmtime(time+8*60*60);
if (length ($min) == 1) {$min = '0'.$min;}
if (length ($sec) == 1) {$sec = '0'.$sec;}
$mon+=1;
$date="$mon/$mday/$year, $hour:$min:$sec";

# 開啟HTML檔, 並讀出所有的內容
open(FHD, "$gbkhtml") || die "Content-type: text/html\n\n 開啟檔案錯誤!\n";
@all=<FHD>;
close(FHD);

# 重新開啟HTML檔, 以便更新其留言內容
open(FHD, ">$gbkhtml") || die "Content-type: text/html\n\n 開啟檔案錯誤!\n";

# 利用迴圈, 將原檔案內容依次寫回, 並在其過程中寫入新的留言
foreach $line(@all) {

   # 該列是否為標記? 若是, 表示該處為新留言開始要寫入的地方
   if ($line =~ /<!--ols3-->/)  {

    # 寫回原來的標記, 以後方可繼續使用
      print FHD "<!--ols3-->\n";

     # 寫入新的留言
      print FHD "姓名: $name [時間: $date]<p>$comment<hr size=1>\n";

   } else {

    # 若該列不是標記, 表示是舊有的內容, 則不予改變地將它寫回
    print FHD $line;
  }
}

# 關畢 HTML 檔
close(FHD);

# 接下來, 感謝一下留言的網友, 三秒後回到顯示留言畫面
print "Content-type: text/html\n\n";
print "<html><head>\n";
print "<META HTTP-EQUIV=REFRESH CONTENT=\"3;URL=$gbkurl\">\n";
print "<title>Thanks!</title></head>\n";
print "<body bgcolor=white><center>\n";
print "謝謝您的留言!\n";
print "</center></body></html>\n";

# 程式結束

將程式放入 cgi-bin 中

GBK.cgi 屬性設為 755,放入 cgi-bin 目錄中

gbk.html 屬性設為 666 ,放入您的網頁空間中

gbk.html 一開始尚未有任何留言寫入時的樣子如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>我的留言板</title>
</head>
<body bgcolor=white>
<center>
<font size=5 color=red>我的留言板</font>
<hr size=1>
<a href="http://主機/signin.htm">我要留言</a>
<hr size=1>
</center>
<!--ols3-->
</body>
</html>

(三) 顯示訪客留言:gbk.html

接下來,您就可以設一個超連結來顯示您的訪客留言囉。

例如:

<A href="http://主機/gbk.html">訪客留言</a>