注文確定処理の実装
それでは、注文確定処理を実装します。サンプルソースのSTEP1フォルダの中に、先ほど<form>タグを追加したcart.phpが入っているので、メモ帳などで開いてください。70行目と71行目の間に、以下のプログラムを挿入してください。
/**-----------------------------------------------------------
*
* リクエスト cmd の中身が、「commit_order」であった場合の処理。
* カート画面で「注文確定」ボタンが押された時に処理を行う。
* 注文確定ボタンはログイン済の時のみ、表示される。
*
------------------------------------------------------------*/
if( $_REQUEST["cmd"] == "commit_order" )
{
// カート内の合計金額を計算する。
foreach( $_SESSION["cart"] as $cart )
{
$total_price += $cart["price"] * $cart["num"];
}
// d_purchase テーブルへの挿入
$sql = " insert into d_purchase( customer_code, purchase_date, total_price) ";
$sql.= " values( ?, now(), ? ) ";
$stmt = $mdb2->prepare( $sql );
$res = $stmt->execute(
array(
$_SESSION["customer_code"],
$total_price
)
);
// d_purchase テーブルに挿入した ID を取得。
$order_id = $mdb2->lastinsertid("d_purchase","order_id");
// $_SESSION["cart"] をもう一度ループし、ループ内で詳細情報を取得して
// から d_purchse_detail に insert する。
foreach( $_SESSION["cart"] as $cart )
{
$sql = " insert into d_purchase_detail( order_id, item_code, price, num ) ";
$sql.= " values( ?, ?, ?, ? ) " ;
$stmt = $mdb2->prepare( $sql );
$res = $stmt->execute(
array(
$order_id,
$cart["item_code"],
$cart["price"],
$cart["num"]
)
);
}
unset( $_SESSION["cart"] );
// $is_order_done 変数は、画面上に「注文が完了しました」
// メッセージを表示するために使用する。
$is_order_done = 1;
}
また、141行目あたりの
<h2>カートの中</h2>
と書かれている部分がありますが、この表記の下にプログラムを挿入し、次のように変更してください。
<?php
if( $is_order_done == 1 )
{
?>
<br>
注文が完了しました。<a href="item_list.php">商品一覧へ戻る</a>
<br>
<?php
}
?>
ファイルの編集が完了したら、C:\xampp\ec以下に上書き保存しておきましょう。
それでは、動作確認をしてみましょう。まず、購入前のデータベースの状態を確認します。http://localhost/phpmyadmin/にアクセスし、左メニューにあるデータベース[ec]をクリックします。[d_purchase]を選択した後、上のツールバーから[表示]をクリックします。
同じ手順で、d_purchase_detailに入っているレコードの内容も確認しておいてください。
確認したら、ECサイトにアクセスしましょう。http://localhost/ec/item_list.phpにアクセスし、商品をいくつかカート内に入れ、注文確定ボタンをクリックしてみてください。
ログインしていない状態では、注文確定ボタンが表示されません。ユーザー登録画面から自身でIDとパスワードを登録するか、ID、パスワードいずれも「ooie」でログインしてください。
注文が完了したら、再び先ほどと同じ手順でデータベースの中身を確認してみましょう。d_purchaseとd_purchase_detailテーブルに無事、レコードが追加されているでしょうか?
もしうまくいかない場合は、サンプルソースのSTEP2フォルダに実装済みのファイルが入っているので、こちらを使用して再度試してみてください。


