次の内容の ColdFusion ページを作成します。
更新フォームの作成
更新フォームと挿入フォームの主な相違点は次のとおりです。
- 更新フォームでは、更新するレコードのプライマリキーを参照します。プライマリキーは、各レコードを一意に識別するデータベースの フィールド です。たとえば、従業員名と住所のテーブルでは、Emp_ID のみが各レコードに固有のフィールドです。
- 更新フォームでは、既存のレコードデータが表示されます。
更新フォームでプライマリキーを指定する最も簡単な方法は、更新するレコードのプライマリキーの値を持つ非表示入力フィールドを使用することです。この非表示フィールドで、更新するレコードを ColdFusion に指示します。
-
<html><head><title>更新フォーム</title></head><body><cfquery name="GetRecordtoUpdate" datasource="cfdocexamples">SELECT * FROM EmployeeWHERE Emp_ID = #URL.Emp_ID#</cfquery><cfoutput query="GetRecordtoUpdate"><table><form action="update_action.cfm" method="Post"><input type="Hidden" name="Emp_ID" value="#Emp_ID#"><br><tr><td>名:</td><td><input type="text" name="FirstName" value="#FirstName#"></td></tr><tr><td>姓:</td><td><input type="text" name="LastName" value="#LastName#"></td></tr><tr><td>部門番号:</td><td><input type="text" name="Dept_ID" value="#Dept_ID#"></td></tr><tr><td>開始日:</td><td><input type="text" name="StartDate" value="#StartDate#"></td></tr><tr><td>給与:</td><td><input type="text" name="Salary" value="#Salary#"></td></tr><tr><td>請負業者:</td><td><cfif #Contract# IS "Yes"><input type="checkbox" name="Contract" checked>Yes<cfelse><input type="checkbox" name="Contract">Yes</cfif></td></tr><tr><td> </td><td><input type="Submit" value="情報を更新"></td></tr></form></table></cfoutput></body></html><html> <head> <title>更新フォーム</title> </head> <body> <cfquery name="GetRecordtoUpdate" datasource="cfdocexamples"> SELECT * FROM Employee WHERE Emp_ID = #URL.Emp_ID# </cfquery> <cfoutput query="GetRecordtoUpdate"> <table> <form action="update_action.cfm" method="Post"> <input type="Hidden" name="Emp_ID" value="#Emp_ID#"><br> <tr> <td>名:</td> <td><input type="text" name="FirstName" value="#FirstName#"></td> </tr> <tr> <td>姓:</td> <td><input type="text" name="LastName" value="#LastName#"></td> </tr> <tr> <td>部門番号:</td> <td><input type="text" name="Dept_ID" value="#Dept_ID#"></td> </tr> <tr> <td>開始日:</td> <td><input type="text" name="StartDate" value="#StartDate#"></td> </tr> <tr> <td>給与:</td> <td><input type="text" name="Salary" value="#Salary#"></td> </tr> <tr> <td>請負業者:</td> <td><cfif #Contract# IS "Yes"> <input type="checkbox" name="Contract" checked>Yes <cfelse> <input type="checkbox" name="Contract">Yes </cfif></td> </tr> <tr> <td> </td> <td><input type="Submit" value="情報を更新"></td> </tr> </form> </table> </cfoutput> </body> </html>
<html> <head> <title>更新フォーム</title> </head> <body> <cfquery name="GetRecordtoUpdate" datasource="cfdocexamples"> SELECT * FROM Employee WHERE Emp_ID = #URL.Emp_ID# </cfquery> <cfoutput query="GetRecordtoUpdate"> <table> <form action="update_action.cfm" method="Post"> <input type="Hidden" name="Emp_ID" value="#Emp_ID#"><br> <tr> <td>名:</td> <td><input type="text" name="FirstName" value="#FirstName#"></td> </tr> <tr> <td>姓:</td> <td><input type="text" name="LastName" value="#LastName#"></td> </tr> <tr> <td>部門番号:</td> <td><input type="text" name="Dept_ID" value="#Dept_ID#"></td> </tr> <tr> <td>開始日:</td> <td><input type="text" name="StartDate" value="#StartDate#"></td> </tr> <tr> <td>給与:</td> <td><input type="text" name="Salary" value="#Salary#"></td> </tr> <tr> <td>請負業者:</td> <td><cfif #Contract# IS "Yes"> <input type="checkbox" name="Contract" checked>Yes <cfelse> <input type="checkbox" name="Contract">Yes </cfif></td> </tr> <tr> <td> </td> <td><input type="Submit" value="情報を更新"></td> </tr> </form> </table> </cfoutput> </body> </html>
-
このファイルに "update_form.cfm" という名前を付けて保存します。
-
ページ URL および従業員 ID を指定して、"update_form.cfm" を Web ブラウザで表示します。たとえば、*http://localhost/myapps/update_form.cfm?Emp_ID=3 のように入力します。*
このページでは従業員の情報を表示できますが、データベースを更新するにはアクションページを作成します。詳細については、データを更新するアクションページの作成を参照してください下に。
コードの説明
このコードおよびその機能について、次の表で説明します。
コード |
説明 |
---|---|
<cfquery name="GetRecordtoUpdate" datasource="cfdocexamples"> |
cfdocexamples データソースにクエリーを実行して、このページを呼び出した URL で指定されている従業員 ID に一致するレコードを返します。 |
<cfoutput query="GetRecordtoUpdate"> |
GetRecordtoUpdate クエリの結果を、この後のフォームで変数として使用できるようにします。 |
<form action="update_action.cfm" method="Post"> |
「update_action.cfm」アクションページに渡す変数を設定するフォームを作成します。 |
<input type="Hidden" name="Emp_ID" value="#Emp_ID#"><br> |
非表示入力フィールドを使用して、Emp_ID (プライマリキー) の値をアクションページに渡します。 |
名: |
更新フォームのフィールドにデータを設定します。この例では、ColdFusion の形式設定関数を使用していません。したがって、開始日は 1985-03-12 00:00:00 のように表示され、給与には通貨記号やカンマが追加されません。ユーザーは、有効なデータ入力方法を利用して任意のフィールドの情報を変更できます。 |
請負業者: |
「請負業者」フィールドではチェックボックスを表示して値を設定するので、特殊な処理が必要です。cfif 構文を使用して、「請負業者」フィールドの値が Yes であればチェックボックスをオンにします。Yes でなければ無効のままにします。 |
データを更新するアクションページの作成
cfupdate による更新アクションページの作成
cfupdate タグは、フロントエンドフォームのデータに基づいて単純な更新を行う場合に便利です。cfupdate タグのシンタックスは、cfinsert タグとほとんど同じです。
cfupdate タグを使用するには、フォームから送信するデータにプライマリキーフィールドを含めます。cfupdate タグによって、更新するテーブルのプライマリキーフィールドが自動的に検出されると、受信したフォームフィールドの中からプライマリキーフィールドが検索され、それに基づいて更新するレコードが選択されます (したがって、プライマリキー自体を更新することはできません)。その後、残りのフォームフィールドを使用して、レコード内の対応するフィールドが更新されます。フォームに必要なフィールドは、変更するデータベースフィールドに対応するフィールドのみです。
-
次の内容の ColdFusion ページを作成します。
<html><head><title>従業員の更新</title></head><body><cfif not isdefined("Form.Contract")><cfset form.contract = "N"><cfelse><cfset form.contract = "Y"></cfif><cfupdate datasource="cfdocexamples" tablename="EMPLOYEE"><h1>従業員が更新されました</h1><cfoutput>従業員データベースで #Form.FirstName# #Form.LastName# の情報を更新しました。</cfoutput></body></html><html> <head> <title>従業員の更新</title> </head> <body> <cfif not isdefined("Form.Contract")> <cfset form.contract = "N"> <cfelse> <cfset form.contract = "Y"> </cfif> <cfupdate datasource="cfdocexamples" tablename="EMPLOYEE"> <h1>従業員が更新されました</h1> <cfoutput> 従業員データベースで #Form.FirstName# #Form.LastName# の情報を更新しました。 </cfoutput> </body> </html><html> <head> <title>従業員の更新</title> </head> <body> <cfif not isdefined("Form.Contract")> <cfset form.contract = "N"> <cfelse> <cfset form.contract = "Y"> </cfif> <cfupdate datasource="cfdocexamples" tablename="EMPLOYEE"> <h1>従業員が更新されました</h1> <cfoutput> 従業員データベースで #Form.FirstName# #Form.LastName# の情報を更新しました。 </cfoutput> </body> </html>
-
このページに "update_action.cfm" という名前を付けて保存します。
-
ページ URL および従業員 ID を指定して、"update_form.cfm" を web ブラウザーで表示します。たとえば、*http://localhost/myapps/update_form.cfm?Emp_ID=3 のように入力します。*
-
いずれかのフィールドに新しい値を入力し、「情報の更新」をクリックします。ColdFusion は、新しい値を使用して「従業員」テーブル内のレコードが更新され、確認メッセージを表示します。
コードの説明
このコードおよびその機能について、次の表で説明します。
コード |
説明 |
---|---|
<cfif not isdefined("Form.Contract")> |
Form.Contract の値が定義されていない場合は値を No に設定し、定義されていれば Yes に設定します。「請負業者」チェックボックスがチェックされていない場合は、アクションページにデータが渡されませんが、データベースフィールドには何らかの値が必要です。 |
<cfupdate datasource="cfdocexamples" tablename="EMPLOYEE"> |
フォームのプライマリキー (Emp_ID) に一致するデータベースレコードを更新します。フォームコントロールと同じ名前を持つレコードフィールドがすべて更新されます。 |
<cfoutput> |
変更が行われたことをユーザーに通知します。 |
cfquery による更新アクションページの作成
-
"update_action.cfm" の cfupdate タグを、次のハイライト表示されている部分に置き換えます。
<html><head><title>従業員の更新</title></head><body><cfif not isdefined("Form.Contract")><cfset form.contract = "No"><cfelse><cfset form.contract = "Yes"></cfif><! ---cfquery では、Acess から取得する際に日付形式を設定する必要があります。Access データベースから最初に表示された日付の ".0" をトリミングするには、left 関数を使用します。---><cfquery name="UpdateEmployee" datasource="cfdocexamples">UPDATE EmployeeSET FirstName = '#Form.Firstname#',LastName = '#Form.LastName#',Dept_ID = #Form.Dept_ID#,StartDate = '#left(Form.StartDate,19)#',Salary = #Form.Salary#WHERE Emp_ID = #Form.Emp_ID#</cfquery><h1>従業員が更新されました</h1><cfoutput>従業員データベースで#Form.FirstName# #Form.LastName#の情報を更新しました。</cfoutput></body></html><html> <head> <title>従業員の更新</title> </head> <body> <cfif not isdefined("Form.Contract")> <cfset form.contract = "No"> <cfelse> <cfset form.contract = "Yes"> </cfif> <! ---cfquery では、Acess から取得する際に日付形式を設定する必要があります。Access データベースから最初に表示された日付の ".0" をトリミングするには、left 関数を使用します。---> <cfquery name="UpdateEmployee" datasource="cfdocexamples"> UPDATE Employee SET FirstName = '#Form.Firstname#', LastName = '#Form.LastName#', Dept_ID = #Form.Dept_ID#, StartDate = '#left(Form.StartDate,19)#', Salary = #Form.Salary# WHERE Emp_ID = #Form.Emp_ID# </cfquery> <h1>従業員が更新されました</h1> <cfoutput> 従業員データベースで #Form.FirstName# #Form.LastName# の情報を更新しました。 </cfoutput> </body> </html><html> <head> <title>従業員の更新</title> </head> <body> <cfif not isdefined("Form.Contract")> <cfset form.contract = "No"> <cfelse> <cfset form.contract = "Yes"> </cfif> <! ---cfquery では、Acess から取得する際に日付形式を設定する必要があります。Access データベースから最初に表示された日付の ".0" をトリミングするには、left 関数を使用します。---> <cfquery name="UpdateEmployee" datasource="cfdocexamples"> UPDATE Employee SET FirstName = '#Form.Firstname#', LastName = '#Form.LastName#', Dept_ID = #Form.Dept_ID#, StartDate = '#left(Form.StartDate,19)#', Salary = #Form.Salary# WHERE Emp_ID = #Form.Emp_ID# </cfquery> <h1>従業員が更新されました</h1> <cfoutput> 従業員データベースで #Form.FirstName# #Form.LastName# の情報を更新しました。 </cfoutput> </body> </html>
-
このページを保存します。
-
ページ URL および従業員 ID を指定して、"update_form.cfm" を web ブラウザーで表示します。たとえば、*http://localhost/myapps/update_form.cfm?Emp_ID=3 のように入力します。*
-
いずれかのフィールドに新しい値を入力し、「情報の更新」をクリックします。ColdFusion は、新しい値を使用して「従業員」テーブル内のレコードが更新され、確認メッセージを表示します。
cfquery タグによって、Microsoft Access データベースから日付情報が取得されると、次のように日付と時刻が 0.1 秒単位で表示されます。