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

                                   
Sunday, 07-Jan-2001 01:22:19 JST に更新

 

 10.簡易掲示板

 ホームページに欠かせないのが掲示板です。良寛の掲示板のように、ほとんど

 書き込みがなく寂しい掲示板もありますが、わいわいがやがやと羨ましいぐら

 い賑やかな掲示板もあるようです。



 その掲示板もフリーで使えるのもあれば、有料もあります。できるなら、フリ

 ーにしたいのが人情ですが、コマーシャルが入ったり混雑する時間帯ではレス

 ポンスが鈍くなったりします。

 そこで、今回は掲示板を作ってみることにしました。普通に出回っている掲示

 板ほどの機能はないけれども、何とか動くという意味で「簡易掲示板」としま

 した。



 まずは、完成品をご覧ください。そして、何でも書き込んでみてください。


   
良寛の掲示板


 

 フォームメールは、フォーム部分はHTMLで作り、フォームからの受信デー

 タ解読とメール送信部分はPerlで作っていましたが、このプログラムはす

 べてPerlで作成しています。

 しかし、投稿フォーム部分はprint文でHTML出力させているだけなので、

 それが表示されたときのソースを見た方が分かり易いと思います。

  • フォーム部分  

 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

 

良寛の掲示板


[トップにもどる]

お名前
Eメール
タイトル
URL
メッセージ

・ お名前とメッセージ欄は必須です。
・ 記事は最大20件まです。古い記事から削除されます。

 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−



 このフォーム部分のソースは次のようになっています。なお、説明のために、

 部分的に調整してあります。スペースや改行はブラウザで表示させながら適宜

 変えてください。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.cgi755

   jcode.txt  → jcode.pl644)※Kazumasa Utashiroさん開発

   bbs.dat(666) 中身が空のファイル(メモ帳などで作成)

   sys.dat(666)     〃    (    〃   )

 必ずテキストモード(アスキーモード)でアップロードしてください。



  動かないときは、サポート掲示板へどうぞ。


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

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