2.7. 1行掲示板完成!


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

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

今回は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のフッダなどです。


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

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


今回始めて使った命令など

| | メニュー戻る | |

LinkExchange Japan
LinkExchange Japan Member