フォームの項目名に_dateや_timeで終わるものがあるとSUBMIT時にエラーが発生する場合がある

ColdFusionのCFFORM機能(CFFORM,CFINPUT,CFSELECT,CFTEXTAREAタグ)は、HTMLのフォーム機能を拡張し、JavaScriptやColdFusionサーバー側で入力必須や値の検証の機能を利用することができます。

現在では、HTML5のフォーム機能で同様の入力チェックが行えるため、今後新たにフォームのページを作成される際には、CFFORM機能は必須ではないかと思いますが、以前のバージョンで動かしていたプログラムを新しいバージョンでも使用する場合には、いまでもCFFORM機能は使用されているかと思います。

ただし、この値の検証機能によって、思わぬエラーが発生する可能性があります。それは、フォームフィールド(入力欄)に付ける名前が、ColdFusionによって予約されている名前を含んでしまうと、サーバーサイドの検証機能が動いてしまう場合があります。

例えば、下記のような記述をすると
<cfform>
<cfinput name="p1" validate="date" value="" message="正しい日付を入力してください" validateAt="onServer">
</cfform>

ブラウザには、以下のようなコードが戻されます
<input name="p1" id="p1"  type="text" value="" />
<input type='hidden' name='p1_CFFORMDATE' value='正しい日付を入力してください'>

隠しフィールド(<input type="hidden")が追加されています。ColdFusionは、Form変数として渡されてきた項目名に、サーバーサイドで検証する物が含まれていると、処理の最初にルールに載った検証を行います

https://help.adobe.com/ja_JP/ColdFusion/10.0/Developing/coldfusion_10_dev.pdf

(P.33 予約語)※PDF内のページ:39
また、次の語句のいずれかで終わるフォームフィールド名も作成しないでください。ただし、非表示フォームフィールド名を使用してフォームフィールドの検証ルールを指定する場合は例外です。フォームフィールド検証の詳細については、692ページの「データの取得および形式設定の概要」を
参照してください。
• _integer
• _float
• _range
• _date
• _time
• _eurodate
 

※上記の例では、p1_CFFORMDATEというhiddenフォームが自動生成されますが、過去のバージョンでは、名前_dateというhiddenフォームが自動で作成されていました。


そのため、

<input type="text" name="p2_date" ..> や <input type="text" name="p3_time" ...>

などのフィールドを指定していると、その名前でフォームを送信した際に、ColdFusionによって、p2の値を日付形式かチェックしたりp3の値が時間形式かをチェックするような処理が行われてしまい、予期しないエラーとなる場合があります。

フォームを使用する際には、フォームフィールドに指定する名前にご注意ください。尚、Application.cfm や Application.cfc で、このサーバーサイド検証の機能を無効化することができます。運用されるアプリケーションではサーバーサイドの検証は行う必要が無いということであれば、機能を無効にしてください。

 


記事公開日:2022年03月30日
最終更新日:2022年03月30日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.