2011年3月23日水曜日

ruby+webrickで、html内の入力フォームデータをDBに書きこむ

htmlのフォームから飛ばしたデータをrubyで処理する方法を紹介。
簡易的なサービスを想定しているので、
WEBrick+SQlite3を使用。
SQliteはdbiライブラリで扱っている。

【index.html】
# ヘッダー等は割愛
<form action="entry">
<input type="text" name="name">
<input type="submit" value=" 送信 ">
</form>

【server.rb】
#! /usr/local/bin/ruby -Ks
# -*- encoding: UTF-8 -*-

require 'rubygems'
require 'webrick'
require 'erb'
require 'dbi'

config = {
:port => 8099,
:DocumentRoot => '.'
}

server = WEBrick::HTTPServer.new( config )

server.mount_proc("/entry") { |req, res|
dbh = DBI.connect( 'DBI:SQlite3:test.db' )
dbh.do("insert into date
values('#{req.query['name']}');")
dbh.disconnect

template = ERB.new( File.read('entried.html') )
res.body << template.result( binding )
}

trap(:INT) do
server.shutdown
end

server.start

【entried.html】
登録完了

action名と同じ名前をmount_porcでしてあげると、それ以下の処理をしてくれる。
その際templateで返答するデータを決めているので、html形式で返す(erbなどでもOK)
trapはControl+cでサーバを停止させる仕組み。

ちなみに
WEBrick::HTMLServlet::FileHandler.add_handler("erb", WEBrick::HTTPServlet::ERBHandler)
とserver = WEBrick::HTTPServer.new( config )の下あたりにでも追記すると、拡張子erbを処理済みのファイルとして扱えるようになる。

セキュリティレベルは推して知るべし。

0 件のコメント:

コメントを投稿