IsValid 関数および cfparam タグによるデータの検証

IsValid 関数と cfparam タグは、フォーム変数だけではく、任意の ColdFusion MX 変数値を検証します。この関数とタグは ColdFusion サーバーのみに格納されるので、必須となる検証手順が確実に実行されるよう安全なメカニズムを提供することができます。ユーザーは、送信するフォームデータを変更して、チェックを回避することはできません。エラー処理コードですべての CFML シンタックスを使用できるので、この関数とタグを使って、ユーザーエラーに柔軟に対応することも可能です。

この 2 つの検証方法は次のとおり実行されます。

この 2 つの方法はどのような状況でも使用できます。どちらの方法を選択するかは、コーディングスタイルとプログラミング手法によって決定する必要があります。また、エラーが発生した場合に表示する具体的な情報によって決定することもできます。

例 : IsValid 関数の検証

次の例では、ユーザーが数値 ID および有効な電子メールアドレスと電話番号を送信したかどうかをチェックします。送信した値のいずれかが検証テストの基準を満たさない場合、ページにはエラーメッセージが表示されます。

<!--- アクションコード。まずフォームが送信されたことを確認します。 --->
<cfif isDefined("form.saveSubmit")>
   <cfif isValid("integer", form.UserID) and isValid("email", form.emailAddr) 
         and isValid("telephone", form.phoneNo)>
      <cfoutput>
         <!--- データベースを更新するアプリケーションコードがここに入ります --->
         <h3>ユーザー #Form.UserID# の電子メールアドレスと電話番号が 
            追加されました。</h3>
      </cfoutput>
   <cfelse>
      <H3>有効なユーザー ID、電話番号、電子メールアドレスを入力してください。</H3>
   </cfif>
   <cfelse>
</cfif>

<!--- フォーム。 --->
<cfform action="#CGI.SCRIPT_NAME#">
   ユーザー ID :<cfinput type="Text" name="UserID"><br>
   電話番号 :<cfinput type="Text" name="phoneNo"><br>
   電子メール :<cfinput type="Text" name="emailAddr"><br>
   <cfinput type="submit" name="saveSubmit" value="Save Data"><br>
</cfform>

例 : cfparam タグによる検証

次に示す 2 つの例は、cfparam タグを使用して、例 : IsValid 関数の検証 と同じテストを実行します。次の例では、ユーザーが数値 ID および有効な電子メールアドレスと電話番号を送信したかどうかをチェックします。送信した値のいずれかが検証テストの基準を満たさない場合、ColdFusion は式の例外を返します。

最初の例ではエラーは、cferror タグで指定した "exprerr.cfm" ページにより処理されます。このとき複数のエラーが発生した場合でも、1 つのエラーだけが表示されます。

2 番目の例では、無効なフィールドはそれぞれ、個別の try/catch ブロックで処理されます。この場合、ユーザーは各エラーに関する情報を取得します。

エラー処理ページの使用

自己投稿フォームとアクションぺージは次のようになります。

<!--- ページのアクションパート。 --->
<!--- 式の例外が発生している場合、"expresser.cfm" ページを実行します。 --->
<cferror type="EXCEPTION" exception="expression" template="expresserr.cfm">
<!--- フォームが送信されたことを確認します。 --->
<cfif isDefined("form.saveSubmit")>
<!--- cfparam タグを使って、フォームフィールドのデータタイプをチェックします。 --->
      <cfparam name="form.emailAddr" type="email">
      <cfparam name="form.UserID" type="integer">
      <cfparam name="form.phoneNo" type="telephone">
   <!--- データベースを更新するアプリケーションコードがここに入ります --->
   <cfoutput>
      <h3>ユーザー #Form.UserID# の電子メールアドレスと電話番号が 
         追加されました。</h3>
   </cfoutput>
</cfif>

<!--- フォーム。 --->
<cfform action="#CGI.SCRIPT_NAME#">
   ユーザー ID :<cfinput type="Text" name="UserID"><br>
   電話番号 :<cfinput type="Text" name="phoneNo"><br>
   電子メール :<cfinput type="Text" name="emailAddr"><br>
   <cfinput type="submit" name="saveSubmit" value="Save Data"><br>
</cfform>

"expresserr.cfm" ページは次のようになります。

<cfoutput>
   無効なデータを入力しました。<br>
   ブラウザの [戻る] をクリックして、再び実行してください。<br>
   #cferror.RootCause.detailMessage#
</cfoutput>

cftry タグおよび cfcatch タグの使用

自己投稿フォームとアクションぺージは次のようになります。

<!--- ブール値変数を使って、すべてのフィールドが適切かどうかを示します --->
<cfset goodData="Yes">
<!--- フォームが送信されたことを確認します。 --->
<cfif isDefined("form.saveSubmit")>
<!--- ユーザー ID の値をテストするための cftry ブロック。 --->
   <cftry>
<!--- cfparam タグにより、フィールドのデータタイプをチェックします。 --->
      <cfparam name="form.UserID" type="integer">
<!--- データが無効な場合、ColdFusion は式の例外を返します。 --->
<!--- 例外を取得して処理します。 --->
      <cfcatch type="expression">
         <!--- データの有効性を示すインジケーターを False に設定します。 --->
         <cfset goodData="No">
         <cfoutput>
            無効なユーザー ID。<br>
            #cfcatch.detail#<br><br>
         </cfoutput>
      </cfcatch>
   </cftry>
<!--- 電子メールアドレスの値をテストするための cftry ブロック。 --->
   <cftry>
      <cfparam name="form.emailAddr" type="email">
      <cfcatch type="expression">
         <cfset goodData="No">
         <cfoutput>
            無効な電子メールアドレス。<br<
            #cfcatch.detail#<br><br>   
         </cfoutput>
      </cfcatch>
   </cftry>
<!--- 電話番号の値をテストするための cftry ブロック。 --->
   <cftry>
      <cfparam name="form.phoneNo" type="telephone">
      <cfcatch type="expression">
         <cfset goodData="No">
         <cfoutput>
            無効な電話番号。<br>
            #cfcatch.detail#<br><br>   
         </cfoutput>
      </cfcatch>
   </cftry>
   <!--- 有効性を示すインジケーターが検証 catch ブロックで False に設定されなかった場合に限り、
         この処理を実行します。 --->
   <cfif goodData>
      <!--- データベースを更新するアプリケーションコードがここに入ります。 --->
      <cfoutput>
         <h3>ユーザー #Form.UserID# の電子メールアドレスと電話番号が 
            追加されました。</h3>
      </cfoutput>
   </cfif> <!--- goodData が True です--->
</cfif> <!--- フォームは送信されました。 --->

<cfform action="#CGI.SCRIPT_NAME#" preservedata="Yes">
   ユーザー ID :<cfinput type="Text" name="UserID"><br>
   電話番号 :<cfinput type="Text" name="phoneNo"><br>
   電子メール :<cfinput type="Text" name="emailAddr"><br>
   <cfinput type="submit" name="saveSubmit" value="Save Data"><br>
</cfform>

ColdFusion MX 7 | ColdFusion MX 6.1 | ColdFusion MX* | ColdFusion 5* | フォーラム* | デベロッパーセンター | サポート情報 | バグ報告

バージョン7