セッションが機能しなくて困っています。
PHPで商品のデータを保持するデータベースを作成しました。
id、goods、price、makerの4つのカラムを持つテーブルstockです。
fetch.phpというファイルで、このテーブルの全レコードを抽出して出力するというプログラムを作成しました。また、出力した商品名をURLとし、クリックすると詳細ページに飛ぶようにしました。
fetch.phpは以下です。
<?php session_start(); header('Expires:-1'); header('Cache-Control:'); header('Pragma:'); $user = 'testuser'; $password = 'pw'; $dbName = 'shop'; $host = 'localhost'; $dsn = "mysql:host={$host};dbname={$dbName};charset=utf8"; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>全商品一覧</title> </head> <body> <?php try { $pdo = new PDO($dsn, $user, $password); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT * FROM stock"; $stm = $pdo->prepare($sql); $stm->execute(); $result = $stm->fetchAll(PDO::FETCH_ASSOC); if(count($result)>0){ echo "<table>"; echo "<tr>"; echo "<th>", "ID", "</th>"; echo "<th>", "商品名", "</th>"; echo "<th>", "価格", "</th>"; echo "<th>", "メーカー", "</th>"; echo "</tr>"; foreach ($result as $row){ $_SESSION['id']=$row['id']; $_SESSION['goods']=$row['goods']; $_SESSION['price']=$row['price']; $_SESSION['maker']=$row['maker']; echo "<tr>"; echo "<td>", $row['id'], "</td>"; echo "<td>", '<a href="detail.php">', $row['goods'],"</a>", "</td>"; echo "<td>" ,$row['price'], "</td>"; echo "<td>", $row['maker'], "</td>"; echo "</tr>"; } echo "</table>"; } else { echo "見つかりませんでした。"; } } catch (Exception $e) { echo $e->getMessage(); } ?> </body> </html>
商品名をクリックすると飛ぶ詳細ページはdetail.phpで以下になります。
詳細ページと言っても、その商品のid、商品名、価格、メーカーを出力するだけです。
<?php session_start(); if(empty($_SESSION['id'])){ $id=""; }else { $id=$_SESSION['id']; } if(empty($_SESSION['goods'])){ $goods=""; }else { $goods=$_SESSION['goods']; } if(empty($_SESSION['price'])){ $price=""; }else { $price=$_SESSION['price']; } if(empty($_SESSION['maker'])){ $maker=""; }else { $maker=$_SESSION['maker']; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>商品詳細</title> </head> <body> <p> <?php echo $id; ?> </p> <p> <?php echo $goods; ?> </p> <p> <?php echo $price; ?> </p> <p> <?php echo $maker; ?> </p> <br> <form> <input type="button" onClick='history.back()' value="戻る"> </form> </body> </html>
商品一覧(fetch.php)から詳細ページ(detail.php)にデータを送信するのにセッションを使ったのですが、機能しません。
上のコードだと、どの商品をクリックしても最後の商品の詳細が出力されてしまいます。
foreach内でセッションが設定されているので、最後のループでの値が設定されてしまっているのだと思いますが、どこでセッションを設定すれば全商品のデータをdetail.phpに送る方法が思いつきません。
このような場合はどのように実装すべきでしょうか?
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。