#!/usr/local/bin/perl
↑perl(インタプリタ)のパスを指定
# ---- 初期設定 ----
↓ゲストブックの設置場所
$gbook_url = 'http://www.technido.co.jp/cgi-bin/...';
↓保存できる最大数
$max_msg = 50;
↓戻り先のURL
$home_url = 'http://www.technido.co.jp/index.html';
↓ゲストブックの説明文
$explan ='<CENTER><H2><B>◆超簡単ゲストブック◆</B></H2><BR><FONT size="3">'メッセージを入力して[送信]をクリックしてください。</FONT></CENTER><BR>;
:
↓保存用ファイル
$filename = 'gbook.txt';
↓管理用パスワード
$passwd = '123'
# ---- 処理開始 ----
↓入力内容によって処理を分岐
if($in{'direction'} eq "delete"){ ←削除
&delete;
&delete_html;
}elsif($in{'direction'} eq 'pw'){ ←管理用パスワード
if($in{'pass'} eq $passwd){
&delete_html;
}else{
&error(pw_err);
}
}else{
if($in{'writeon'} eq 'writemsg'){ ←書き込み
if($in{'message'} eq ""){ ←メッセージが空白のとき
&error(msg_err);
}else{
&write;
&htmlbase;
}
}else{
&htmlbase;
}
}
↓ブラウザに送信するHTMLの土台
sub htmlbase{
print "Content-type: text/html\n";
print "\n";
print <<EOM;
<HTML>
<HEAD>
<TITLE>simple guest book</TITLE>
</HEAD>
<P align="right">
<A HREF="$home_url">表紙へ</A>
<CENTER><TABLE><TR><TD>
$explan ←説明文を挿入
<FORM action="gbook.cgi" method="POST">
<B>メッセージ:</B><INPUT type="text" name="message"size="80"><BR>
↑メッセージ用テキストボックス
<BR><BR>
<INPUT type="submit" value="送信"> <INPUT type="reset" value="取消">
↑[送信][取消]ボタン
</FORM>
↓ファイルのオープン
if(!open(OUT,"$filename")){&error(file_err);}
flock(OUT,2);
@DATA = <OUT>;
flock(OUT,8);
close(OUT);
$count = @DATA;
$i = 0;
↓ファイル内容の表示
while($count > 0){
($date,$message,) = split(/\,/,$DATA[$i]);
print "$date \n";
print "<BR>$message<HR>\n";
$i ++;
$count --;
}
<FORM action="gbook.cgi" method="POST">
<INPUT type="hidden" name="direction" value="psw">
<INPUT type="submit" value="管理用パスワード"><INPUT type="password" name="pass" size="20"></FORM>
</BODY>
</HTML>
EOM
}
# 実際の書き込み処理
sub write{
$message = $in{'message'};
&jcode'convert(*message,"sjis");
↓書き込み日時を取得
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime;
$mon++;
@week = ('日','月','火','水','木','金','土');
$wday = $week[$wday];
$mon = sprintf("%.2d",$mon);
$mday = sprintf("%.2d",$mday);
$hour = sprintf("%.2d",$hour);
$min = sprintf("%.2d",$min);
$sec = sprintf("%.2d",$sec);
$year += 1900;
$new_msg = "$year/$mon/$mday($wday)$hour:$min:$sec,$name,$comment,\n";
if(!open(OUT,"$filename")){&error(file_err);}
flock(OUT,2);
@DATA = <OUT>;
flock(OUT,8);
close(OUT);
unshift(@DATA,$new_msg);
$i = 0;
foreach $line(@DATA){
$i ++;
if($i > $max){last;}
push(@NEWDATA,$line);
}
if(!open(IN,">$filename")){&error(file_err);}
flock(IN,2);
print IN @NEWDATA;
flock(IN,8);
close(IN);
}
# メッセージ削除画面
sub delete_html{
print "Content-type: text/html\n\n";
print <<EOM;
<HTML>
<HEAD>
<TITLE>delete a message</TITLE>
:
}
# 実際の削除処理
sub delete{
if(!open(OUT,"$filename")){&error(file_err);}
flock(OUT,2);
:
}
# エラー処理
sub error{
$error = $_[0];
if($error eq "msg_err"){
$errmsg = 'メッセージを入力してください。';
}elsif($error eq "err_file"){
$errmsg = 'ファイルがオープンできませんでした。';
}else{
$errmsg = '不正なパスワードです。';
}
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>ERROR</TITLE></HEAD>\n";
print "<BODY>\n";
print "<CENTER><B>$errmsg</B></CENTER><HR>\n";
print "<A href=\"gbook.cgi\">戻る</BODY></HTML>\n";
exit;
}
----------------------------------------------------------------------- |