- 締切済み
PHPでセッションを使った受け渡しについて
PHPでECサイトのカート機能を作っています。 まず商品一覧画面(index.php)にデータベースから読み取ったidとNAME、そして個数、サイズ、包装の有無のセレクトボックスを表示します。 それぞれの商品の追加ボタンを押すとカートのphp(t_cart.php)に飛んで上記の情報を全て表示できるようにしたいのですが、idとNAMEと個数の情報は受け渡せるのですが、サイズや包装の有無は別の商品を追加すると全ての商品の情報が上書きされてしまいます。 コードの一部を記載しておきます。 まだPHPを始めたばかりで初歩的な事がわからないのですが、ぜひ御知恵をお貸しいただければとおもいます。 よろしくお願いします。 ・index.php <table> <?php foreach ($Menu as $g) { ?> <tr> <td> <p class="Menu"><?php echo $g['id'] ?></p> </td> <td> <p><?php echo $g['NAME'] ?></p> </td> <form action="t_cart.php" method="post"> <td> <a>個数:</a> <select name="num"> <?php for ($i = 1; $i <= 10; $i++) { echo "<option>$i</option>"; } ?> </select> </td> <td> <a>サイズ:</a> <select name="size"> <option>S</option><option>M</option><option>L</option> </select> </td> <td> <a>包装:</a> <select name="deco"> <option>有</option><option>無</option> </select> </td> <td> <input type="text" name="id" value="<?php echo $g['id'] ?>"> <input type="submit" name="submit" value="go to cart"> </td> </form> </tr> <?php } ?> </table> ・t_cart.php <?php require 'common.php'; $rows = array(); $sum = 0; $pdo = connect(); if (!isset($_SESSION['cart'])){ $_SESSION['cart'] = array(); } if (@$_POST['submit']) { @$_SESSION['cart'][$_POST['id']] += $_POST['num']; } foreach($_SESSION['cart'] as $id => $num) { $st = $pdo->prepare("SELECT * FROM Menu WHERE id=?"); $st->execute(array($id)); $row = $st->fetch(); $st->closeCursor(); $row['num'] = strip_tags($num); $row['size'] = $_POST['size']; $row['deco'] = $_POST['dough']; $rows[] = $row; } ?>
- みんなの回答 (1)
- 専門家の回答
みんなの回答
そもそもデータ構造に問題がある気が… 同じ商品で、「これは包装あり・こっちは包装なし」といったことも出来るようにユニークな注文IDを生成し、 $_SESSION['cart']['ユニークな注文ID]['id'] = 商品ID; $_SESSION['cart']['ユニークな注文ID]['num'] = 個数; $_SESSION['cart']['ユニークな注文ID]['size'] = サイズ; $_SESSION['cart']['ユニークな注文ID]['deco'] = デコレーションの有無; とすればいいと思うんですが… 備考: よりよいコーディングのために http://note.chiebukuro.yahoo.co.jp/detail/n149597