Access + Webのホームへ戻る

フォームに入力したデータをサーバー側でエラーチェックするには

 

本来HTMLのフォームから入力したデータは、クライアントのブラウザ側でエラーチェックします。ところが、データベースを検索してエラーチェックを行うような場合は、クライアント側でエラーチェックを行うことができません。このような場合、Webサーバー側でエラーチェックして結果をクライアントに送信します。

 

   フォームに入力したデータをサーバー側でエラーチェックするには(ブラウザの「戻る」ボタンを利用)

 

ここで紹介するサンプルは、フォームから入力したデータをWebサーバー側でエラーチェックしてエラーメッセージをクライアントのブラウザに送信します。エラーメッセージは、データ入力と同じページに表示されます。フォームから入力したデータを再表示する代わりにブラウザの「戻る」ボタンの機能を利用して再入力させています。

 

図 フォームに入力したデータをサーバー側でエラーチェックするサンプル1

 

Access + Webのダウンロードの目次を表示させたら、「フォームをサーバー側でエラーチェックするサンプル(その1)」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、入力フォームが表示されます。

 

フォームの注文日と商品名にデータを入力したら送信ボタンをクリックします。送信ボタンをクリックすると行18<form>タグのaction=で指定したASPファイルがロードされます。(このサンプルでは、自分自身FormValidate.aspを指定しています。)

 

<form action="FormValidate.asp" method="post">

 

31では、Request.FormコレクションのCountプロパティを参照してフォームのエレメント数を調べています。フォームの送信ボタン経由でASPファイルがロードされたときには、フォームのエレメント数4が返ります。ブラウザのurlASPファイルを直接入力してロードさせたときは、Countプロパティには0が返されます。

 

request.form.count è 0 or 4

 

Countプロパティのエレメント数が0より大なら、行32-48を実行して注文日、商品名、単価、数量が入力されているか調べます。未入力のときは、変数strMsgにエラーメッセージを格納します。

 

if len(request.form("txtOrdDate")) = 0 then

  strMsg = strMsg & "注文日を入力してください!<br>"

end if

・・・

if len(request.form("txtQuantity")) = 0 then

  strMsg = strMsg & "数量を入力してください!<br>"

end if

 

44では、strMsgにエラーメッセージが格納されているか調べてエラーメッセージを表示します。今回のケースでは、単価と数量のエラーメッセージが表示されます。

 

response.write("<hr>" & strMsg & "<br>")

è単価を入力してください!

è数量を入力してください!

 

46-47では、<input type=”button”>を生成しています。この再入力ボタンには、onclickイベントが登録されています。再入力のボタンをクリックすると、DOMhistoryオブジェクトのgo(-1)メソッドが実行されてブラウザの「戻る」ボタンと同じ動作をします。(つまり、直前のページに戻ります。)

 

response.write("<input type='button' value=' 再入力 '" _

  & " onClick='history.go(-1)'>")

 

再入力ボタンをクリックして直前のページに戻ると、注文日と商品名がすでに入力された状態になっていますので、単価と数量を入力して再び送信ボタンをクリックします。

 

Webサーバー側でエラーチェックしてエラーメッセージを表示するとき、すでに入力されているデータを再表示すると使い勝手の良いWebページになります。このサンプルでは、すでに入力されているデータを再表示する代わりにブラウザの「戻る」ボタンの機能を利用しています。ブラウザの「戻る」ボタン機能を使用しないで、ASPスクリプトですでに入力されたデータを再表示させる方法もあります。(後述するサンプル「その2」を参照してください。)

 

 

   フォームに入力したデータをサーバー側でエラーチェックするには(入力データを再表示)

 

ここで紹介するサンプルは、フォームから入力したデータをWebサーバー側でエラーチェックしてエラーメッセージをクライアントのブラウザに送信します。エラーメッセージとして、入力フォームのテキストボックスの右側にを表示します。また、エラーメッセージを表示するとき、すでに入力されているデータも再表示します。

 

図 フォームに入力したデータをサーバー側でエラーチェックするサンプル2

 

Access + Webのダウンロードの目次を表示させたら、「フォームをサーバー側でエラーチェックするサンプル(その2)」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、入力フォームが表示されます。

 

フォームの注文日と商品名にデータを入力したら送信ボタンをクリックします。送信ボタンをクリックすると行41<form>タグのaction=で指定したASPファイルがロードされます。(このサンプルでは、自分自身FormValidate2.aspを指定しています。)

 

<form action="FormValidate2.asp" method="post">

 

22では、Request.FormコレクションのCountプロパティを参照してフォームのエレメント数を調べています。フォームの送信ボタン経由でASPファイルがロードされたときには、フォームのエレメント数4が返ります。ブラウザのurlASPファイルを直接入力してロードさせたときは、Countプロパティには0が返されます。

 

request.form.count è 0 or 4

 

Countプロパティのエレメント数が0より大なら、行23-38を実行します。行23-26では、Request.Formコレクションから注文日、商品名、単価、数量の値を取得して変数に保存します。

 

strOrdDate = request.form("txtOrdDate")

strProdName = request.form("txtProdName")

strUnitPrice = request.form("txtUnitPrice")

strQuantity = request.form("txtQuantity")

 

27-38では、注文日、商品名、単価、数量が入力されているか調べます。未入力のときは、変数にを格納します。

 

if len(strOrdDate) = 0 then

  strOrdDateMsg = ""

end if

・・・

if len(strQuantity) = 0 then

  strQuantityMsg = ""

end if

 

43-50では、注文日、商品名、単価、数量の<input type=”text”>タグのvalue=Request.Formで取得したエレメント値を設定しています。また、<input>タグの右側にエラーメッセージを表示させています。

 

<input type="text" name="txtOrdDate" value="<%=strOrdDate%>">

  <span class="style2"><%=strOrdDateMsg%></span><br>

<input type="text" name="txtProdName" value="<%=strProdName%>">

  <span class="style2"><%=strProdNameMsg%></span><br>

<input type="text" name="txtUnitPrice" value="<%=strUnitPrice%>">

  <span class="style2"><%=strUnitPriceMsg%></span><br>

<input type="text" name="txtQuantity" value="<%=strQuantity%>">

  <span class="style2"><%=strQuantityMsg%></span><br>

 

今回のケースでは、単価と数量のテキストボックスの右側にが表示されます。すでに入力されている注文日と商品名は再表示されますので、単価と数量を入力して再度送信ボタンをクリックします。

 

Access + Webのホームへ戻る