◆最大保持数を設定できるようにしよう!
作った掲示板は本当に簡易ですので、これから最低限必要な機能を付け加えていきましょう!!その中で、改造・拡張能力を高めていければ?と思います。まず一番最初に考えたいのが、保存記事数を決めることでしょう。永遠にログが増えていくのでは困りますからね(^-^;;;◆最大保持数管理ルーチン(プログラム)
では、実際に考えてみましょう!今回ご紹介した簡易掲示板のログは、一行に一記事の投稿データを<>で分割して記録しています。これらを分割やくっつけてデータを活用しているのです。ですから単純にいくつの配列が存在するのかは、
open(IN,"$file") || &error("Can't open $file");
@lines = <IN>;
close(IN);
$logcount = @lines;
@lines = <IN>;
close(IN);
$logcount = @lines;
と言うように記述すると、$logcountに配列の数が代入されて、結果として記事数が幾つ存在するのかが容易に得ることが出来ます。どこのタイミングで保持数を管理するか?と言う問題だと思います。この簡易掲示板でそのタイミングは下記のとおりになります。
- 表示処理をする時
- 書込み処理をする時
例として書込み処理の時にさせる場合
#書込み処理プログラム
sub write {
#フォームの入力状況確認
if ($FORM{'name'} eq '') { &error("お名前が入力されていません。"); }
if ($FORM{'msr'} eq '') { &error("メッセージが入力されていません。"); }
#ファイルのオープン 予め$fileにログファイル名が代入されている物とします。
open(IN,"$file") || &error("Can't open $file");
open(OUT,">$temp") || &error("Can't write Temp File");
#ログファイルを配列@linesに代入
@lines = <IN>;
#現在のログ数を取得
$logcount = @lines;
#ログの逆順処理
@lines = reverse(@lines);
#2重書込み禁止ルーチン
foreach $line (@lines) {
&jcode'convert(*line,'sjis');
local($s1,$s2,$s3,$s4) = split(/<>/,$line);
if (($s1 eq $FORM{'name'}) && ($s4 eq $FORM{'msr'})){
&error("二重書き込みは禁止です!!");
}
}
#書き込むデータの順番を決定
$newrecode
="$FORM{'name'}<>$FORM{'email'}<>$FORM{'url'}<>$FORM{'msr'}<>\n";
#配列@linesにデータをPUSH
push (@lines,$newrecode);
#ログの逆順処理
@lines = reverse(@lines);
#ログ数の判定
$max = $max-1;
if ($logcount > $max) {
pop @lines;
}
#ログの書込処理
print OUT @lines;
close(OUT);
close(IN);
rename($temp,$file) || &error("Rename Error");
chmod (0666,$file);
if (-e $temp) { unlink($temp); }
}
sub write {
#フォームの入力状況確認
if ($FORM{'name'} eq '') { &error("お名前が入力されていません。"); }
if ($FORM{'msr'} eq '') { &error("メッセージが入力されていません。"); }
#ファイルのオープン 予め$fileにログファイル名が代入されている物とします。
open(IN,"$file") || &error("Can't open $file");
open(OUT,">$temp") || &error("Can't write Temp File");
#ログファイルを配列@linesに代入
@lines = <IN>;
#現在のログ数を取得
$logcount = @lines;
#ログの逆順処理
@lines = reverse(@lines);
#2重書込み禁止ルーチン
foreach $line (@lines) {
&jcode'convert(*line,'sjis');
local($s1,$s2,$s3,$s4) = split(/<>/,$line);
if (($s1 eq $FORM{'name'}) && ($s4 eq $FORM{'msr'})){
&error("二重書き込みは禁止です!!");
}
}
#書き込むデータの順番を決定
$newrecode
="$FORM{'name'}<>$FORM{'email'}<>$FORM{'url'}<>$FORM{'msr'}<>\n";
#配列@linesにデータをPUSH
push (@lines,$newrecode);
#ログの逆順処理
@lines = reverse(@lines);
#ログ数の判定
$max = $max-1;
if ($logcount > $max) {
pop @lines;
}
#ログの書込処理
print OUT @lines;
close(OUT);
close(IN);
rename($temp,$file) || &error("Rename Error");
chmod (0666,$file);
if (-e $temp) { unlink($temp); }
}
[sample2]
□特別編 一緒に簡易掲示板を作ってみよう
第八章 STEP1 作ってみよう | |
・デザイン | まず何が必要になるのか? |
・フローチャート作成 | 掲示板ってどんな処理をさせているの? |
・パーツの記述 | 各パーツごとに実際に記述してみよう |
・最終組み立て | パーツを一つにまとめて完成だ! |
第八章 STEP2 いじくってみよう | |
・最大保持数<< | 最大保持数を設定できるようにしよう! |
・メールとURL | 状況によって表示を変えよう |
・タグの使用禁止 | 荒し対策を考えて |
第九章 STEP3 拡張機能を考える | |
・記事削除 | 記事を削除、ログを削除すると言うことは? |
・ページ機能 | ページ処理の考え方 |
・検索 | 検索させる方法について |
・レス | レス機能ってどんな処理? |
・クッキーの利用 | クッキーの利用方法についての説明 |