前提・実現したいこと
質問内容
PHP7にて、簡易的なショッピングサイトを作ろうとしています。
その中で、カート機能でつまづいています。
商品は全て1つずつしか売らないようにしているので、個数指定の設定は必要ないかなと考えております。
問題点は、商品の詳細画面(item1~3.php)から「カートに入れる」を選択後にカートページ(cart-items.php)に商品を追加できるようにすること、別の商品(2つ目以降の商品)を「カートに入れる」を選択してカートページに2つ目以降の商品が追加できるようにすること(最後にカートに入れた商品以外の商品がカートページから消えることなく)、あとカート内から商品を削除することです。
ページ遷移してもデータを保持できる$_SESSION(SESSION変数?)と、データを別ページに移せる$_POSTを使えばなんとかできるんじゃないかなって思っていたのですが、なかなかうまくいきませんでした。カートに入れる処理は、$_SESSIONを配列化して、そこに$_POSTで送られてきたデータを入れたらできるんじゃないかと思ったのですが、データが残りませんでした。
どなたか教えてくれると嬉しいです。
発生している問題・エラーメッセージ
エラーメッセージはないが、商品が1つしか出力されない。(戻るを押して別の商品をカートに入れても前に入れた商品が存在しない)。それ以降の商品を削除する処理は、データが保持されないのでできない。
エラーメッセージ
該当のソースコード
php
1(home.php) 2<?php ?> 3<!DOCTYPE html> 4<html> 5 <head> 6 <meta charset="utf-8"> 7 <title>Cart Practice</title> 8 </head> 9 <body> 10 <ul> 11 <li><a href="item1.php">item1</a></li> 12 <li><a href="item2.php">item2</a></li> 13 <li><a href="item3.php">item3</a></li> 14 </ul> 15 </body> 16</html> 17
php
1(item1.php) 2<?php ?> 3<!DOCTYPE html> 4<html> 5 <head> 6 <meta charset="utf-8"> 7 <title>Cart Practice</title> 8 </head> 9 <body> 10 <p>Item1</p> 11 <form action="cart-items.php" method="post"> 12 <input type="submit" name="btn" value="Add to cart"> 13 <input type="hidden" name="item" value="item1"> 14 </form> 15 16 </body> 17</html> 18
php
1(item2.php) 2<?php ?> 3<!DOCTYPE html> 4<html> 5 <head> 6 <meta charset="utf-8"> 7 <title>Cart Practice</title> 8 </head> 9 <body> 10 <p>Item1</p> 11 <form action="cart-items.php" method="post"> 12 <input type="submit" name="btn" value="Add to cart"> 13 <input type="hidden" name="item" value="item2"> 14 </form> 15 16 </body> 17</html>
php
1(item3.php) 2<?php ?> 3<!DOCTYPE html> 4<html> 5 <head> 6 <meta charset="utf-8"> 7 <title>Cart Practice</title> 8 </head> 9 <body> 10 <p>Item1</p> 11 <form action="cart-items.php" method="post"> 12 <input type="submit" name="btn" value="Add to cart"> 13 <input type="hidden" name="item" value="item3"> 14 </form> 15 16 </body> 17</html>
php
1(cart-items.php) 2 3<?php 4 session_start(); 5 $_SESSION['cart']=[]; //SESSION変数cartを配列化 6 $_SESSION['cart'][]=$_POST['item']; //変数cart内にカートに入れようとしたアイテムを入れる 7 8 9 10?> 11<!DOCTYPE html> 12<html> 13 <head> 14 <meta charset="utf-8"> 15 <title>Cart Practice</title> 16 </head> 17 <body> 18 <h1>All items</h1> 19 <?php foreach($_SESSION['cart'] as $item):?> <!--配列化されたSESSION変数内の商品を1つ1つ出力したいが一つしか出力されない。(データが残らない)--> 20 <h2><?php echo $item?></h2> 21 <?php endforeach?> 22 </body> 23</html> 24
試したこと
できるだけシンプルに書こうとしたため(今後も使うときがあると思うので感覚的に覚えやすいように)、$_POST,$_SESSION, とforeach文で取り組んでみたのですが、データが残らずに苦戦しています。
カート内の削除の処理に関しては、カート内にデータが残らないので、カート内の商品削除のしようがありませんでした。
補足情報(FW/ツールのバージョンなど)
PHP7
回答1件
あなたの回答
tips
プレビュー