;
close (IN);
print "Content-type: text/html\n\n";
print "$main_title\n";
print "$body\n";
print "\n";
print "$main_title\n";
print "
\n";
print "$mes_top1\n";
print "$mes_top2\n";
print "$mes_top3\n";
print "\n";
print "\n";
print "\n" ;
}
# メイン画面表示。
sub out_main
{
&load_file ;
print "Content-type: text/html\n\n";
print "
$main_title\n";
print "$body\n";
print "\n";
print "$main_title
\n";
print "$FORM{'sel_theme'}\n";
print "
\n";
print "$mes_top1\n";
print "$mes_top2\n";
print "$mes_top3\n";
print "\n";
print "
\n";
print "\n" ;
# --- データ表示 ------------------------------------#
if ($FORM{'line_num'} eq '')
{
$line_num = 0;
}
else
{
$line_num = $FORM{'line_num'};
}
if ($FORM{'page'} eq '')
{
$page = 0;
}
else
{
$page = $FORM{'page'};
}
$line_now = 0;
while ($line_now <= $def-1 && $line_num <= $#LINES)
{
($out_date_num,$out_theme,$out_date_now,$out_name,$out_email,$out_title,$out_comment,$out_host,$out_browser) = split(/,/, $LINES[$line_num]);
$line_num ++ ;
if ($out_theme eq $FORM{'sel_theme'})
{
&out_onedata ;
$line_now++ ;
}
}
print "\n" ;
# --- 改ページ処理 ------------------------------------#
$i = $page * $def + 1 ;
$j = ($page + 1) * $def ;
$page++ ;
print "
\n\n";
}
# 全項目表示
sub out_alldata
{
&load_file ;
print "Content-type: text/html\n\n";
print "
$main_title\n";
print "$body\n";
print "\n";
print "$main_title
\n";
print "$FORM{'sel_theme'}\n";
print "
\n";
print "$mes_top1\n";
print "$mes_top2\n";
print "$mes_top3\n";
print "\n";
print "\n";
print "全項目は閲覧のみです。\n";
print "
\n";
print "\n" ;
# --- データ表示 ------------------------------------#
if ($FORM{'page'} eq '')
{
$page = 0;
}
else
{
$page = $FORM{'page'};
}
$page_end = $page + $def - 1;
if ($page_end > $#LINES)
{
$page_end = $#LINES;
}
foreach ($page .. $page_end)
{
($out_date_num,$out_theme,$out_date_now,$out_name,$out_email,$out_title,$out_comment,$out_host,$out_browser) = split(/,/, $LINES[$_]);
&out_onedata ;
}
print "\n" ;
# --- 改ページ処理 ------------------------------------#
$page_next = $page_end + 1;
$i = $page + 1;
$j = $page_end + 1;
print "
\n\n";
}
# 一つの書込み単体を表示。
sub out_onedata
{
# 内容の中の自動リンク
$out_comment =~ s/(https?|ftp|gopher|telnet|whois|news):\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/$1:\/\/$2<\/a>/g;
$out_comment =~ s/([\w|\!\#\$\%\'\=\-\^\`\\\|\~\[\{\]\}\+\*\.\?\/]+)\@([\w|\!\#\$\%\'\(\)\=\-\^\`\\\|\~\[\{\]\}\+\*\.\?\/]+)/$1\@$2<\/a>/g;
print "
\n";
print "$out_title" ;
# メールアドレスが記録されているデータにはリンクを付けて表示
if ($out_email ne '')
{
print " お名前:$out_name ■MAIL";
}
else
{
print " お名前:$out_name";
}
print " 投稿日:$out_date_now";
print "$out_theme> \n" ;
print " |
\n";
print "$out_comment\n";
# ホスト・ブラウザ情報を表示しない場合はこの一行を消去
print "$out_host($out_browser)
\n" ;
print "
\n";
}
# フッターを表示。
sub out_fetter
{
print "\n";
print "\n
\n";
print "終了\n";
print "\n";
if ($admin_url ne '')
{
print "
管理モード\n";
print "
\n";
}
# このスクリプトの著作権表示(かならず表示してください)
print "$CGI_VER\n";
print "
\n";
print "\n";
}
# /////////////////////////////////////////////////////////////////////////////// #
# エラーチェック
# /////////////////////////////////////////////////////////////////////////////// #
sub error_ck
{
# 空白チェック
if ($FORM{'title'} eq "")
{
push(@ERROR,"●タイトル");
}
if ($FORM{'comment'} eq "")
{
push(@ERROR,"●内容") ;
}
if ($FORM{'name'} eq "")
{
push(@ERROR,"●名前");
}
if (@ERROR)
{
push(@ERROR,"が入力されてません。");
&error('空白エラー',@ERROR);
}
# メールアドレス形式チェック
if ($FORM{'emai'} ne "" && !($FORM{'email'} =~ /(.*)\@(.*)\.(.*)/))
{
&error('メールアドレスエラー',"メールアドレスが正しく記入されていません。");
}
($out_date_num,$out_theme,$out_date_now,$out_name,$out_email,$out_title,$out_comment,$out_host) = split(/,/, $LINES[0]);
if ($FORM{'name'} eq $out_name && $FORM{'title'} eq $out_title && $FORM{'comment'} eq $out_comment)
{
&error('same_write');
}
}
# /////////////////////////////////////////////////////////////////////////////// #
# 書込み処理
# /////////////////////////////////////////////////////////////////////////////// #
sub register
{
$new_line = "$date_num,$FORM{'sel_theme'},$date_now,$FORM{'name'},$FORM{'email'},$FORM{'title'},$FORM{'comment'},$host,$browser\n";
unshift(@LINES,$new_line);
# 辞書ファイルに書きこみ(ロック処理あり)
$tmp_dummy = "$$\.tmp";
open(TMP,">$tmp_dummy") || die "Can't create tmp file.\n";
close(TMP);
chmod 0666,$tmp_dummy;
open(TMP,">$tmp_dummy") || die "Can't open tmp file.\n";
print TMP (@LINES);
close(TMP);
rename($tmp_dummy,$data_file);
}
# /////////////////////////////////////////////////////////////////////////////// #
# エラー処理
# /////////////////////////////////////////////////////////////////////////////// #
sub error
{
($error,@error_fields) = @_;
# 同一内容の連続書込みの場合はリロードとして扱う
if ($error eq 'same_write')
{
&out_main ;
&out_fetter ;
exit;
}
print "Content-type: text/html\n\n";
print "$title\n";
print "$body\n";
print "$error
\n";
print "@error_fields
\n";
print "ブラウザの[戻る]ボタンを押して前の画面に移動してください.\n";
print "\n";
exit;
}