今回は、前回よりもちょっと複雑な入力フォームです。
こちらをクリックしてください。
「ふむふむ。よく見かけるぞ!」
と思われたでしょう。
では、都道府県の選択、誕生日の選択はどんな書き方でしょうか?
もちろんhtmlで書くことはできますが、
都道府県47個、誕生日の年100個なんて、大変大変。
場合によっては、
「都道府県の並びを変えて!」
とか
「都道府県の最初の表示を大阪にして」
とか、
お客様に変更依頼をされることがあります。
せっせとエディタでカットアンドペーストでやりますか?
こんな入力フォームがたくさんあったら、
もう大変ですね。
<cfset title="フォーム入力テスト2"> <cfset tdfk="北海道,青森県,岩手県,宮城県,秋田県,山形県,福島県,茨城県,栃木県,群馬県,埼玉県,千葉県,東京都,神奈川県,新潟県,富山県,石川県,福井県,山梨県,長野県,岐阜県,静岡県,愛知県,三重県,滋賀県,京都府,大阪府,兵庫県,奈良県,和歌山県,鳥取県,島根県,岡山県,広島県,山口県,徳島県,香川県,愛媛県,高知県,福岡県,佐賀県,長崎県,熊本県,大分県,宮崎県,鹿児島県,沖縄県"> <!---解説 tdfkという変数に都道府県をセットしています。 実際のプログラムでは都道府県がセットされています。 長くなるので抜粋しました。 「,」で区切ってありますが、 ColdFusionではリストと呼んでいます。 都道府県の並び順は、ここで変えれば OKです。 ---> <cfoutput> <html> <head> <title>#title#</title> </head> <body> ■#title#<br><br> <cfif IsDefined("url.chk")> <cfif url.chk eq "ok"> <!---解説 「url.chk変数がokである場合は?」です。 「eq」はイコールを意味します。 「eq」の代わりに「is」も使うことができます。 否定の場合は「neq」または「is not」です。 ここで演算子を整理すると 演算子 代替名 ---------------------------------------------- IS EQUAL,EQ IS NOT NOT EQUAL,NEQ GREATER THAN GT LESS THAN LT GREATER THAN OR EQUAL TO GTE,GE LESS THAN OR EQUAL TO LTE,LE ---------------------------------------------- ちなみに、ColdFusionは大文字・小文字の区別はありません。 ---> 以下の内容が入力されました。<br> <br> ○名前<br> #form.my_name#<br> ○都道府県<br> #form.tdfk#<br> ○誕生日<br> #form.year#年#form.month#月#form.day#日<br> <!---解説 名前、都道府県、誕生日が表示されます。 前回の名前の表示方法と同じです。 ---> </cfif> <a href="index.cfm">もう一度入力する</a><br> <cfelse> 以下の内容を入力・選択してください。 <form action="index.cfm?chk=ok" method="post"> <!---解説 actionを見ると、「chk=ok」とあります。 これによってurl.chk変数が生成され、 okの値をセットします。 ---> ○名前<br> <input type="text" name="my_name"><br> ○都道府県<br> <select name="tdfk"> <cfloop index="i" list="#tdfk#"> <option value="#i#" <cfif i eq "東京都">selected</cfif> >#i#</option> </cfloop> <!---解説 cfloopタグは「繰り返し」です。 この場合、変数iを宣言し、tdfk変数を使用します。 #tdfk#とありますが、タグ内ではtdfkの内容が展開されます。 <cfloop index="i" list="北海道,青森,沖縄"> と書くことと同じです。 <cfif i eq "東京都">selected</cfif> とありますが、 iの値が「東京都」だった場合に selectedをつけます。 これによって最初の画面表示では、 「東京都」が最初に表示されます。 ---> </select> <br> ○誕生日<br> <cfset sele_year=dateformat(DateAdd("yyyy",-30,now()),"yyyy")> <!---解説 sele_year変数に、現在の西暦から30年前の年をセットします。 now()は、現在の日時を取得します。 DateAdd("yyyy",-30,now()) これで30年前の日時を取得します。 dateformatの指定で、年だけを取得します。 ---> <select name="year"> <cfloop index="i" from="#dateformat(dateAdd('yyyy',-100,now()),'yyyy')#" to="#dateformat(now(),'yyyy')#"> <option value="#i#" <cfif i eq sele_year>selected</cfif> >#i#</option> </cfloop> <!---解説 このcfloopは、変数iを宣言し、100年前の年から現在の年まで繰り返します。 <cfif i eq sele_year>selected</cfif> とありますが、これはiの値が30年前の年と同じだった場合にselectedをつける ということです。 ---> </select> 年 <select name="month"> <cfloop index="i" from="1" to="12"> <option value="#i#">#i#</option> </cfloop> <!---解説 このcfloopで、月を表示します。 ---> </select> 月 <select name="day"> <cfloop index="i" from="1" to="31"> <option value="#i#">#i#</option> </cfloop> <!---解説 このcfloopで、日を表示します。 ---> </select> 日<br> <input type="Submit" value="実行"> </form> </cfif> </body> </html> </cfoutput>