From owner-FreeBSD-users-jp@jp.FreeBSD.org Tue Jun  4 08:24:29 2002
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) id g53NOTY83348;
	Tue, 4 Jun 2002 08:24:29 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from miso.k.notwork.org (miso.k.notwork.org [219.163.110.3])
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) with ESMTP/inet id g53NOSv83343
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Tue, 4 Jun 2002 08:24:28 +0900 (JST)
	(envelope-from gotoken@notwork.org)
Received: from miso.k.notwork.org (miso.k.notwork.org [219.163.110.3])
	by miso.k.notwork.org (8.12.3/8.11.6) with ESMTP id g53NOZOg013671
	(using TLSv1/SSLv3 with cipher EDH-RSA-DES-CBC3-SHA (168 bits) verified NO)
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Tue, 4 Jun 2002 08:24:36 +0900 (JST)
	(envelope-from gotoken@notwork.org)
Message-Id: <200206032324.g53NOZOg013671@miso.k.notwork.org>
Date: Tue, 04 Jun 2002 08:24:35 +0900
From: GOTO Kentaro <gotoken@notwork.org>
To: FreeBSD-users-jp@jp.FreeBSD.org
In-Reply-To: <200206031506.g53F6Ma40993@pis.elm.toba-cmt.ac.jp>
References: <200206031506.g53F6Ma40993@pis.elm.toba-cmt.ac.jp>
User-Agent: Wanderlust/2.8.1 (Something) Emacs/21.2 Mule/5.0 (SAKAKI)
MIME-Version: 1.0 (generated by SEMI 1.14.3 - "Ushinoya")
Content-Type: text/plain; charset=ISO-2022-JP
Reply-To: FreeBSD-users-jp@jp.FreeBSD.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+020417
X-Sequence: FreeBSD-users-jp 68980
Subject: [FreeBSD-users-jp 68980] Re: How to CGI form values from db?
Errors-To: owner-FreeBSD-users-jp@jp.FreeBSD.org
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: gotoken@notwork.org

At Tue, 04 Jun 2002 00:06:22 +0900,
KIRIYAMA Kazuhiko wrote:

> CGI $B$N(B form $BF~NO;~$K4{$KF~NO$7$?%G!<%?$r%G!<%?%Y!<%9$+$iF~NO(B
> $B$7$F(B form $B$N(B input $B%U%#!<%k%I$K%;%C%H$7$?$$$N$G$9$,!"4JC1$J(B
> $BJ}K!$,$"$l$P8f65<($*$M$,$$$7$^$9!#(BCGI $B$O(B eRuby $B$G=q$$$F$$$F(B
> $B%G!<%?%Y!<%9$O(B PStore $B$r;H$C$F$$$^$9!#(B

require "cgi" $B$7$F%j%/%(%9%H$N2r@O$O(BCGI$B$K$5$;$k$N$,4JC1$G$9!#(B
PStore $B$O%9%l%C%I4V$NGSB>@)8f$rDs6!$7$^$9$,!"%W%m%;%94V$G$N(B
$BGSB>@)8f$^$G$ODs6!$7$J$$$N$G(BCGI$B$G;H$&>l9g$OLLE]$r8+$kI,MW$,(B
$B$"$j$^$9!#(B

$B%m%C%/%U%!%$%k$r;H$&$+(BPStore$B$N%$%s%?!<%U%'%$%9$r9T$J$&%5!<%P(B
$B$rN)$F$k$3$H$K$J$k$G$7$g$&!#(BdRuby $B$r;H$($P8e<T$b4JC1$G$9$,(B
(dRuby$B$r;H$o$J$$>l9g$O%W%m%H%3%k$r@_7W$,I,MW(B)$B!"$3$3$G$O(BeRuby
$B$@$1$G407k$9$k$h$&$KA0<T$r%5%s%W%k$H$7$F$D$1$F$*$-$^$9!#(B
httpd$B$,=q$-9~$_2DG=$J(B lockdir/ $B$H(B dbdir/ $B$,%9%/%j%W%H$HF1$8(B
$B%G%#%l%/%H%j$K$"$k$3$H$rA0Ds$H$7$F$$$^$9!#(B

-- Gotoken

#!/usr/local/bin/eruby -Mc -C euc-jp
<html>
<head><title>sample</title><head>
<%
require "cgi"
require "pstore"

def transaction(dbman = "dbdir/sample", lock = "lockdir/sample", &block)
  count = 10
  begin
    Dir::mkdir(lock)
    begin
      db = PStore::new(dbman)
      db.transaction{block.call(db)}
    rescue # see httpd's error_log
      raise $!
      exit!
    ensure
      Dir::unlink(lock)
    end
  rescue Errno::EEXIST
    if count > 0
      count -= 1
      sleep 0.5
      retry
    else # busy
      puts "<html><head><title>busy</title></head>"
      puts "<body>Service is busy.  Retry again later. </body></html>"
    end
  end
end

def get(name, root = "test0")
  transaction do |db|
    db.root?(root) or db[root] = Hash.new("")
    table = db[root]
    table[name]
  end
end

def set(name, val, root = "test0")
  transaction do |db|
    db.root?(root) or db[root] = Hash.new("")
    table = db[root]
    if table[name] != val
      table[name] = val
      db.commit
    end
  end
  val
end

cgi = CGI.new
path = cgi.script_name

v0 = cgi.has_key?("v0") ? set(:v0, cgi["v0"]) : get(:v0).to_s
v1 = cgi.has_key?("v1") ? set(:v1, cgi["v1"]) : get(:v1).to_s
%>
<body>
<form method="POST" action="<%= path%>">
<input type="text" name="v0" value="<%= v0%>" size=70><br>
<input type="text" name="v1" value="<%= v1%>" size=70><br>
<input type="submit" value="submit">
</form>
</body>
</html>
