演習 6: 編集フォームへの値の挿入

ユーザーが [Add] ボタンをクリックすると、引数が渡されずに "maintenanceaction.cfm" ページから "tripedit.cfm" ページに移動することに注意してください。逆に、ユーザーが [Edit] ボタンをクリックすると、Trip Edit ページから現在のレコード ID が渡されます。Trip Edit ページはどちらの場合も処理しなければなりません。URL に RecordID が渡された場合、"tripedit.cfm" でデータベースのクエリーを実行し、対応する旅行のデータをフォームに入力する必要があります。

編集フォームに値を挿入するには :

  1. エディタで "tripedit.cfm" ファイルを開きます。
  2. ファイルの一番上に表示される cfquery ブロックの後に次のコードを入力するか、コピー & ペーストします。
    <cfif IsDefined("URL.ID")>
    	<cfquery name="TripQuery" datasource="CompassTravel" maxrows="1">
    		SELECT tripName, eventType, tripDescription, tripLocation, 	
    		departureDate, returnDate, price, tripLeader, photo, baseCost,
    		numberPeople, depositRequired, tripID 
    		FROM trips				
    	<cfif IsDefined("URL.ID")>
    		WHERE tripID = #url.ID#
    	</cfif>
    	</cfquery>
    <!-- ローカル変数の設定 -->		
    	<cfset tripName = '#TripQuery.tripName#'>		
    	<cfset eventType = '#TripQuery.eventType#'>		
    	<cfset tripDescription = '#TripQuery.tripDescription#'>		
    	<cfset tripLocation = '#TripQuery.tripLocation#'>		
    	<cfset departureDate = DateFormat(#TripQuery.departureDate#,
    		"mm/dd/yyyy")>		
    	<cfset returnDate = DateFormat(#TripQuery.returnDate#,"mm/dd/yyyy")>		
    	<cfset price = #TripQuery.price#>		
    	<cfset tripLeader = '#TripQuery.tripLeader#'>		
    	<cfset photo = '#TripQuery.photo#'>		
    	<cfset baseCost = #TripQuery.baseCost#>		
    	<cfset numberPeople = #TripQuery.numberPeople#>		
    	<cfif isDefined("TripQuery.depositRequired")>
    		<cfset depositRequired = 'Yes'>
    		<cfelse>
    		<cfset depositRequired = 'No'>
    	</cfif>
    <cfelse>
    	<cfset tripName = ''>		
    	<cfset tripDescription = ''>		
    	<cfset eventTypeIdentifier = #GetEvents.eventType#>
    	<cfset tripLocation = ''>		
    	<cfset departureDate =  ''>		
    	<cfset returnDate = ''>		
    	<cfset price = ''>		
    	<cfset tripLeader = ''>		
    	<cfset photo = ''>		
    	<cfset baseCost = ''>		
    	<cfset numberPeople = ''>		
    	<cfset depositRequired = 'Yes'>
    </cfif>
    
  3. フォームに適切な値を表示するには、次の表で強調表示されているコードを挿入します。

    メモ: ユーザーが [Add] ボタンをクリックすると、現在表示されている旅行の詳細の値がフォームに表示されます。これ以外の場合、イベントタイプフィールドの値を除くすべての値が空白で表示されます。

  4. ファイルを保存します。
    コード 説明
    <TD><cfinput name= "tripName" 
       maxlength = "50" 
       size = "50" 
       required = "Yes" 
       value="tripName"
       message = "Trip name must not be blank">
    </TD>
    

    ID が定義されていない場合には、旅行名の値を空白に設定します。それ以外の場合は、「Trip Detail」ページに表示される旅行名と同じ値を設定します。

    <TD><cftextarea name="tripDescription" 
       required="Yes" 
       message="Trip description must not be blank.">
       value="#tripDescription#"
       </cftextarea>
    </TD>
    

    ID が定義されていない場合には、旅行の説明の値を空白に設定します。それ以外の場合は、「Trip Detail」ページに表示される旅行の説明と同じ値を設定します。

    <td><cfselect size="1" name="eventType" required="Yes" 
       message="Type of event must be selected.">
       <cfoutput query="GetEvents">
          <option value= "#GetEvents.eventTypeID#">#GetEvents.eventType#
       </option>
       </cfoutput>
    </cfselect>
    </td>
    
    

    イベントタイプの値にイベントリストを設定します。

    <TD><cfinput size="50" name="tripLocation" 
       required="Yes"
       value="#tripLocation#"
       message="Trip location must not be blank.">
    </TD>
    

    ID が定義されていない場合には、旅行先の値を空白に設定します。それ以外の場合は、「Trip Detail」ページに表示される旅行先と同じ値を設定します。

    <TD><cfinput name="departureDate" 
       size="10"
       required="Yes" 
       validate="date" 
       value="#departureDate#"
       message="Departure date must be a valid date.">
    </TD>
    

    ID が定義されていない場合には、出発日の値を空白に設定します。それ以外の場合は、「Trip Detail」ページに表示される出発日と同じ値を設定します。

    <TD><cfinput name="returnDate"
       size="10" 
       required="Yes" 
       validate="date" 
       value="#returnDate#"
       message="Return date must be a valid date.">
    </TD>
    

    ID が定義されていない場合には、帰着日の値を空白に設定します。それ以外の場合は、「Trip Detail」ページに表示される帰着日と同じ値を設定します。

    <TD><cfinput name="numberPeople" 
       size="6"
       required="Yes" 
       validate="integer" 
       value="#numberPeople#"
       message="The number of people field must be a number and cannot be blank.">
    </TD>
    

    ID が定義されていない場合には、人数の値を空白に設定します。それ以外の場合は、「Trip Detail」ページに表示される人数と同じ値を設定します。

    <TD><cfinput name="price"
       size="10" 
       required="Yes" 
       validate="integer" 
       value="#price#"
       message="Price is required and must be numeric.">
    </TD>
    

    ID が定義されていない場合には、旅行価格の値を空白に設定します。それ以外の場合は、「Trip Detail」ページに表示される旅行価格と同じ値を設定します。

    <TD><cfinput name="baseCost"
       size="10" 
       required="Yes" 
       validate="integer" 
       value="#baseCost#"
       message="Base cost is required and must be numeric.">
    </TD>
    

    ID が定義されていない場合には、ベースコストの値を空白に設定します。それ以外の場合は、「Trip Detail」ページに表示されるベースコストと同じ値を設定します。

    <TD><cfinput name="depositRequired"
       type="checkbox" 
       value="#depositRequired#" >
    </TD>
    

    ID が定義されていない場合には、必要預託金の値を "Yes" に設定します。それ以外の場合は、「Trip Detail」ページに表示される必要預託金と同じ値を設定します。

    <TD><cfinput name="tripLeader"
       maxlength="50" size="50" 
       required="Yes" 
       value="#tripLeader#"
       message="A trip leader must be specified."></TD>
    

    ID が定義されていない場合には、旅行リーダーの値を空白に設定します。それ以外の場合は、「Trip Detail」ページに表示される旅行リーダーと同じ値を設定します。

    <TD><cfinput name="photo"
       maxlength="50" size="50" 
       required="Yes" 
       value="#photo#"
       message="Valid photo file name must be specified.">
    </TD>
    

    ID が定義されていない場合には、フォトの値を空白に設定します。それ以外の場合は、「Trip Detail」ページに表示されるフォトと同じ値を設定します。

コードの確認

次の表は、Trip Edit フォームを正しく初期化するために使用されるコードについて説明します。

コード 説明
<cfif IsDefined("URL.ID")>
<cfquery name="TripQuery" datasource="CompassTravel"
maxrows="1"> SELECT tripName, eventType, tripDescription,
tripLocation, departureDate, returnDate, price,
tripLeader, photo, baseCost, numberPeople,
depositRequired, tripID FROM trips <cfif IsDefined("URL.ID")> WHERE tripID = #ID# </cfif> </cfquery> <!--- ローカル変数の設定 ---> <cfset tripName = '#TripQuery.tripName#'> <cfset eventType = #TripQuery.eventType#> <cfset tripDescription = TripQuery.tripDescription#'> <cfset tripLocation = '#TripQuery.tripLocation#'> <cfset departureDate = DateFormat(#TripQuery.departureDate#,"mm/dd/yyyy")> <cfset returnDate = DateFormat(#TripQuery.returnDate#,"mm/dd/yyyy")> ... <cfelse> <cfset tripName = ''> <cfset eventType = ''>

...

</cfif>

 

ColdFusion の IsDefined 関数は、呼び出す URL の一部として ID の引数が渡されたかどうかを判別します。

ID が渡されると、この ID は、現在の旅行情報を取り出す SQL の SELECT ステートメントの WHERE 節に使用されます。次に、アプリケーションが SQL クエリーの結果からローカル変数のインスタンスを生成します。

ColdFusion の DateFormat 関数により、日付フィールドの形式が設定されます。

 

 

ユーザーが [Add] ボタンをクリックして新規旅行を追加する場合、URL 引数として ID は渡されません。この場合、ローカル変数のインスタンスは空白になります。

編集されたコードをテストするには :

  1. ブラウザで "tripdetail.cfm" ページを開きます。
  2. 次の作業を行います。
    1. [Edit] ボタンをクリックします。
    2. 現在の旅行の価格をダブルクリックします。
    3. [Save] をクリックします。

このレッスンでは、テーブルのデータの削除、更新、および追加を実行するために、SQL DELETE ステートメント、cfinsert タグ、および cfupdate タグを使用しました。


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

バージョン7

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/coldfusion/7_jp/htmldocs/db_main7.htm