[もくじへ|トップページへ|前ページへ|次ページへ]
に更新
10.簡易掲示板
ホームページに欠かせないのが掲示板です。良寛の掲示板のように、ほとんど
書き込みがなく寂しい掲示板もありますが、わいわいがやがやと羨ましいぐら
い賑やかな掲示板もあるようです。
その掲示板もフリーで使えるのもあれば、有料もあります。できるなら、フリ
ーにしたいのが人情ですが、コマーシャルが入ったり混雑する時間帯ではレス
ポンスが鈍くなったりします。
そこで、今回は掲示板を作ってみることにしました。普通に出回っている掲示
板ほどの機能はないけれども、何とか動くという意味で「簡易掲示板」としま
した。
まずは、完成品をご覧ください。そして、何でも書き込んでみてください。
良寛の掲示板
フォームメールは、フォーム部分はHTMLで作り、フォームからの受信デー
タ解読とメール送信部分はPerlで作っていましたが、このプログラムはす
べてPerlで作成しています。
しかし、投稿フォーム部分はprint文でHTML出力させているだけなので、
それが表示されたときのソースを見た方が分かり易いと思います。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このフォーム部分のソースは次のようになっています。なお、説明のために、
部分的に調整してあります。スペースや改行はブラウザで表示させながら適宜
変えてください。MS−IE付属のFrontPage
Expressなどを使うと簡単に作
成できます。
<p align=center>
<font color="#008080" size=6 face="MS
ゴシック">
<b>良寛の掲示板</b></font></p>
<hr>
<p align=right>
[<a
href="http://www.minc.ne.jp/~ryokan">トップにもどる</a>]</p>
<form action="bbs.cgi" method=POST>
<blockquote>
<table border=0>
<tr><td><b>お名前</b></td>
<td><input type=text size=20
name="name"></td></tr>
<tr>
<td><b>Eメール</b></td>
<td><input type=text size=20
name="mail"></td></tr>
<tr><td><b>タイトル</b></td>
<td><input type=text size=30
name="title"></td></tr>
<tr><td><b>URL</b></td>
<td><input type=text size=45
name="url"
value="http://"></td>
</tr>
<tr><td colspan=2><b>メッセージ</b><br>
<textarea name="message" rows=7
cols=55></textarea><br>
<input type=submit name="submit" value="投稿する">
<input type=reset value="リセット">
</form>
<p><font size=2>・
お名前とメッセージ欄は必須です。<br>
・ 記事は最大20件まです。古い記事から削除されます。<br>
</font></p>
</td></tr>
</table></blockquote>
<hr>
赤字の部分は、プログラムの中にスペルミスのないように記述しなければなり
ません。
このフォームにデータを入力後「投稿する」ボタンを押すと、データはURL
エンコードされ、form
action=・・・で指定されたCGIプログラムに渡され
ます。
フォームメールの場合と同じですね。このHTMLをprint文で出力させると、
掲示板の入力フォームになります。そして、このフォームの下に過去の投稿記
事を出力するのです。
次のようなプログラム(bbs.cgi)を作成しました。コメントを入れてあります
ので、スクロールボタンを操作しながら解読してください。
プログラムの流れは、概略次のようになります。
メイン
------------------------------------------------------------
開始
掲示板のリンク部分をクリックすると、このプログラムが実行
されます。先頭行にはPerlへのパスを書きます。
先頭行の「#」はコメントにはなりません。
------------------------------------------------------------
↓
------------------------------------------------------------
日本語コード変換プログラム(jcode.pl)を取り込む
------------------------------------------------------------
↓
------------------------------------------------------------
変数の初期設定
------------------------------------------------------------
↓
------------------------------------------------------------
フォームデータの受信
フォームからのデータの送信方法は、POSTとGETの2通りが
あります。受信方法がそれぞれ異なるので、ここで選択します。
本プログラムは、POSTで送信されるようになっていますが、掲
示板が表示された初期段階(投稿するボタンが押される前)で
は、GETが選択されています。
------------------------------------------------------------
↓
------------------------------------------------------------
受信データの編集
受信されたデータはURLエンコードされていますので、この
ままでは読めません。そこで、まずデコード(解読)します。
また、タグを使えないようにするために、表示用の文字に変換
します。
タグを使えないようにするのは、いたずらを防止するためです。
ちょっと工夫すれば、完全にタグを禁止するのではなく指定し
たタグだけを使えないようにすることもできるはずです。
------------------------------------------------------------
↓
------------------------------------------------------------
処理の振り分け
フォームの「投稿するボタン」が押されたとき、
&error_check(入力データのチェック)、
&store(書き込み)
&disp(掲示板の表示)
のサブルーチンを実行します。
そうでないとき、つまりこの掲示板が始めて表示されたとき、
&disp(掲示板の表示)
のサブルーチンを実行します。
------------------------------------------------------------
↓
------------------------------------------------------------
終了(exit;)
------------------------------------------------------------
サブルーチン
&error_check
------------------------------------------------------------
入力データのエラー検出
ここは、もっと強力にしなければいけませんが、説明を簡単に
するために、空白のチェックのみ行っています。この他には、
例えば、メールアドレスが半角になっているか、「@」が入って
いるかなどのチェックが考えられます。
------------------------------------------------------------
サブルーチン
&store
------------------------------------------------------------
送信時刻の取得(5.日付・時刻で説明済み)
------------------------------------------------------------
↓
------------------------------------------------------------
$dataに名前、メールアドレス、タイトル、URL、メッセー
ジ、日付の順にセパレータ「|||」をはさみながら、代入
セパレータは恐らく使われないであろう文字列にします。この
ようにしても、偶然に「|||」が使われた場合には、うまく表
示されません。その場合の処置を考えておくと万全でしょう。
$data .= "$date" は $data =
$data + "$date" と書いても同
じです。
------------------------------------------------------------
↓
------------------------------------------------------------
現在記録されているログ数の読み込み
プログラムが最初呼ばれたときに、$nにはログ数が代入される
のですが、投稿記事を閲覧したりメッセージを書き込んでいる
間、プログラムの実行は終了しているので、変数はクリアされ
ています。それで、再度ログ数を読み込む必要があるのです。
------------------------------------------------------------
↓
------------------------------------------------------------
制限数をオーバーした過去ログを削除
ここは、少し工夫しています。ソースのコメントをご覧くださ
い。
------------------------------------------------------------
↓
------------------------------------------------------------
新着記事の追加保存
------------------------------------------------------------
サブルーチン
&disp
------------------------------------------------------------
入力フォームの表示
------------------------------------------------------------
↓
------------------------------------------------------------
過去ログの読み込み
------------------------------------------------------------
↓
------------------------------------------------------------
過去ログ件数の保存($sys_dataファイルへ)
------------------------------------------------------------
↓
------------------------------------------------------------
読み込んだデータを逆順(新しい順)に並べ替え
------------------------------------------------------------
↓
------------------------------------------------------------
各レコードごとにセパレータ「|||」で分離し、表示
------------------------------------------------------------
プログラムを自分でカスタマイズして使う場合は、次をクリックして表示させ
bbs.txtはbbs.cgi、jcode.txtはjcode.plという名前で保存してください。
bbs.txt → bbs.cgi(755)
jcode.txt → jcode.pl(644)※Kazumasa
Utashiroさん開発
bbs.dat(666) 中身が空のファイル(メモ帳などで作成)
sys.dat(666) 〃 ( 〃 )
必ずテキストモード(アスキーモード)でアップロードしてください。
動かないときは、サポート掲示板へどうぞ。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
[もくじへ|トップページへ|前ページへ|次ページへ]
|