Gaucheプログラミング(立読み版) > 第2部: 実用 > CGIを書こう > CGIパラメータを受け取る


[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

CGIパラメータを受け取る 応援する 

cgi-mainを使って書いたCGIスクリプトでパラメータを受け取ってみましょう。

cgi-mainの最初の引数となっている手続きには、「CGIパラメータのリスト」が引数として渡されます。

 (cgi-main
  (lambda (params)
   ...
  ))

上記の例では、lambdaで書かれた無名手続きの引数であるparamsから「CGIパラメータのリスト」を取り出せばよいのです。

「www.cgiライブラリを利用する」で書いたhello.cgiを改造して、params引数にどんなリストが渡されるのか確かめてみましょう。

 #!/usr/local/bin/gosh
 
 (use www.cgi)
 (use text.html-lite)
 
 (cgi-main
  (lambda (params)
    (list
     (cgi-header)
     (html-doctype)
     (html:html
      (html:body
       (html:p (x->string params ))
       )))))

変更したのは(x->string params )の箇所です。x->string手続きを使って、paramsをそのまま文字列に変換しています。

このCGIに次のパラメータを与えてアクセスしたとします。

 &y=2007&m=1&d=30

CGIは結果として次の文字列を表示します。

 ((y 2007) (m 1) (d 30))

この結果から、パラメータのリストとは「“キーと値から成る(2要素の)リスト”のリスト」であることが分かります。

では、同じキーを複数与えたときはどうなるでしょうか?

例:

 &y=2007&y=2008&y=2009

結果:

 ((y 2007 2008 2009))

では、キーだけを与えた場合は?

例:

 &y

結果:

 ((y #t))

この結果から、要素数は2要素ではなく複数であることが分かります。上記を修正するなら、パラメータのリストとは、「“キーに続く1個以上の値からなるリスト”のリスト」ということになります。

cgi-get-parameter手続きでパラメータの値を得る

ある特定のキーに対応する値を得たいときどうすれば良いでしょうか?

www.cgiライブラリのcgi-get-parameter手続きを使うと特定のキーに対応する値を取得できます。

 #!/usr/local/bin/gosh
 
 (use www.cgi)
 (use text.html-lite)
 
 (cgi-main
  (lambda (params)
    (list
     (cgi-header)
     (html-doctype)
     (html:html
      (html:body
       (html:p (cgi-get-parameter "y" params))
       )))))

ここでは"y"のキーに対応する値を取得しています。

このCGIに次のパラメータを与えてアクセスしたとします。

 &y=2007&m=1&d=30

結果として表示されるのは"y"のキーに対応した値だけです。

結果:

 2007

cgi-get-parameterで取得できるのは一つの値だけです。

 &y=2007&y=2008&y=2009

上記の例では同じキーで複数の値を渡していますが、結果として表示させるのは一つの値だけです。

結果:

 2007

cgi-get-parameterにオプション引数として:list #tを与えると戻り値として常にリストが返ります。

 #!/usr/local/bin/gosh
 
 (use www.cgi)
 (use text.html-lite)
 
 (cgi-main
  (lambda (params)
    (list
     (cgi-header)
     (html-doctype)
     (html:html
      (html:body
       (x->string (cgi-get-parameter "y" params :list #t))
       )))))

例:

 &y=2007&y=2008&y=2009

結果:

 (2007 2008 2009)

例:

 &y=2007

結果:

 (2007)

パラメータの値を数値に変換する

CGIパラメータの値の型は文字列です。

 &y=2007

上記のパラメータを与えられたとき、"y"のキーに対応する値は"2007"という文字列です。

cgi-get-parameterにオプション引数として:convertキーワードを与えるとパラメータの値を変換することができます。

例:

 (cgi-get-parameter "y" params :convert x->integer)

この例ではx->integer手続きを使ってパラメータの値を整数値に変換しています。


[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation