#!/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";
# ロックファイル(お約束)
&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);
}