Perlによる掲示板の作り方
書き込み処理
フローチャート(新しいウィンドウで開きます)
この図を見ながら読むと、多少はわかりやすいかと思います。
エラーチェック
ここでは投稿されたデータをLogファイルに書きこむという処理をします。
まず最初に、投稿されたデータに記入漏れが無いかチェックします。
具体的には、ここでもifを使ってデータが空っぽか何か入っているか調べます。
なにも入っていない場合は、@msgにエラーメッセージを入れて次へ進みます。
最後に@msgになにか入っていれば、エラーがあったとなるので後述のエラー処理を呼び出します。
その前に、プログラムは役割ごとにサブルーチン化したほうが解りやすいのでこの書き込み処理もサブルーチンにしてしまいましょう
# エラーチェック
if ($FORM{'text'} eq "") { push(@msg,"本文が入力されていません"); }
if ($FORM{'name'} eq "") { push(@msg,"名前が入力されていません"); }
if (@msg > 0) { &error; }
}
このプログラムで$FORM{'text'}というのは、送信されてきた本文データの事で「text」の部分は自分で決めた変数の名前です。
nameというのは名前の事で、「name」の部分も同じように自分で決めた変数の名前です
pushという命令は、配列の最後に要素を追加する命令です。
データの追加
データを追加するために発言者の名前、メールアドレスホームページアドレス、本文などを一纏まりのデータにします。
このデータは改行コードまでが一つの纏まりで、データの境目には「<>」を置く事とします。
つまり
name<>mail<>home<>text<>\n
というようなデータ構成になります。
この「<>」という物は何でも良いのですが、後でデータを分割する時に境目以外にここで設定した記号が来るとうまく作動しなくなるので気をつけてください。
例えば、本文中に「(^<>^)」などと書かれていた場合、<>のところでデータが分割されてしまい、うまく表示できないようになってしまいます。
今回はデコードのところで「<」や「>」は変換されているので上の例では「(^<>^)」というようになっているので大丈夫です。
プログラム上では
そして、Logファイルと呼ばれる今までの発言を記録してあるファイルを開いて、先ほどの$dataを追加します。
最後にファイルを閉じて終了です。
push(@msg,"ファイルの書き込みができませんでした。");
&error;
}
print ADDDATA "$data\n";
close(ADDDATA);
最初のIf文はLogファイルが開けなかった場合に、エラー処理を呼び出すという効果で使っています。
ここで、「$file」というのは最初の方で指定しておいたLogファイルの名前です。
openのところに書いてある「ADDDATA」はファイルハンドルと呼ばれるもので、これ以降のファイルの操作の名前として使います。
名前は適当にわかりやすいものをつけてください。
「$file」の前にある>> は、ファイルの最後に追加するモードで開きますということです。
>だけだと上書きモード、何も書かないと読み込みモードでファイルを開きます。
これらデータ追加部分をまとめて書くと、
if ($FORM{'name'} eq "") { push(@msg,"名前が入力されていません"); }
if (@msg > 0) { &error; }
$data="$FORM{'name'}<>$FORM{'mail'}<>$FORM{'url'}<>$FORM{'text'}<>\n";
if (!open(ADDDATA, ">> $file")) {
push(@msg,"ファイルの書き込みができませんでした。");
&error;
}
print ADDDATA "$data";
close(ADDDATA);