掲示板
<form action=bbs.cgi method=POST> <input type=hidden name=page value=10> <input type=submit value="前のページ"> </form>cgiを再起動すると、前に呼び出したときの値は利用できません。hidden(隠し)タイプのinputフォームは、異なるcgiで変数の値を共有するときのみ利用できます。
#設定ファイルで初期設定する
&set_file();
#FORM の解析
&decode();
if ($mode eq 'regist') { ®ist; }
if ($mode eq 'usrdel') { &usrdel; }
if ($mode eq 'update') { &usrdel;®ist; }
#掲示板のページを生成
&html();
ページの先頭に、「投稿」、「管理用」のフォームがあり、このボタンを押すと、bbsform.cgi、または、bbdmng.cgi のスクリプトに接続します。また、表示の最後に、必要に応じて、「次」または「前」のページを表示するボタンをフォームタグで生成します。このボタンを押すと、現在の記事番号を 隠しフォーム page に設定して、同じ bbs.cgi を呼び直します。#FORM処理
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# S-JISコード変換
&jcode'convert(*value,'sjis');
# タグ処理
if ($tagkey) { $value =~ s/<>/<>/g; }
else {
$value =~ s/&/&/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
}
# 改行処理
if ($name eq "comment") {
$value =~ s/\r\n/<br>/g;
$value =~ s/\r/<br>/g;
$value =~ s/\n/<br>/g;
} else {
$value =~ s/\r//g;
$value =~ s/\n//g;
}

sub usrdel {
#print "****usedel*****\n";
open(IN,"$logfile") || &error("Open Error : $logfile");
@lines = <IN>;
close(IN);
$flag=0;
@new=();
foreach (@lines) {
($no,$date,$name,$mail,$sub,$com,$url,$host,$pw) = split(/<>/);
if ($in{'no'} eq "$no") { $flag=1; $PWD=$pw; }
else { push(@new,$_); }
}
if ($flag == 0) { &error("該当記事が見当たりません"); }
# 削除キーを照合
if ($in{'pwd'} ne "$PWD") { &error("パスワードが違います"); }
# ログを更新
open(OUT,">$logfile") || &error("Write Error : $logfile");
print OUT @new;
close(OUT);
}
sub regist {
#print "*****redist******\n";
if ($in{'name'} eq "" || $in{'comment'} eq "" ) { &error("名前または記事が入力されていません"); }
if ($in{'pwd'} eq "") { &error("パスワードが入力されていません"); }
open(IN,"$logfile") || &error("Open Error : $logfile");
@lines = <IN>;
close(IN);
($tno,$tdate,$tname,$tmail,$tsub,$tcom) = split(/<>/, $lines[0]);
if ($in{'name'} eq "$tname" && $in{'comment'} eq "$tcom") {
&error("同じ記事です");
}
#投稿サイトのIPを取得する
&get_host();
# 記事番号を増加
$no = $tno + 1;
# 削除キーを設定
if ($in{'pwd'} ne "") { $PW = $in{'pwd'}; }
# 最大記事数以上なら最後の記事を削除後、記事を追加
while ($max <= @lines) { pop(@lines); }
unshift(@lines,"$no<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'comment'}<>$in{'url'}<>$host<>$PW<>\n");
#記事配列をファイルに書き出す
open(OUT,">$logfile") || &error("Write Error : $logfile");
print OUT @lines;
close(OUT);
#利用者情報をクッキーに記録する
&set_cookie();
}

