#!/bin/sh myname=`basename $0` mydir=`dirname $0` cd $mydir # scriptと同じディレクトリに移動 DB=db/val.sq3 . $mydir/cgilib2-sh # 使用DBファイルを db/val.sq3 に if [ -n "$1" ]; then # $1 はURL直打ちできるので数字でない場合も考慮する r=${1%%[!0-9]*}; r=${r##*[!0-9]} # $1 から数字以外を除去 # ★A★ 与えられた rowid でもう一度 rowid を取り直してみる rowid=`query "SELECT rowid FROM v WHERE rowid=$1;"` fi title=${rowid:+"Edit $rowid"} # $rowid は "" か整数になる title=${title:-"List"} # $rowid が空なら "List" に m4 -D_TITLE_="$title" -D_ACTION_="$myname" editv-head.m4.html # 【1】 if [ -z "$rowid" ]; then # 有効なrowid指定がなければ新規入力 echo "

valの新規入力:

" #★B★ val=`getpar val | sed "s/'/''/g"` # SQLクォートする rid=`getpar rowid` # hiddenで入力された場合 rid=${rid%%[!0-9]*}; rid=${rid##*[!0-9]} # 数字以外を除去 case `getpar action` in # ★C★ラジオボタン action の値で処理切り替え "") # 新規入力 [ -n "$val" ] && # $val が空でなければINSERT query "INSERT INTO v VALUES('$val');" && echo "

New record '`echo \"$val\"`' inserted." ;; edit) [ -n "$rid" ] && # hidden指定のrowidレコードを更新 query "REPLACE INTO v(rowid, val) VALUES($rid, '$val');" && echo "

Update rowid($rid)=`escape \"$val\"`.

" ;; rm) [ -n "$rid" ] && # hidden指定のrowidレコードを削除 if [ x"`getpar rm`" = x"yes" ]; then query "DELETE FROM v WHERE rowid=$rid;" && echo "

Delete rowid($rid).

" fi ;; esac echo "

既存レコード一覧(クリックして編集):
" # ★D★ .mode html でのSELECT結果1個分は以下のようになる query<<-EOF | # 1 .mode html -- データ SELECT rowid, val FROM v; -- EOF # query結果が次のsedへの入力。sed操作でHTMLタグを外し、 # $rowid:$val に置換する sed -e "/^/N; # で始まる行と次の行を連結 s/\n//; # 連結行にある改行を削除 s|^\([0-9]*\)|\1:| s|\(.*\)$|\1 |; # valのカラムからTDタグを外す /^<\/TR>$/d; # のみの行を削除" echo "

" else valfile=$tmpd/val.$$ # ★E★ escape "`query \"SELECT val FROM v WHERE rowid=$rowid;\"`" > $valfile m4 -D_ROWID_="$rowid" \ -D_VAL_="syscmd(\`cat $valfile')" editv-form.m4.html # 【2】 fi m4 editv-foot.m4.html # 【3】 各閉じタグをまとめて出力