#!/usr/local/perl require './pl_kyo.pl'; # 定義ファイル取り込み $mycgi = 'sample.cgi'; # このCGIの名前 $datafile = 'logfile.dat'; # ファイルは上で定義する方が良い $maxdata = 20; # 最大表示件数 use CGI $form=CGI->new(); print("Content-type: text/html\n\n"); # メッセージが書き込みされた場合は「add_massage」に「1」が入っている if($form->param('add_massage') eq "1"){ &data_write; } &main; # 最後はメイン処理へ #=============================# # メイン処理(必須処理) # #=============================# sub main{ # HTML文開始(ヘッダー) print "\n"; print "\n"; print "\n"; print "BBS ver1.0\n"; print "\n"; print "\n"; print "

BBS ver1.0

\n"; print "
\n"; # ここに追加(書き込みを意味するタグ) print "\n"; print "名前
"; print "\n"; print "
Eメール
\n"; print "\n"; print "
メッセージ
"; print "
"; print "
URL\n"; print "

\n"; print "

\n"; print "
\n"; print "
\n"; # ロックファイル(お約束) &lock(2); # ファイルがあるか確認する if(-e $datafile){ if(!open(IN,"$datafile")){ &error( "ファイルがオープン出来ません" ); } # ファイルのデータをリストに保存 @lines=; close(IN); } # ロック解除(お約束) &lock(8); local($flag) = 0; # 表示カウント変数 foreach $line (@lines){ local($no, $name, $email, $message, $url, $date) = split(/<>/,$line); # 登録データの表示 print "[$no]\n"; print "$name $date\n"; # URL は必ず記入されているとは限らない if($url ne ""){ print "ホームページ"; } print "
$message
\n"; print "
\n"; # 最大件数表示で終了 last if(++$flag >= $maxdata); } # HTML文終了(フッダー) print "\n"; print "\n"; } #=====================# # 書き込み処理 # #=====================# sub data_write{ # 送られたパラメータを指定の変数に代入 # $FORM{} に意味は無いが、サンプルで多いので慣れの為 $FORM{'name'} = $form->param("name"); $FORM{'email'} = $form->param("email"); $FORM{'message'} = $form->param("message"); $FORM{'url'} = $form->param("url"); # 書き込みエラーをチェックする if($FORM{'name'} eq ""){ &error("名前が入力されていません。"); } if($FORM{'email'} eq ""){ &error("メールアドレスが入力されていません。"); } # Eメールアドレスチェッカー if($FORM{'email'} !~ /(.*)\@(.*)\.(.*)/) { &error("メールアドレスの入力内容が不正です"); } if($FORM{'message'} eq ""){ &error("メッセージが入力されていません。"); } # 今日の日付を取得 ($sec, $min, $hour, $mday, $mon, $year, $wday)=localtime(); $mon++; $year = $year + 1900; $FORM{'today'} = "$year年$mon月$mday日"; # ロックファイル(お約束) &lock(2); # ファイルがあるか確認する if(-e $datafile){ if(!open(IN,"$datafile")){ &error( "ファイルがオープン出来ません" ); } # ファイルのデータをリストに保存 @lines=; close(IN); } # ロック解除(お約束) &lock(8); # 2重投稿を禁止する(若干良い方法では無い) local($no, $name, $email, $message, $url, $date) = split(/<>/,$lines[0]); # 名前と内容が同じであれば2重投稿 if($FORM{'name'} ne $name || $FORM{'message'} ne $message){ local($end_size) = @lines + 1; # ファイルの保存件数 local($input) = "$end_size<>$FORM{'name'}<>$FORM{'email'}<>$FORM{'message'}<>$FORM{'url'}<>$FORM{'today'}<>\n"; push(@new, $input); # 登録 }else{ &error("2重投稿は禁止です"); } local($flag) = 0; # 表示カウント変数 # ファイルの最後までループ foreach $line (@lines){ push(@new, $line); # 最大件数表示で終了 last if(++$flag >= $maxdata); } &lock(2); # ファイルの書き込み if(!open(OUT,">$datafile")){ &lock(8); &error( "ファイルがオープン出来ません" ); } print OUT @new; close(OUT); &lock(8); }