#!/usr/bin/env ruby
# coding: utf-8
# fruits2.rb
require 'sqlite3'
require 'kconv'
require 'cgi'
# HTMLヘッダの出力 (
まで)
cgi = CGI.new(:accept_charset => "utf-8")
print <<_EOF_
Content-type: text/html; charset=utf-8
YAOYA
yaoya DB
_EOF_
# フォーム画面をロードした時刻を hidden 変数に埋め込む
now = Time.now.to_i.to_s # 1970/1/1からの秒数が入る
# (1)入力フォーム出力
print <<_EOF_
新規レコード入力
_EOF_
# (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なら検索
nid = cgi['nid'].to_i
email = cgi['email']
# 入力値をDBに挿入する部分の始まり
db = SQLite3::Database.new("tmpdb/fruits.sq3")
# CREATE TABLE fruits(item, at, memo);
if nid==0 || (Time.now.to_i - nid) < 8
# あまりに速い書き込みなのでロボット?
puts("書き込みはキャンセルされました
")
elsif mode=="new" && name && (name=name.strip) > ""
if email && email > ''
puts("書き込みキャンセル: 指示に従って下さい
")
else
# 品目が入力してあったなら実際にinsertにて登録
# これが呼ばれた時点で新規書き込みがあればinsert
memo = CGI::escapeHTML(memo.chomp) # 記号をエスケープする
memo.gsub!(/\r?\n/, "
\n") # 改行に
を足す
db.execute('insert into fruits values (?, ?, ?)', # ?はプレースホルダー
name.toutf8, at, memo.toutf8) # 対応する引数が挿入される
end
end
# 新規書き込み登録ここまで
# 検索キーワード指定時の処理
if mode=="search"
kwd1 = cgi['kwd1']; kwd2 = cgi['kwd2']
if kwd1 > ""
puts("品名検索結果
")
printf("検索語: %s
\n", kwd1)
puts("")
db.execute("select * from fruits where item like '%#{kwd1}%'") do |row|
printf("%s |
\n", row.join(""))
end
puts(" |
")
end
if kwd2 > ""
puts("メモ検索結果
")
printf("検索語: %s
\n", kwd2)
puts("")
db.execute("select * from fruits where memo like '%#{kwd2}%'") do |row|
printf("%s |
\n", row.join(""))
end
puts(" |
")
end
else
# (3)一覧表示(検索語指定がなかった場合)
puts("レコード一覧
\n")
puts("品目 | 単価 | メモ |
")
res = db.execute("select * from fruits")
res.each do |row|
printf("%s |
\n", row.join(""))
end
puts(" |
")
end
print <<_EOF_
_EOF_