今回の作成範囲
今回の作成範囲を説明します。まず、第8回でC:\xampp\htdocs\ec_htmlフォルダを作成していない方は内容に沿って作成し、http://localhost/ec_html/item_list.phpにアクセスしてください。その後、適当な画像を選択し、[カートに入れる]をクリックすると、カート画面が表示されます。
前回の記事では、このカート画面での商品表示部分を作成しました。今回は、このECサイトの最後の機能である注文確定処理を作成します。具体的には[注文確定]をクリックした時に、カートの中の商品をデータベースに移し変えるという処理です。
本来のECサイトでは決済機能も必要となりますが、この連載ではデータベースに登録する機能までを解説します。決済機能が必要な場合、特にクレジット決済が必要な場合は、決済代行会社のサービスを用いることがしばしばあります。必要に応じて、Googleなどで「決済代行」等のキーワードで検索してみてください。
送信フォームの作成
まず、C:\xampp\htdocs\ecフォルダ内にあるcart.phpをメモ帳などで開いてください。[注文確定ボタン]が次のように記述されているはずです。
<input type="submit" class="fix" value="注文確定"/>
上記のように注文確定ボタンが定義されていますが、このままではクリック時の送信先画面が定義されていないので、上記の部分を次のように<form>タグで囲みましょう(今回はcart.php、すなわち同一画面に対して送信するものとします)。
<form name="cart_form" action="cart.php" method="post"> <input type="hidden" name="cmd" value="commit_order"/> <input type="submit" class="fix" value="注文確定"/> </form>
hiddenタグの情報は、PHPが[注文確定ボタン]がクリックされたことを認識するために用います。
これでボタンをクリックできるようになりましたが、他にも問題があるので対処しておきましょう。現状では、ログインしていないユーザーでも注文確定ボタンがクリックできてしまいます。また、カートに商品が入っていない場合も、同じくクリックできてしまいます(未ログインでも購入可能なECサイトもありますが、今回はログイン情報を元に購入者を識別する目的で、未ログインでは購入できないルールとします)。
上記の<form>~</form>までの部分に、次のようにif文を用いて注文確定ボタンの表示・非表示を切り替えるPHPのコードを付加します。
<?php
if( $_SESSION["customer_code"] != "" && count( $_SESSION["cart"] ) > 0 )
{
?>
<form name="cart_form" action="cart.php" method="post">
<input type="hidden" name="cmd" value="commit_order"/>
<input type="submit" class="fix" value="注文確定"/>
</form>
<?php
}
?>
count命令は、配列の要素数を調べるための命令です。
if(count( $_SESSION["cart"] ) > 0 )
と記述することで、$_SESSION["cart"]配列の要素数が0より大きい、すなわち、カートに商品が入っている場合のみ、if文に入ります。
実装できたら、未ログイン、およびカートが空の状態で注文確定ボタンが表示されないことを確認しましょう。
注文確定処理(テーブル構造の理解)
次に、データベース処理の実装です。まず、注文情報を格納するテーブルが、どのような構造だったかを思い出してみましょう。設計に関して学習をした第8回の2ページ目を開き、「購入履歴テーブル(d_purchase)、購入履歴詳細テーブル(d_purchase_detail)」の見出し部分を確認してください。
注文情報は、このd_purchaseおよびd_purchase_detailの2つのテーブルに格納します。d_purchaseには注文情報のサマリー、d_purchase_detailには注文情報の詳細を格納します。2つのテーブルが互いに関連し合う構造は今回が初めてなので、よく目を通しておきましょう。


