#!/usr/bin/env ruby # coding: utf-8 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_ # (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なら検索 # 入力値をDBに挿入する部分の始まり db = SQLite3::Database.new("tmpdb/fruits.sq3") db.execute("CREATE TABLE IF NOT EXISTS fruits(item, at, memo);") # 品目が入力してあったなら実際にinsertにて登録 if mode=="new" && name && (name=name.strip) > "" # これが呼ばれた時点で新規書き込みがあればinsert memo = CGI::escapeHTML(memo.chomp) # 記号をエスケープする memo.gsub!(/\r?\n/, "
\n") # 改行に
を足す db.execute('INSERT INTO fruits VALUES (?, ?, ?)', # ?はプレースホルダー name.toutf8, at, memo.toutf8) # 対応する引数が挿入される 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_