この特集のトップページへ
>
Chapter 8:プレゼンテーション層の構築
8.2.1 基本的なASPプログラム
●ユーザーからの入力
ところで,Webフォームで用いるのはテキストフィールド(<INPUT TYPE="TEXT">)だけではない。チェックボックスフィールド(<INPUT TYPE="CHECKBOX">)やラジオボックスフィールド(<INPUT TYPE="RADIO">),セレクトボックスフィールド(<SELECT>)も使われる。では,これらのフィールドを使った場合には,ASP側でどのようにすれば情報を取得できるのだろうか。
基本的に,チェックボックスフィールド,ラジオボックスフィールド,セレクトボックスフィールドの場合も,List 8-11に示したとおりRequest("フィールド名")を用いて値を取得する。
たとえば,List 8-12のようなチェックボックスを備えたフォームがあったとき,それを処理するASPファイルはList 8-13のようになる(Fig.8-36)。
Fig.8-36 List 8-12とList 8-13の実行結果
Fig.8-36の実行結果は少々わかりにくいかもしれないが,チェックボックスの場合,ユーザーによってチェックされているか否かによって,Request("フィールド名")は次の値を返す。
- チェックされている場合
-
対応する<INPUT TYPE="CHKBOX" NAME="フィールド名" VALUE="値">の“値”の部分を返す。List 8-12の場合,“VALUE="ON"”と指定しているため,“ON”という文字列が戻ることになる。
- チェックされていない場合
- EMPTY値が戻る。
よって,任意のチェックボックスをユーザーがチェックしたかどうかを調査するには,次のいずれかの条件式を用いることになる。
値を返すことを利用する
チェックされたときには値を返すことを利用し,“If Request("フィールド名")="値" Then”のように比較する。EMPTY値ではないことを利用する
チェックされたときには値がEMPTY値ではないことを利用し,“If Not IsEmpty(Request("フィールド名")) Then”のように比較する。
ここでは説明を省くが,ラジオボックスフィールドの場合も,チェックボックスフィールドと同様の方法で判定できる。
セレクトボックスフィールドの場合には,テキストフィールドと同様に,ユーザーが選択した文字列を返す。たとえば,List 8-14とList 8-15の実行結果はFig.8-37のようになる。
Fig.8-37 List 8-14とList 8-15の実行結果
List 8-14の4行目にある“SIZE=”の指定は,指定された項目数だけをリストボックスのように一覧表示するための指定である。“SIZE=”を省略すると,ドロップダウンリストボックスとして表示される。
List 8-14に示したように,ユーザーが1つの項目しか選択できないセレクトボックスフィールドの場合には,テキストフィールドと同様に,Request("フィールド名")を使うことによって,ユーザーが選択した項目の値(OPTIONエレメントの“VALUE=”で指定した値)を取得することができる。
しかし,セレクトボックスフィールドは複数の項目をユーザーに選択させることもできる。複数の項目を選択できるようにするには,SELECTエレメントにMULTIPLEという属性を加える。具体的には,List 8-14の4行目を次のように変更する。
<SELECT NAME="SELFIELD" SIZE="5" MULTIPLE>
この場合はユーザーが複数の項目を選択できるようになるわけだが,そのときの実行結果はFig.8-38のようになる。つまり,選択したすべての項目がカンマ(“,”)で区切られた文字列として得られる。
Fig.8-38 複数の選択項目を選んだときのList 8-14,List 8-15の実行結果
実際に複数の項目を選択できるセレクトボックスフィールドを使うときには,カンマで区切られた文字列ではなく,選択された1つ1つの項目を取り出して利用したいことが多い。その場合,もちろん文字列操作(VBScriptの場合にはSplit関数やInStr関数を使えばよいだろう)によって,カンマ区切り文字を分解することも可能であるが,面倒である。
そこで,もし選択された項目の個々の値を取得したい場合には,Requestコレクションに序数を付与することで,選択された項目のn番目の要素を取得することができるようになっている。つまり,Request("フィールド名")(1)とすると,選択された1番目の項目,Request("フィールド名")(2)とすると2番目の項目,……,“Request("フィールド名")(n)とするとn番目の項目を取得することができる。また,ユーザーが選択した項目の総数は,Request("フィールド名").CountのようにCountプロパティを用いて取得できるようにもなっている。
よって,ユーザーが選択したすべての項目を一覧にして表示するには,List 8-16のようにループ処理すればよいということになる(Fig.8-39)。
Fig.8-39 List 8-16の実行結果
16/43 |