こんにちは。いつもお世話になっています、みかみと申します。

 オブジェクト指向プログラミングに少し慣れましたが、未だ初心者
です。今は、Ruby で掲示板を作っているのですが、再読み込み時に
問題が生じて困っています。どうぞよろしくお願いします。

 問題が起きるところを再現します。

  (1) テキスト入力フィールドに文を書いて、「submit」を押す
  (2) 掲示板に書き込まれて、テキスト入力フィールドは空欄になる
  (3) ブラウザの「再読み込み (更新, Reload)」を押す

  (4) w3m0.2.1 では、(1) で書いた内容が書き込まれてしまう
      IE5.5, NN4.76 では、注意が表示されて、実行すると (1)
      で書いた内容が、掲示板に書き込まれてしまう

      Mozilla0.8 では、何も書き込まれない。これは正常。


 ブラウザによって、結果が違うものの、友人の作った Perl の
掲示板では、どのようにしても、ただ再表示されるだけで、書き
込まれたり、注意が表示されたりはしません。

 きっと僕の Ruby のスクリプトで、テキストを取得するときに
何か処理が足りないのだろうと思っているのですが、それが
分かりません。

 書き込み後の再読み込みで、注意が表示されたり、直前の書き込みが
書き込まれたりしないためには、どのようにしたら良いか、ご助言
頂ければ幸いです。よろしくお願いします。

 問題のスクリプトを短くしたものを記載します。属性 0777 の
ディレクトリに、このスクリプトを属性 0755、名前 index.cgi
にして置き、ruby へパスを通して頂ければ動きます。

 長いメイルになってしまい恐縮ですが、よろしくお願い致します。

#!/usr/bin/ruby

require "cgi"
class Item
  def initialize(s_name = "")
    @s_name = s_name
  end

  def get(in_cgi)
    @cgi = in_cgi
    @s_name = @cgi['name'][0]
  end

  def put_file(s_logfile)
    s_tmpfile = "log_tmp.txt"

    begin
      File.rename (s_logfile, s_tmpfile)
      fl_tmp = open (s_tmpfile, "r")
    rescue Errno::ENOENT
      fl_tmp = nil
    end

    fl_log = open (s_logfile, "w")
    fl_log.print @s_name, "\n"
    fl_tmp.each { |line| fl_log.print line }.close unless fl_tmp == nil
    fl_log.close
    File.chmod (0666, s_logfile)
  end

  def write
    print "<HR>", @s_name.chop, "\n"
  end
end

class BBS
  def initialize
    @cgi = CGI.new

    if @cgi['state'][0] == "written"
      my_item = Item.new
      my_item.get(@cgi)
      my_item.put_file ("log.txt")
    end
  end

  def write_html
    print "Content-type: text/html\n\n"
    print <<-EOL
    <HTML><BODY><H1>BBS</H1><HR>
    <FORM method="POST" action="./index.cgi">
      <INPUT type="hidden" name="state" value="written">
      Content<INPUT type="text" name="name">
      <INPUT type="submit" value="submit">
    </FORM>
    EOL

    File.foreach("log.txt") do |log_line|
      Item.new(log_line).write
    end

    print "</BODY></HTML>"
  end
end

bbs = BBS.new
bbs.write_html
    ______________________________________________________
   /                                               ______/
  /    三上   雅人 - 英語表記も姓名順です        _____/
 /   Mikami Masato - ↓移転 8/15               ____/
/       興  風  館 - http://kofukan.nmn.jp/  ___/