RubyCGI.org

RubyでCGIを作ろう


2章7節 1行掲示板完成! 更新日付: [2002-05-17]



今回は掲示板を完成させます。

今までやってきた事を総合すると掲示板ができます。
1.まず初期設定(ファイル名の設定、ログの長さの設定)を行う
2.フォームからのデータを読み込む
3.ログファイルを開く
4.書き込みがあれば書き込みを行う
5.HTMLの表示
という手順で行います。
それではプログラムを見てみましょう。

今回はプログラムが長くなったので注意しましょう。

-- プログラム 始まり -- bbs1.cgi

#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"
require "cgi-lib"
input = CGI.new

#初期設定
FILENAME = "bbs1.log"
MAXLOG = 10
log = []

#フォームからのデータ読みこみ
senddata = input["senddata"]

#ファイルの読み込み
c = 0
fh = open(FILENAME)
fh.each{|l|
log[c] = l
c += 1
if c >= MAXLOG
break
end
}
fh.close

#ファイルの書き込み
if senddata
log.unshift("#{senddata}\n")
c = 0
fh = open(FILENAME, "w")
log.each{|l|
fh.print l
c += 1
if c >= MAXLOG
break
end
}
fh.close
end

#HTML部分
print <<EOF;
<html>
<body>
<form method="POST">
<input type="text" name="senddata" size="80">
<input type="submit" value="送信">
</form>
<hr>
EOF

log.each{|l|
print "#{l}\n<hr>\n"
}

print <<EOF;
</body>
</html>
EOF

-- プログラム 終わり --


今回は説明しなければなら無いのは「#」です。これはコメントをするときに使う文字です。ある行でこの文字があると#からあとの文字はコメントとして判断しプログラムは無視します。

次はifです。このifの次に書いてある条件を満たした場合はその下に書いてある命令を行い、そうでなかったらelseを実行します(elseがなかったらなにもしない)。

あとはbreakです。この命令はeachなどのループの中から抜け出します。ここではファイルの読み込みと書き込みの際に、最大書き込み数を越してもそれ以上のループを行わないようにしています。

1〜4行はお決まりですね。7〜8行目は初期設定を行っています。11〜12行目はフォームからのデータの読み込みです。14〜24行目はログの読み込みです。26〜39行目はフォームからのデータがあればログの書き込みを行います。42〜50行目はHTMLのヘッダやフォーム部分です。52〜54行目はログの表示を行っています。56〜59行目はHTMLのフッダなどです。

どうでしょう。うまく掲示板は作動しましたか?とりあえずはこれで掲示板は完成です。


実はこのプログラムはバグを含んでいます。日本語の変換を行っていないので環境によっては文字化けします。フォームで送られてきた文字の中に改行が含まれていたりするとおかしな動作をします。あとは同時に書き込みが行われるとログが消えたりします。これに関しての処理は次章で説明します。



今回始めて使った命令など
コメント
if文
break文

RubyによるCGIプログラミング
RubyによるCGIプログラミング

<− 前へ : 2.6. ファイルの書き込み | 次へ : 3. 掲示板を作ります −>

RubyでCGIを作ろうトップ

| トップページ | 書籍「Ruby/GTKプログラミング入門」 | 書籍「RubyによるCGIプログラミング」 | RubyでCGIを作ろう | リンク集 | ツールなど | 自己紹介 |