赤字が補足説明です。
−−−−−−−−−ここから説明−−−−−−−−−−−−
●パールディレクトリの指定
#!/usr/bin/perl
# シンプル掲示板 Ver0.8
# 2002.11.16
●ライブラリのフォルダの指定
require './lib/cgi-lib.pl';
●フォームデータの受け取り
&ReadParse(*in);
●フォームデータの変換
if (&MethPost()) {
foreach $x (%in) {
$value = $in{$x};
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
$value =~ s/&/&/g;
$value =~ s/"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$in{$x} = $value;
}
}
●フォームデータ変数代入
$name = $in{'name'};
$mail = $in{'mail'};
●次のページ数の受け取りとデータがない場合の処理
$next_p = $in{'next_p'};
if ($next_p eq "") { $next_p = 1;}
$message = $in{'message'};
$message =~ s/[\n]/<BR>/g;
●データの読み込みと投稿データの書き込み
if ($name ne "" && $message ne "")
{
●日付と時間の取得
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday,
$isdst) = localtime(time);
@dayname = ('日', '月', '火', '水', '木', '金', '土');
$month = $mon+1;
$date = "$month月$mday日(@dayname[$wday])$hour:$min:$sec";
$tmp = "$name, $mail, $date, $message\n";
●書き込みデータの読み込み
open(FILE, "bbs1.dat");
@allbody = <FILE>;
close(FILE);
●書き込みデータの追加
$num = unshift (@allbody, $tmp);
●書き込みデータの保存
open(FILE, ">bbs1.dat");
print FILE @allbody;
close(FILE);
}
●終了処理サブルーチン
sub syuryou
{
print "</div>\n";
print "<br><div align=left>→<a href=\"../../main_top.htm\">■TOP■</a></div>\n";
print "</td></tr></TABLE></div>\n";
print "</body></html>\n";exit;
}
●書き込みデータのページ分割部分
●書き込みデータの読み込み
open(FILE, "bbs1.dat");
@allbody=<FILE>;
●書き込み投稿記事数取得
$num = unshift (@allbody);
●ページ分割したときの最大ページを求める
$last_page = sprintf "%.0f",((($num - 1) / 10)
+ 0.5);
●ページをリンクから開いたときの処理
●$last_pageが0であったときの処理
if ($last_page == 0 ) {
$last_page = 1;
}
●表示ページ最初に表示される書き込み記事の番号取得
$fast_toukou = ((10 * $next_p) - 10);
●次のページと最後のページが1であった時の処理
if ($next_p and $last_page == 1) {
$last_toukou = $num - 1;
} else {
●次のページと最後のページが同じであった時の処理
if ($next_p == $last_page) {
$last_toukou = $fast_toukou + (( $num - 1) - $fast_toukou
);
} else {
●ページ分割したときに表示される最後の投稿記事番号取得
$last_toukou = ( 10 * $next_p ) - 1;
}
}
close(FILE);
●表示ページの書き込み記事の分割
@damybody = @allbody[$fast_toukou..$last_toukou];
●画面の表示
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>掲示板1</TITLE>\n";
print "<meta http-equiv=\"Content-Type\"
content=\"text/html\; charset=Shift_JIS\">\n";
print "<style type=\"text/css\">\n";
print "<!--\n";
print ".table_back { background: url(image/bbs_back.jpg)";
print " no-repeat fixed center 10px";
print "}\n";
print "-->\n";
print "</style>\n";
print "</HEAD>\n";
print "<BODY class=table_back text=#000000 bgcolor=#ffffff
link=#000000 vlink=#666666 alink=#666666>\n";
●ここが一番大外テーブル
print "<div align=center><TABLE width=550
height=480><tr><td valign=top>\n";
●テーブル内全体のフォント設定
print "<span style=font-size:12px>\n";
print "<div align=center>掲示板</div>\n<hr
noshade color=#cccccc>\n";
print "<FORM method=POST action=\"bbs1.cgi\">\n";
print "<div>NAME:<input style=\"border:1px
#cccccc solid\" type=text name=name size=27 value=\"$name\">";
print "<br>","E-MAIL:<input style=\"border:1px
#cccccc solid\" type=text name=mail size=32 value=\"$mail\"></div><br>";
print "<div>Message:<br>";
print "<textarea name=message style=\"border:1px
#cccccc solid\" cols=50 rows=5></textarea></div>";
print "<input type=submit value=\"投稿\">";
print "</form>\n";
print "<hr noshade color=#cccccc><br><br>\n";
# open(FILE, "bbs1.dat");
# @allbody=<FILE>;
●投稿記事数0の時の表示処理
if ($num == 0) {
print "<div>投稿はありません</div>";
syuryou;
}
●書き込み記事表示部分
foreach $line (@damybody){
($name, $mail, $date, $message)=split(/\,/,$line);
print "<div align=left><font size=-1>投稿者:</font>";
if($mail ne " "){
print "<A href=\"mailto:$mail\">$name</a>\n";
} else {
print "<font size=-1>$name</font>\n";
}
print "<font size=-1>"," ","$date</font>\n";
print "<hr noshade color=#cccccc width=80%>\n";
print "<div>$message</div>\n";
print "<br><br></div>\n";
}
# close(FILE);
●現在表示されているページ数の表示と最後のページの表示
print "<div>最後のページ:$last_page<br>";
print "現在のページ:$next_p<br></div>\n";
■■ページ移動のためのボタン表示部分
●次のページがない場合の処理
if ($next_p and $last_page == 1) {
print "<div>次のページはありません</div>\n";
syuryou;
}
●次のページが1だった場合の処理
if ($next_p == 1){
print "<FORM METHOD=$method action=\"$reload\">\n";
$next_p = $next_p + 1;
print "<input type=hidden name=\"next_p\"
value=\"$next_p\">\n";
print "<INPUT type=submit value=\"次のページを見る\">
";
print "</FORM>\n";
} else {
●次のページと最後のページが同じだった場合の処理
if ($next_p == $last_page ){
print "<FORM METHOD=$method action=\"$reload\">\n";
$next_p = $next_p - 1;
print "<input type=hidden name=\"next_p\"
value=\"$next_p\">\n";
print "<INPUT type=submit value=\"前のページを見る\">
";
print "</FORM>\n";
} else {
●ページ数が中間だった時の処理
print "<FORM METHOD=$method action=\"$reload\">\n";
$go_page = $next_p - 1;
print "<input type=hidden name=\"next_p\"
value=\"$go_page\">\n";
print "<INPUT type=submit value=\"前のページを見る\">
";
print "</FORM>\n";
print "<FORM METHOD=$method action=\"$reload\">\n";
$back_page = $next_p + 1;
print "<input type=hidden name=\"next_p\"
value=\"$back_page\">\n";
print "<INPUT type=submit value=\"次のページを見る\">
";
print "</FORM>\n";
}
}
syuryou;
|