掲載誌情報
掲載誌 Web Creators 2002/03
タイトル ColdFusion入門/ショッピングサイト構築 第4回
第1回 第2回 第3回 第4回

3) 注文個数の変更
     
  3)-1. 商品管理番号と変更前の注文個数を保持する
    ショッピングカートの内容を確認するために、クエリ「M_CartQry」を出力した。そのクエリを出力するcfoutputタグ内に、変数(ListItemID、 BeforeItemPeaces)を追加する。それらの変数に商品管理番号(M_CartQry.ItemID)と変更前の注文個数(M_CartQry.ItemPeaces)をセットする。
cart.cfm 434行目、436行目
<input type="hidden" name="ListItemID" value="#M_CartQry.ItemID#">
<input type="hidden" name="BeforeItemPeaces" value="#M_CartQry.ItemPeaces#">
  3)-2. 変更前と変更後の注文個数の確認
    「変更する」ボタンをクリックすると、cart.cfmは、FORM変数(FORM.ListItemID、 FORM.BeforeItemPeaces)と、注文個数入力エリアの値(FORM.ItemPeaces)を受け取る。
複数の商品が注文されている場合、受け取ったFORM変数には、複数の商品情報がカンマ区切りでセットされている。これをリストと呼ぶ。まず、注文されている商品は何種類なのか、ListLen関数を使用しながら見てみよう。

ListLen関数
構文: ListLen(list)
意味: listは任意のリスト。リスト内の要素の数 を返す。
ListLen(FORM.ListItemID)

商品の数を取得したら、その数だけ処理を繰り返す。処理を繰り返すにはcfloopタグを使用する。

cfloopタグ
構文: <cfloop from="開始値" to="終了値" index="パラメータ名" step="ステップ値">
 HTML および CFMLタグ
</cfloop>
意味: (1)indexについて
  必須項目である。
  設定したパラメータ名でcfloopタグ間で値を参照出来る。
(2)fromについて
  必須項目である。
  インデックスの開始値である。
(3)toについて
  必須項目である。
  インデックスの終了値である。
(4)stepについて
  オプションである。
  既定値は1である。
  ループが処理されるたびにループのindex値を加算する値を設定する。
cart.cfm 62行目〜97行目
<cfloop from="1" to="#ListLen(FORM.ListItemID)#" index="i">
</cfloop>

次にその商品の変更前と変更後の注文個数を確認する。複数の商品の場合、一個ずつ商品を取り出して、注文個数を確認する。
一個ずつ商品を取り出すには、cfloopタグのインデックスをListGetAt関数のpositionに指定する。ListGetAt関数により返された値を変数を新たに作成し、セットする。

ListGetAt関数
構文: ListGetAt(list, position)
意味: listは任意のリストである。positionの位置にある要素の値を返す。
cart.cfm 64行目、67行目、70行目
<cfset ItemID=ListGetAt(#FORM.ListItemId#,#i#)>
<cfset Peace=ListGetAt(#FORM.ItemPeaces#,#i#)>
<cfset BeforePeace=ListGetAt(#FORM.BeforeItemPeaces#,#i#)>

上記のようにcfsetタグを使用すれば、変数が作成され値をセットできる。
  3)-3. ショッピングカート管理テーブル「T_Cart」の注文個数の変更
    上記の新たに作成された変数の、変更前注文個数(BeforePeace)と変更後注文個数(Peace)を比較する。変更されていたら、SQLのUPDATEを利用してデータベースの値を変更する。比較するためにはCompare関数を使用する。

Compare関数
構文: Compare(substring1, substring2)
意味: substring1、 substring2は比較する文字列。substring1がsubstring2と等しい場合は 0 を返す。
cart.cfm 85行目〜91行目
<cfif Compare(Peace, BeforePeace) is not 0>
 <cfquery name="UpdPeaces_CartQry" datasource="shopping">
  UPDATE T_Cart set ItemPeaces = #Peace#
  WHERE CartID = '#Cookie.CreateUUID#'
  AND ItemID = #ItemID#
 </cfquery>
</cfif>
  4) 注文をキャンセルする
    注文をキャンセルした場合、ショッピングカート、SQLのDELETE文を使用する。
cart.cfmは「削除」ボタンがクリックされたら、商品の商品管理番号(ItemID)をFORM変数「FORM. DelItemID」として受け取る。受け取ったFORM変数を削除する条件に指定する。
cart.cfm 85行目〜91行目
<cfquery name="DeleteCartQry" datasource="shopping">
 DELETE FROM T_Cart
 WHERE CartID = '#Cookie.CreateUUID#'
 AND ItemID = #FORM.DelItemID#
</cfquery>
  5) 購入手続へ
    ショッピングカート画面は、「変更」ボタンや「削除」ボタンがクリックされたときに同じファイル(cart.cfm)に遷移するように指定している。「購入手続へ」ボタンがクリックされたときのみinput.cfmへ遷移するためには次のように記述する。
cart.cfm 93行目〜95行目
<cfif 購入ボタンがクリックされたら>
 <cflocation url="input.cfm" addtoken="No">
</cfif>
(<cflocation url=“遷移先のファイル名" addtoken="No">)

BACK NEXT
PAGETOP
CLOSE