#!/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_

新規レコード入力

品目:
単価:
メモ:
email:
上の欄はダミーなので全部消して下さい

_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("\n", row.join("
%s
")) end puts("
") end if kwd2 > "" puts("

メモ検索結果

") printf("

検索語: %s

\n", kwd2) puts("") db.execute("select * from fruits where memo like '%#{kwd2}%'") do |row| printf("\n", row.join("
%s
")) end puts("
") end else # (3)一覧表示(検索語指定がなかった場合) puts("

レコード一覧

\n") puts("") res = db.execute("select * from fruits") res.each do |row| printf("\n", row.join("
品目単価メモ
%s
")) end puts("
") end print <<_EOF_ _EOF_