PHPとSQLを使って簡易的なECサイトを作る課題で、多くの人がつまずくポイントが「一覧ページと詳細ページの紐付け方法」です。特に商品名をクリックしたときに、どのようにして正しい商品データを詳細ページへ渡すのかが分からず混乱しやすい部分です。本記事ではその基本的な考え方と実装の仕組みを整理して解説します。
一覧ページと詳細ページは「ID」で紐付ける
ECサイトでは、商品名そのものではなく「商品ID」でデータを管理するのが基本です。
理由は、商品名は重複する可能性がありますが、IDは必ず一意(ユニーク)だからです。
そのため一覧ページでは「商品名+ID」をセットで扱い、リンクにはIDだけを渡します。
一覧ページの基本構造
一覧ページではSQLで取得した商品データをループで表示します。
例えば「SELECT * FROM products」で取得し、foreachやwhileで商品を出力します。
このときリンクは「detail.php?id=1」のようにGETパラメータでIDを付与します。
詳細ページでIDを受け取る仕組み
詳細ページではURLの「?id=◯◯」部分を$_GETで受け取ります。
例えば $id = $_GET[‘id’]; のように取得します。
そのIDを使って「SELECT * FROM products WHERE id = ?」のようにSQLで1件取得します。
SQLで1件データを取得する方法
詳細ページでは必ずWHERE句でIDを指定して1件のみ取得します。
例:SELECT * FROM products WHERE id = :id としてプリペアドステートメントを使うのが安全です。
これにより一覧と詳細が正しく紐づきます。
よくあるミスと注意点
よくあるミスとして、商品名をURLに入れてしまうケースがあります。
また、IDを受け取った後にSQLで絞り込まないと全件表示されてしまいます。
さらに、GETパラメータの未チェックによるエラーにも注意が必要です。
まとめ
一覧ページと詳細ページの紐付けは「商品IDを使う」のが基本です。
一覧ではID付きリンクを生成し、詳細ではGETで受け取りSQLで1件取得します。
この仕組みを理解すれば、ECサイトの基本構造を正しく設計できるようになります。


コメント