「簡易オンラインストア」の修正
さていよいよ今回の本題です。「簡易オンラインストア」をDTO・DAOパターンを使って修正し、「簡易在庫管理システム」と統合します。処理を行う各ファイルとDAOとの関係は図1のようになります。
処理を行うmenu.php/confirm.php/purchase.phpの働きは以下のようになります。第5回で紹介している「簡易オンラインストア」の各ファイルの働きと比べ、機能上の大きな変更点はありません。
- menu.php
- カウントデータをMySQLのcountテーブルのmax_noカラムから読み込み注文番号を生成する
- 注文番号をセッション変数に格納
- カウントデータ読み込み後、カウント値を+1しmax_noカラムを更新する
- confirm.php
- 注文番号をセッション変数から$_SESSION["order_id"]で取得。注文番号がセットされていなければ強制終了
- 選択された各アイテムのidや個数を$_POST[]から取得し、DTO「Order_item」クラスにセットする。さらに「Order_item」クラスを配列化し、セッションオブジェクトに格納する。
- 氏名・郵便番号・住所を$_POST["name"],$_POST["zip_code"],$_POST["address"]に格納
- purchase.php
- 注文番号をセッション変数から$_SESSION["order_id"]で取得。注文番号がセットされていなければ強制終了。氏名・郵便番号・住所を$_POST[]変数から取得する。
- セッションオブジェクトから配列化されたDTO「Order_item」クラスを取り出し、配列を各Order_itemクラスに展開する。セッションオブジェクトにセットされていなければ強制終了。
- Order_itemクラスから注文を受けた各アイテムのidや個数を取り出す。そのほか注文番号・日付を付加する
- 受注データを2つのテーブルに登録
注文番号/現在日時/氏名/住所データはorder_mainテーブルに
注文番号/現在日時/アイテム名/個数はorder_itemテーブルに挿入 - order_mainテーブルとorder_itemテーブルへのデータ挿入は、トランザクションを使用し、データに一貫性を持たせる
menu.phpの修正
まずmenu.phpに修正を加えます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
注文番号の生成/取得にはCountDaoクラスを使用するよう修正を加えます(8〜13行目)。CountDaoクラスのcurrVal()メソッドを使用することで(12行目)、現在値を取り出し、インクリメントした値でアップデートを行うことができます。
次に、ItemDaoを使用し商品名/商品id/在庫数/値段を取得します。この際商品の注文数をドロップダウンリストから選択できるよう、在庫数分の<select><option>...</select>を生成します。生成にはoptionList()関数を用意し、使用します(93〜107行目)。その際optionList()では在庫数が0を下回った場合に「売り切れ」と表示します。
フォーム内に商品アイテムを表示する際、在庫アイテムをリアルタイムに表示できるようItemDaoクラスを利用し、MySQLの「item」テーブルから値を取得し、表示しています(46〜71行目)。
50行目の「foreach($item_dao->getAllItem() as $item){」ではItemDaoクラスのgetAllItem()メソッドで「item」テーブルから全データを取得し、foreachを使用して、商品アイテムの数だけ商品データをDTOであるitemクラスに展開します。
商品アイテムの詳細を得るには「$item->getId()」のようにDTOのゲッターを使用します。menu.phpで注文を受け付ける際、個数に1以上が選択された商品アイテムを、商品idを変数名、その個数を値となるよう_$POSTを利用し、confirm.phpに引き渡します。
Copyright © ITmedia, Inc. All Rights Reserved.