From: FUJIOKA Takeyuki Date: 2002-04-02T14:25:33+09:00 Subject: [ruby-list:34722] cgi.rb の form の挙動 藤岡です。 cgi.rb のformの挙動でちょっと理解しがたい部分があったので質問します。 http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=CGI%3A%3ASession ある使用例をちょっと改造したプログラムでformメソッドをつかって HTMLを出力すると動かなくて,ヒアドキュメントをつかって formタグを書くとうまくいくという挙動を示します。 具体的には下のプログラムでボタンを押すとエラーになりますが, cmd_startメソッドの中のコメントアウトの部分と 出力を入れ替えるとうまくいきます。 私にはその2つの違いがわかりませんでした。 どちらも最初のページは出力されるのでさっぱりわかりません。 ミスがあったら指摘をお願いします。 ---- #!/usr/bin/ruby require "kconv" require "cgi" require "cgi/session" class SessionDemo def initialize @cgi = CGI::new("html3") File.umask(0066) # セッションファイルは誰にも読まれたくないよ @session = CGI::Session::new( @cgi ) # セッションはこうして生成する。 @cmd="" if @cgi['cmd'].first!=nil if @cgi['cmd'].first.type==String @cmd = @cgi['cmd'].first else @cmd = @cgi['cmd'].first.read end else @cmd='start' end @header = { "type" => "text/html", "charset" => "euc-jp" } __send__("cmd_#{@cmd}") end def cmd_start =begin @cgi.out(@header){ @cgi.html{ @cgi.head{@cgi.title{"CGI::Session Demo"}}+ @cgi.body{ <<-END

あなたの名前は?

END } } } =end @cgi.out(@header){ @cgi.html{ @cgi.head{@cgi.title{"CGI::Session Demo"}}+ @cgi.body{ @cgi.form("METHOD"=>"post","ENCTYPE"=>"multipart/form-data", "action"=>"#{ENV['SCRIPT_NAME']}"){ <<-END

あなたの名前は?

END } } } } end def cmd_hello @session['name'] = Kconv::toeuc( @cgi['name'].first.read ) name = @session['name'] # セッションに記憶 @cgi.out( @header ) { # セッション情報は隠れクッキーで保持されるため、CGI#outで出力 <<-END CGI::Session Demo

こんにちは、#{name}さん

[次へ]

END } end def cmd_bye name = @session['name'] # セッションデータから取り出し @cgi.out( @header ) { <<-END CGI::Session Demo

#{name}さん、さようなら

[戻る]

END } end end SessionDemo.new