WriteWord.cgi
出典: YKAwiki
概要
Flash で入力された単語情報が渡された後、MySQL サーバにアクセスし、単語を登録するためのプログラム。使用する言語は Ruby。
MySQL の Ruby 用 API を提供する拡張ライブラリ MySQL/Ruby を利用する。
この CGI は Flash から単語名、説明文、アップロードされた画像へのパスを変数として受け取り、データベースに登録する。
変数が適当な値を持つかどうかの判断は、サーバへのアクセスによるオーバヘッドを避けるため、 Flash 側で行う。
Flash が変数が適当かどうかを判断する項目は writeWord_mc について に記述した。説明のため、以下にもう一度書いておくと
- 単語は適切な長さか(1文字以上21文字以下)、既に登録されていないか(登録されている全ての単語名をクライアントに送る必要がある。)
- 説明文は適切な長さか(1文字以下または画面上に表示できない文章は受け付けず、説明文の再入力を促す)
- 画像を添付するか(任意)添付する場合はパスを示す文字列が適切か
である。
Ruby ソース
ソースを説明する。説明無しは一番最後に。
渡された値のチェックは行わない。
この項ではコメントを省いたので10数行しかない・・。
#!/usr/local/bin/ruby -Ku
コマンドラインオプション -K で文字コード UTF-8 を指定。
print "Content-type: text/html\n\n"
ブラウザでの表示のための行。デバッグ用。
require "cgi"
CGI プログラムの支援ライブラリの使用
require "mysql"
MySQL データベースの利用のための拡張ライブラリ(MySQL-Ruby)の使用
form = CGI.new
CGI クラスのインスタンス化
f_word = form['word'] f_note = form['note'] f_image = form['image']
フォームフィールドの値 (word, note, image) を得る image は NULL が渡される場合もある
msql = Mysql.new('MySQL_SERVER','LOGIN_ID','PASSWORD','DATABASE')
Mysql クラスのインスタンス化。Mysql は MySQL を操作するためのクラス。 MySQL サーバ MySQL_SERVER に LOGIN_ID と PASSWORD を使ってログインし、DATABASE に接続する。 Mysql クラスオブジェクトを返す。
is_add_word = msql.query(
"INSERT INTO words(word, note,image)
VALUES ('#{msql.quote(f_word)}', '#{msql.quote(f_note)}', '#{msql.quote (f_image)}')")
(実際は1行であることに注意)
クエリを実行。入力された文字列(word, note, image)をクオートし、データベースに追加。
Ruby では文字列中で変数を展開したい場合 #{hoge} のように行う。
既に登録されている単語名をデータベースに渡した場合、上書きはされないがエラーも返らないので、 登録されているかどうかは Flash 側でチェックする。
返り値は{ 成功:nil 失敗:返らない }
以降はブラウザでのデバッグ用のコード。Flash に渡すのは成功したことを示すフラグ変数だけで十分。
if is_add_word == nil then res_word = "成功:" + f_word + " をデータベース YKAwords_db に追加しました。" else res_word = "失敗:" + f_word + " をデータベース YKAwords_db に追加できませんでした。" end
puts '<html><head><title>add</title></head><body bgcolor="#FFFFFF">' puts res_word puts '</body></html>'
(stub)ブラウザでデータベースに書き込めることは確認。最後の方の puts は Flash 側も少し作ってから書き換える。
以下ソース
#!/usr/local/bin/ruby -Ku
##############################################################
# add.cgi 2006/03/06 #
# Takeuchi Takaaki ( taka@ja2yka.homeip.net ) #
# 渡された変数 word, note, image をデータベースに追加する。 #
##############################################################
print "Content-type: text/html\n\n"
require "cgi" # CGI プログラムの支援ライブラリの使用
require "mysql" # MySQL データベースの利用のための拡張ライブラリ(MySQL-Ruby)の使用
form = CGI.new
# フォームフィールドの値 (word, note, image) を得る
f_word = form['word']
f_note = form['note']
f_image = form['image'] # image は NULL が渡される場合もある
# YKAwords_db に接続し、Mysql クラスオブジェクトを返す
msql = Mysql.new('MySQL_SERVER','LOGIN_ID','PASSWORD','DATABASE')
# クエリを実行。入力された文字列(word, note, image)をデータベースに追加
# 既に登録されている単語名を渡した場合、上書きはされないがエラーも返らないので、
# 登録されているかどうかは Flash 側でチェックする。
# 返り値は{ 成功:nil 失敗:返らない }
is_add_word = msql.query("INSERT INTO words(word, note,image) VALUES ('#{msql.quote(f_word)}', '#{msql.quote (f_note)}', '#{msql.quote(f_image)}')")
if is_add_word == nil then
res_word = "成功:" + f_word + " をデータベース YKAwords_db に追加しました。"
else
res_word = "失敗:" + f_word + " をデータベース YKAwords_db に追加できませんでした。"
end
puts '<html><head><title>add</title></head><body bgcolor="#FFFFFF">'
puts res_word
puts '</body></html>'
