掲示板
<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(); }