ショッピングカート➀で作成した下記のような商品詳細のページで「カートに入れる」をクリックしたときに実行されるスクリプトを作成しましょう。
cart-insert.php
<?php session_start(); ?> <?php require ‘header.php’; ?> <?php $id = $_REQUEST[‘id’]; if(!isset($_SESSION[‘product’])){ $_SESSION[‘product’]=[]; } | カートを表す変数は$_SESSION[‘product’]です。便宜上、カート変数と呼ぶことにします。 ショッピングを始めた時点では、カート変数は定義されていません。 カート変数が未定義の場合には、カート変数に空の配置を設定して、カートを空の状態に初期化することにします。 カート変数が定義されているかどうかをisset関数で調べます。カート変数が未定義の場合には、 $_SESSION[‘product’]=[];を実行します。 |
$count = 0; | すでにカートに入っている商品と、同じ商品をカートに入れた場合に、個数を合計する処理を行います。個数を表す変数を作ります。 |
if (isset($_SESSION[‘product’][$id])){ $count = $_SESSION[‘product’][$id][‘count’]; } | 続いてカートに入れた商品と同じ商品がカート内にあるかどうかを、isset関数で調べます。 同じ商品がある場合には、すでにカート内にある商品の個数を取得して、変数$countに代入します。 |
$_SESSION[‘product’][$id]=[ ‘name’=>$_REQUEST[‘name’], ‘preice’=>$_REQUEST[‘price’], ‘count’=>$count + $_REQUEST[‘count’] ]; | ここではカートに商品を登録する処理をします。 前述のカートの構造に基づいて商品名、価格、個数を登録します。 商品名と価格については、リクエストパラメータで取得した値をそのまま格納します。すでにカートに同じ商品が入っていた場合は、$countに既に入っている個数が設定されているので、新しく追加した個数との合計個数が登録されます。 |
echo ‘<p>商品をカートに追加しました。</p>’; echo ‘<hr>’; require ‘cart.php’ ?> <?php require ‘footer.php’; ?> | require文を用いてcart.phpを読み込みます。require文は指定されたphpファイルを読み込み実行します。 |
カート内の商品一覧を表示する。
カートに入れられたことがわかります。さらにピーナッツを加えてみます。
ピーナッツが加えられ、また合計金額も加算されています。
それでは早速、作ってみましょう。
cart.php
<?php if(!empty($_SESSION[‘product’])){ | 最初にカートが空かどうかを判定します。変数が空かどうかを調べるempty関数を使います。$_SESSION[‘product’])はカート変数です。カート変数は、カート内にある商品の配列になっています。商品が入っていない時には、配列は空の状態です。 |
echo ‘<table>’; echo ‘<tr><th>商品番号</th><th>商品名</th>’; echo ‘<th>価格</th><th>個数</th><th>小計</th><th></th></tr>’; $total = 0; foreach($_SESSION[‘product’] as $id=>$product){ } ?> | カート内の商品一覧を表示するには、forezch文を用いて、全ての商品番号について順に情報を取り出します。 カート変数から要素を1つずつ取り出します。変数$idには要素のキーが入り、$productに要素の値が入ります |
echo ‘<tr>’; echo ‘<td>’, $id, ‘</td>’; echo ‘<td><a href=”detail.php?id=’, $id, ‘”>’, $product[‘name’], ‘</a></td>’; echo ‘<td>’, $product[‘price’], ‘</td>’; echo ‘<td>’, $product[‘count’], ‘</td>’; | 商品番号を表示するには、$idを使って表示します。 例えば、価格を表示するには、$productを使って$product[‘price’]のように記述します。 |
$subtotal = $product[‘price’] * $product[‘count’]; $total+=$subtotal; echo ‘<td>’, $subtotal, ‘</td>’; | 小計と合計を計算します。 小計は商品ごとに、「小計=価格*個数」 合計は最初に、$total=0でゼロにしておきます。 「+=」は左辺に右辺を足しこむ演算子です。ここでは合計に小計を足しこみます。 |
echo ‘<td><a href=”cart-delete.php?id=’, $id, ‘”>削除</a></td>’; echo ‘</tr>’; } echo ‘<tr><td>合計</td><td></td><td></td><td></td><td>’, $total, ‘</td><td></td></tr>’; echo ‘</table>’; echo ‘ <a href=”product.php”>商品一覧へ戻る</a>’; }else { echo ‘カートに商品がありません。’; | 商品をカートから削除するために、先のような記述をします。 |
カート内の商品を削除する
次に「削除」をクリックしたらカート内の商品を削除する処理をしましょう。
削除をクリックすると・・・・
商品が削除されました。
cart-delete.php
<?php session_start(); ?> <?php require ‘header.php’; ?> <?php unset($_SESSION[‘product’][$_REQUEST[‘id’]]); echo ‘ご指示通り、カートから商品を削除しました。’; echo ‘<hr>’; require ‘cart.php’; ?> <?php require ‘footer.php’; ?> | 前途、上記のように カート内の商品は、$_SESSION[‘product’][商品番号]のような「変数」に保存されています。削除した商品について、この変数を削除すれば、カートから取り除くことができます。変数を削除するにはunset関数を使います。 削除する商品番号は、リクエストパラメータから取得しています。そのリクエストパラメータ名はidです。 |