From: "みかみまさと" Date: 2001-09-06T15:01:22+09:00 Subject: [ruby-list:31280] 掲示板の再読み込み時の問題 こんにちは。いつもお世話になっています、みかみと申します。  オブジェクト指向プログラミングに少し慣れましたが、未だ初心者 です。今は、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 "
", @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

BBS


Content
EOL File.foreach("log.txt") do |log_line| Item.new(log_line).write end print "" end end bbs = BBS.new bbs.write_html ______________________________________________________ / ______/ / 三上 雅人 - 英語表記も姓名順です _____/ / Mikami Masato - ↓移転 8/15 ____/ / 興 風 館 - http://kofukan.nmn.jp/ ___/