ASP講座シリーズ(15) HTMLフォームの使い方
著者:Eve Cole
更新時間:2009-05-30 19:58:48
ASP Request オブジェクトを使用すると、HTML テーブル データを収集および処理するためのシンプルかつ強力なスクリプトを作成できます。このトピックでは、基本的なテーブル処理スクリプトの作成方法を学習するだけでなく、Web サーバーおよびユーザーのブラウザ上のテーブル情報を検証するためのいくつかの便利なテクニックも学習します。
HTMLテーブルについて
Web 情報を収集する最も一般的な方法である HTML テーブルは、Web ページ上でユーザー インターフェイス コントロールを提供する HTML タグの特別な配置です。テキスト ボックス、ボタン、チェック ボックスは、ユーザーが Web ページを操作して Web サーバーに情報を送信できるようにする一般的なコントロールです。
次の HTML 例では、ユーザーが自分の名前と年齢を入力できるフォームを生成し、この情報を Web サーバーに送信するボタンが含まれています。フォームには、追加情報を Web ブラウザに渡すために使用できる暗黙的なコントロール (Web ブラウザには表示されません) も含まれています。
<FORM METHOD="POST" ACTION="myfile.asp">
<INPUT TYPE="テキスト" NAME="名">
<INPUT TYPE="テキスト" NAME="姓">
<INPUT TYPE="テキスト" NAME="年齢">
<INPUT TYPE="hidden" NAME="ユーザーステータス" VALUE= "new">
<INPUT TYPE="送信" VALUE="入力">
</FORM>
ASP 入力を処理するフォーム フォームが Web サーバーに情報を送信すると、ユーザーの Web ブラウザは HTML <FORM> タグの ACTION 属性で指定された .asp ファイルを要求します (前の例では、ファイルは Myfile.asp という名前でした)。 。 .asp ファイルには、結果テーブルの表示やデータベースからの情報のクエリなど、テーブル値を操作するスクリプトが含まれています。
.asp ファイルを使用して HTML テーブルから値を収集するには 3 つの方法があります
静的 .htm ファイルには、値が .asp ファイルに送信されるテーブルを含めることができます。
.asp ファイルは、その情報を別の .asp ファイルにメールで送信するフォームを作成できます。
.asp ファイルは、その情報をそれ自体 (フォームを含むファイル) にメールで送信するフォームを作成できます。
最初の 2 つのメソッドは同じように動作し、フォームが ASP 以外のゲートウェイ プログラムと対話する場合、ユーザーの選択を読み取って応答するコマンドを含めることができます。
テーブル定義を含み、それ自体に情報を送信する .asp ファイルを作成することは、より複雑ですが、テーブルを操作する強力な方法です。このプロセスは、「フォーム入力の検証」で説明されています。
フォーム入力を取得する
ASP Request オブジェクトは、URL リクエストに添付されたフォーム情報を取得するタスクを大幅に簡素化する 2 つのコレクションを提供します。
クエリ文字列コレクション
QueryString コレクションは、要求された URL の疑問符に続くテキストとして Web サーバーに渡される値を取得します。テーブル値は、HTTP GET メソッドを使用するか、テーブル値を URL に手動で追加することで、要求された URL に追加できます。
たとえば、前の表の例で GET メソッド (ACTION = "GET") が使用され、ユーザーが Jeff、Smith、および 30 と入力した場合、次の URL リクエストがサーバーに送信されます。
http://scripts/Myfile.asp?firstname=Jeff&lastname=Smith&age=30&userstatus=new
Myfile.asp には、次のテーブル処理スクリプトが含まれています。
こんにちは、<%= Request.QueryString("firstname") %> <%= Request.QueryString("lastname") %> です。
あなたは <%= Request.QueryString("age") %> 歳です。
<%
Request.QueryString("userstatus") = "新しいユーザー" の場合、
Response.Write「この Web サイトへの初めての訪問です!」
次の場合に終了
%>
この場合、Web サーバーは次のテキストをユーザーの Web ブラウザに返します。
こんにちは、ジェフ スミスさんは 30 歳です。この Web サイトを初めて訪問します。
QueryString コレクションには、リクエスト本文に表示される複数の値の 1 つにアクセスするために使用できるオプションのパラメーターがあります。 Count プロパティを使用して、特定の種類の値の出現数をカウントすることもできます。
たとえば、複数項目のリストボックスを含むフォームは次のリクエストを送信できます。
http://list.asp?food=apples&food=olives&food=bread
次のコマンドを使用して複数の値をカウントすることもできます。
Request.QueryString("食べ物").Count
複数の値の種類を表示する場合は、List.asp に次のスクリプトを含める必要があります。
<%Total = Request.QueryString("food").Count%>
<%For i = 1 to Total%>
<%= Request.QueryString("food")(i) %> <BR>
<%次%>
上記のスクリプトは次のように表示します。
リンゴ
オリーブ
パン
フォームの収集 HTTP GET メソッドを使用して長く複雑なフォーム値を Web サーバーに渡すと、情報が失われる可能性があります。ほとんどの Web サーバーは、GET メソッドを使用して渡される長いテーブル値が切り捨てられるように、URL クエリ文字列の長さを厳密に制御する傾向があります。大量の情報をフォームから Web サーバーに送信する必要がある場合は、HTTP POST メソッドを使用する必要があります。このメソッドは、HTTP リクエスト本文でテーブル データを送信するために使用され、送信される文字数に制限はありません。 ASP Request オブジェクトの Form コレクションを使用して、POST メソッドを使用して送信された値を取得することもできます。
Form コレクションは、QueryString コレクションと同じ方法で数値を格納します。たとえば、ユーザーが名前の長いリストをテーブルに入力した場合、次のスクリプトを使用してそれらの名前を取得できます。
<% For i = 1 から Request.Form.Count %>
<% =Request.Form("names")(i) %>
<% 次へ %>
フォーム入力の検証 優れたフォーム処理スクリプトでは、データを処理する前に、フォームに入力された情報が有効であることを検証する必要があります。検証スクリプトは、ユーザーがフォームに入力した情報の種類が正しいことを検証できます。たとえば、Web サイトにユーザーが財務情報を計算できるフォームが含まれている場合、結果を処理する前に、ユーザーがテキストではなく数値情報を実際に入力したかどうかを確認する必要があります。
フォーム入力を検証する非常に便利な方法は、情報をそれ自体に渡すフォームを作成することです。この場合、.asp ファイルには、情報を取得できるテーブルが含まれています。たとえば、次のスクリプトは、それ自体に情報を渡すことで、ユーザーが「年齢」テーブル フィールドに値を入力したことを検証します。
<% If Isnumeric(Request.QueryString("Age")) then %>
<p>こんにちは、あなたの年齢は <%=Request.QueryString("age")%> です。
<%その他%>
<p>年齢を数字で入力してください。
<%End If %>
<FORM METHOD= "POST" ACTION="verify.asp" >
名前: <INPUT TYPE="テキスト" NAME="名前" >
年齢: <INPUT TYPE="text" NAME="年齢" >
<INPUT TYPE="送信" VALUE="入力">
</FORM>
この例では、テーブルが含まれている同じ Verify.asp ファイル内にスクリプトも存在します。フォームは、ACTION 属性に Verify.asp を指定することで、フォーム自体に情報を渡します。
ユーザーが有効な情報を入力したかどうかを確認するクライアント側スクリプトを作成することもできます。 Web ブラウザでユーザー入力を検証すると、Web サーバーへのネットワーク トラフィックが削減されるだけでなく、フォーム入力エラーをユーザーに迅速に通知することができます。次のスクリプトはユーザーの Web ブラウザ上で実行され、Web サーバーに送信する前にユーザーの情報を検証します。
<スクリプト言語="VBScript">
<!--
サブボタンEnter_OnClick
ディムザフォーム
TheForm = Document.MyForm を設定します。
If IsNumeric(TheForm.Age.Value) then
TheForm.submit
それ以外
Msgbox "年齢を数字で入力してください。"
次の場合に終了
エンドサブ
//-->
</スクリプト>
<FORM METHOD= "POST" NAME= MyForm ACTION="myfile.asp" >
名前: <INPUT TYPE="テキスト" NAME="名前" >
年齢: <INPUT TYPE="text" NAME="年齢" >
<INPUT TYPE="ボタン" NAME="btnEnter" VALUE="Enter">
</FORM>