一言メッセージ掲示板 その2
上のスクリプトの掲示板に削除機能をつけてみました。
まず、ファイル名bbs02.cgiを作成し、下のソースを貼り付けてパーミションを755にします。 同じ階層に空のファイルlog.datを作成してパーミションを666にします。サンプル
ソース bbs02.cgi
#!/usr/bin/perl
#このスクリプトの場所
$this = "./bbs02.cgi";
#ログファイルの場所
$logfile = "./log.dat";
&decode;
if ($mode eq 'regist'){ ®ist; }
elsif ($mode eq 'delete'){ &delete; }
&html;
#HTMLの表示
sub html{
print <<"HTML";
Content-type: text/html
<html><head><title>一言メッセージ</title></head>
<body>
<h3>一言メッセージを書いてください。</h3>
<form method="POST" action="$this">
<input type=hidden name=mode value="regist">
入力 =>
<input type=text name="comment">
<input type="submit" value="送信"></form>
HTML
#コメント部分の表示
open(IN,"$logfile");
@log = <IN>;
close(IN);
foreach $in (@log){
($num,$comment) = split(/ /,$in);
print "$num> $comment<br>";
}
print <<"END";
<form method="POST" action="$this">
<input type=hidden name=mode value=delete>
削除番号<input type=text name=no size=4>
<input type=submit value=削除></form>
</body></html>
END
exit;
}
sub decode{
$method = $ENV{ 'REQUEST_METHOD' };
if( $method eq 'GET' ) {
$input = $ENV{ 'QUERY_STRING' };
}
else {
read( STDIN,$input,$ENV{ 'CONTENT_LENGTH' } );
}
@in = split(/&/,$input);
foreach $_ (@in) {
($list, $value) = split(/=/,$_);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$form{$list} = $value;
}
$mode = $form{'mode'};
$comment = $form{'comment'};
$no = $form{'no'};
}
sub regist{
open(IN,"$logfile");
@log = <IN>;
$no = $log[0] + 1 ;
$newdata = "$no $comment\n";
close(IN);
open(OUT,">$logfile");
unshift (@log,"$newdata");
#ログ保存数を設定($# は変数のインデックスの最大値を求める記述)
$data_max = 10;
if ($#log > ($data_max -1)){ $#log = $data_max -1;}
print OUT @log;
close(OUT);
}
sub delete{
open(IN,"$logfile");
foreach (<IN>) {
($no,$comment) = split(/ /);
#削除ナンバーでなければ、保存
if (!($form{'no'} == $no)){ push(@log,$_); }
}
close(IN);
open(OUT,">$logfile");
print OUT @log;
close(OUT);
}
|
