_EOF_
db = SQLite3::Database.new("tmpdb/fruits.sq3")
# CREATE TABLE kudamono(id integer primary key autoincrement, item, at, memo);
# 値入力フォームの初期値用の変数
fruit = at = memo = update = ""
# ./kudamono.rb -edit 1 のように呼ばれたら入力フォームに初期値を入れる
# -edit オプションは一覧表示のところで出している(※1)
if ARGV[0] == "-edit" && ARGV[1] != nil
id = ARGV[1] # 更新するレコードのid
r = db.execute("select * from kudamono where id=#{id}")
fruit, at, memo = r[0][1..-1] # 第2カラム以降すべて
memo = CGI::unescapeHTML(memo.gsub(" ", "")) # は取り除く
update = "\n"
end
# (1)入力フォーム出力
if update > ""
printf("
id=%dのレコード更新
\n", id)
else
puts("
新規レコード入力
")
end
print <<_EOF_
_EOF_
if update > "" # update(更新値入力)ならここで出力終わり
puts("\n")
exit(0)
end
# (2)検索フォームの出力
print <<_EOF_
検索
_EOF_
# フォーム出力終わり
# (1)と(2)のどちらの[OK]が押されたかはCGI変数 mode で判断する
# 一覧表示の前に,前回のCGI入力があったら先に登録する
name = cgi['fruit']
at = cgi['at'].to_i
memo = cgi['memo']
mode = cgi['mode'] # この値が newなら登録, searchなら検索
update = cgi['update'] # この値が "" でなければ更新(update)
id = cgi['id']
rm = cgi['rm'] # [削除]ボタンが押された場合に代入される
# 品目が入力してあったなら実際にinsertにて登録 または updateで更新
if mode=="new" && name && (name=name.strip) > ""
# これが呼ばれた時点で新規書き込みがあればinsert
memo = CGI::escapeHTML(memo.chomp) # 記号をエスケープする
memo.gsub!(/\r?\n/, " \n") # 改行に を足す
if id && id > "" # id指定があるなら既存レコード更新
sql = "update kudamono set item=?, at=?, memo=? where id=#{id}"
else # id指定がないなら新規レコード登録
sql = "insert into kudamono(item, at, memo) values (?, ?, ?)"
end
db.execute(sql, name.toutf8, at, memo.toutf8)
# 新規書き込み登録/update ここまで
elsif rm && rm > "" # 削除ボタンを押したとき
cgi.keys.each do |k| # keysで変数一覧. rm_#{id} があるはず
next unless /rm_(\d+)/ =~ k # CGI変数名が rm_X でなければスキップ
n = $1
db.execute("delete from kudamono where id=#{n}")
end
end
def mktable(heading, result)
# select の結果を表形式で一覧表示するメソッド
h = "
ID
品目
単価
メモ
"
n = -1
printf("
%s
\n", heading)
puts('')
end
# 検索キーワード指定時の処理
if mode=="search"
kwd1 = cgi['kwd1']; kwd2 = cgi['kwd2']
if kwd1 > ""
h = sprintf("
品名検索結果: キーワード:[%s]", kwd1)
r = db.execute("select * from kudamono where item like '%#{kwd1}%'")
mktable(h, r)
end
if kwd2 > ""
h = sprintf("
メモ検索結果: キーワード:[%s]", kwd2)
r = db.execute("select * from kudamono where memo like '%#{kwd2}%'")
mktable(h, r)
end
else
# (3)一覧表示(検索語指定がなかった場合)
res = db.execute("select * from kudamono")
mktable("レコード一覧", res)
end
print <<_EOF_