【サンプル】ショッピングカート(セッション)
(ブログ記事の一覧は「こちら」)
ショッピングカートのサンプルを確認していきましょう。
用意した商品に対して、個数を指定してカートに入れたり、個数の変更やカート内の削除を行うことができます。
セッションや配列の仕組みを利用します。
また、サンプルプログラムではDBは用意していませんので、必要な場合はサンプルプログラムを修正してください。
サンプルプログラム
流れは以下のようになっっています。
[index.php] <-> [cart.php] <-> [delete.php]
index.php
トップ画面では、カートに入れることのできる商品一覧の表示と、カートに入れる仕組みを用意します。
<?php session_start(); // POSTで受け取った場合 if ($_SERVER['REQUEST_METHOD'] === 'POST') { $product = $_POST['product']; $num = $_POST['num']; $_SESSION['cart'][$product] = $num; } $cart = array(); if (isset($_SESSION['cart'])) { $cart = $_SESSION['cart']; } var_dump($cart); ?> <html> <head> <meta charset="UTF-8"> <title>商品一覧</title> </head> <body> <h1>商品一覧</h1> <a href="cart.php">カートを見る</a> <table style="text-align:center"> <tr> <th>商品</th><th>数量</th><th>ボタン</th> </tr> <form action="" method="post"> <tr> <td>マウス</td> <td> <select name="num"> <?php for ($i = 1; $i < 10; $i++): ?> <option value="<?php echo $i; ?>"><?php echo $i; ?></option> <?php endfor; ?> </select> </td> <td> <input type="hidden" name="product" value="pc_mouse"> <?php if (isset($cart['pc_mouse']) === TRUE): ?> <p>追加済み</p> <?php else: ?> <input type="submit" value="カートに入れる"> <?php endif; ?> </td> </tr> </form> <form action="" method="post"> <tr> <td>キーボード</td> <td> <select name="num"> <?php for ($i = 1; $i < 10; $i++): ?> <option value="<?php echo $i; ?>"><?php echo $i; ?></option> <?php endfor; ?> </select> </td> <td> <input type="hidden" name="product" value="pc_keyboard"> <?php if (isset($cart['pc_keyboard']) === TRUE): ?> <p>追加済み</p> <?php else: ?> <input type="submit" value="カートに入れる"> <?php endif; ?> </td> </tr> </form> </table> </body> </html>
HTML内にPHPのif文やfor文を用いる場合、最後の部分をわかりやすくするために、以下のような書き方もできます。
<?php if (isset($cart['pc_mouse']) === TRUE): ?> <?php else: ?> <?php endif; ?> <?php for ($i = 1; $i < 10; $i++): ?> <?php endfor; ?>
cart.php
ショッピングカート画面では、トップ画面でカートに入れた商品の表示と、変更や削除の機能を用意します。
<?php session_start(); $cart = array(); // POSTで受け取った場合 if ($_SERVER['REQUEST_METHOD'] === 'POST') { $product = $_POST['product']; $kind = $_POST['kind']; if ($kind === 'change') { $num = $_POST['num']; $_SESSION['cart'][$product] = $num; } elseif ($kind === 'delete') { unset($_SESSION['cart'][$product]); } } if (isset($_SESSION['cart'])) { $cart = $_SESSION['cart']; } var_dump($_SESSION); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ショッピングカート</title> </head> <body> <h1>ショッピングカート</h1> <p><a href="./">商品一覧へ</a></p> <p><a href="delete.php">カートをすべて空に</a></p> <table style="text-align:center"> <tr> <th>商品</th><th>個数</th><th>数量</th><th>変更ボタン</th><th>削除ボタン</th> </tr> <?php foreach($cart as $key => $var): ?> <tr> <td> <?php if ($key == 'pc_mouse') { echo 'マウス'; } elseif ($key == 'pc_keyboard') { echo 'キーボード'; } ?> </td> <td><?php echo $var ?>個</td> <!- 変更ボタン -> <form action="" method="post"> <td> <select name="num"> <?php for($i = 1; $i <10; $i++):?> <option value="<?php echo $i; ?>"><?php echo $i; ?></option> <?php endfor; ?> </select> </td> <td> <input type="hidden" name="kind" value="change"> <input type="hidden" name="product" value="<?php echo $key ?>"> <input type="submit" value="変更"> </td> </form> <!- 削除ボタン -> <form action="" method="post"> <td> <input type="hidden" name="kind" value="delete"> <input type="hidden" name="product" value="<?php echo $key ?>"> <input type="submit" value="削除"> </td> </form> </tr> <?php endforeach; ?> </table> </body> </html>
HTML内にPHPのforeach文を用いる場合、最後の部分をわかりやすくするために、以下のような書き方もできます。
<?php foreach($cart as $key => $var): ?> <?php endforeach; ?>
delete.php
ショッピングカート画面で削除を洗濯した時に呼ばれます。画面は持っていません。
<?php session_start(); $session_name = session_name(); $_SESSION = array(); // クッキーを削除 if (isset($_COOKIE[$session_name]) === TRUE) { setcookie($session_name, '', time() - 3600); } session_destroy(); header('Location: cart.php'); exit;