タグ別アーカイブ: form

ruby

rubyでformを取得する【サンプル】

railsのようなフレームワークを使わずに、ruby単体でform(リクエスト)情報を取得する方法です。

現在のバージョン ruby 2.1 で動作確認を行っております。

rubyでformを取得する

cgiクラスを読込んで、cgi.newするだけで使えるので簡単です。
簡単ですが、少し気を付けたい点です。
・postもgetも、同じコードで取得できるので、意図しないgetに注意する。
・checkboxやname名が同じ要素等は、配列として渡されます。params(ハッシュに変換するメソッド)を使用してアクセスすると便利です。
・escapeHTMLメソッドで、エスケープする(XSS:クロスサイトスクリプティング対策)。

もちろん、実際に使用するときは、入力値のバリデーションも行いましょう。

require "cgi"
cgi = CGI.new

# リテラルの場合
# <input type="text" name="name" />
print cgi['name']

# 配列で渡される値の場合
# <input type="checkbox" name="checkbox" value="box1" />
# <input type="checkbox" name="checkbox" value="box2" />

# 個別にアクセス
print cgi.params['checkbox'][0]

# each でまとめてアクセス
objCgi.params['checkbox'].each do |i|
  print i,"<br>"
end

# エスケープ
print CGI.escapeHTML(cgi['name'])

rubyでformを取得するサンプル

railsのようなフレームワークを使わずに、ruby単体でリクエスト情報を取得するサンプルです。
rubyでformを取得する【サンプル】
#!/xxxx/lib/ruby の部分は環境に合わせて変更してください。

#!/xxxx/lib/ruby

require "cgi"
objCgi = CGI.new

# リクエストを、エスケープし, 文字列は文字列化, 数値は数値化
# objCgi : CGIインスタンス
# arrkeys : 配列のキー(チェックボックス等)
def requestParse(objCgi, *arrkeys)
  
  require "cgi"
  hashResult = Hash.new
  
  arrRequestKeys = objCgi.keys
  
  arrRequestKeys.each do |key|
    if (arrkeys.index(key) == nil) then
      temp = CGI.escapeHTML(objCgi[key].to_s.strip)
      if ( /^([0-9])+$/ =~ temp ) then
        temp = temp.to_i
      end
    else
      # 配列の時
      arrValue = objCgi.params[key]
      temp = Array.new
      arrValue.each do |value|
        val = CGI.escapeHTML(value.to_s.strip)
        if ( /^([0-9])+$/ =~ val ) then
          val = value.to_i
        end
        temp << val
      end
    end
      hashResult[key] = temp
  end
  
  return hashResult 
end

# リクエスト(post,get)と、配列のネームを渡します。
arrRequests = requestParse(objCgi, "checkbox", "checkbox2")

# チェックボックス判定
def checkflag(array, value)
  check = ""
  if (array.class == Array and array.index(value) != nil) then
      check = "checked"
  end
  return check;
end

print <<"HERE"
Content-Type: text/html

<!DOCTYPE html>
<html lang="ja" xml:lang="ja">
<head>
    <meta charset="UTF-8">
    <title>rubyでformを取得する【サンプル】</title>
</head>
<body>
<form action="#" method="post">
    <p>name : val1</p>
    <input type="text" name="val1" value="#{arrRequests['val1']}" />
    <p>name : val2</p>
    <input type="text" name="val2" value="#{arrRequests['val2']}" />
    <p>name : radio</p>
    <input type="radio" name="radio" value="radio1" #{ "checked" if arrRequests["radio"] == "radio1"} />radio
    <input type="radio" name="radio" value="radio2" #{ "checked" if arrRequests["radio"] == "radio2"} />radio2
    <input type="radio" name="radio" value="radio3" #{ "checked" if arrRequests["radio"] == "radio3"} />radio3<br />
    <br />
    <p>name : checkbox</p>
    <input type="checkbox" name="checkbox" value="momo" #{checkflag(arrRequests["checkbox"], 'momo')} />momo
    <input type="checkbox" name="checkbox" value="hana" #{checkflag(arrRequests["checkbox"], 'hana')} />hana
    <input type="checkbox" name="checkbox" value="kuri" #{checkflag(arrRequests["checkbox"], 'kuri')} />kuri
    <input type="checkbox" name="checkbox" value="2929" #{checkflag(arrRequests["checkbox"], 2929)} />2929<br />
    <br />
    <p>name : checkbox2</p>
    <input type="checkbox" name="checkbox2" value="1" #{checkflag(arrRequests["checkbox2"], 1)} />1
    <input type="checkbox" name="checkbox2" value="2" #{checkflag(arrRequests["checkbox2"], 2)} />2
    <input type="checkbox" name="checkbox2" value="3" #{checkflag(arrRequests["checkbox2"], 3)} />3
    <input type="checkbox" name="checkbox2" value="4" #{checkflag(arrRequests["checkbox2"], 4)} />4<br />
    <br />
    <p>name : textbox</p>
    <textarea name="textbox" rows="10" cols="50">#{arrRequests['textbox']}</textarea>
    <br />
    <input type="submit" name="submit" value="送信" />
</form>
HERE

print "</body></html>\n"

オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル

オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル