如何在PHP购物车中显示商品名称而非ID并展示商品价格
问题
我通过教程实现了PHP添加购物车功能,但点击商品页的添加购物车按钮后,购物车页面显示的是商品ID而非商品名称。同时我希望能在购物车页面展示商品价格。
用户提供的相关代码:
产品页PHP代码
<?php session_start(); if (isset($_GET["pro_id"])) { $proid = $_GET["pro_id"]; if (!empty($_SESSION["cart"])) { $acol = array_column($_SESSION["cart"], "pro_id"); if (in_array($proid, $acol)) { $_SESSION["cart"][$proid]["qty"] += 1; } else { $item = [ "pro_id" => $_GET["pro_id"], "qty" => 1, ]; $_SESSION["cart"][$proid] = $item; } } else { $item = [ "pro_id" => $_GET["pro_id"], "qty" => 1, ]; $_SESSION["cart"][$proid] = $item; } } ?>
产品卡片HTML代码
<div class="card"> <div class="card-body"> <h5 class="card-title">Laptop</h5> <p class="card-text">$200</p> <a href="index.php?pro_id=2" class="btn btn-success">Add to Cart</a> </div> </div>
购物车页PHP代码
<?php if (isset($_SESSION['cart'])) : $i = 1; foreach ($_SESSION['cart'] as $cart) : ?> <tr class="text-center"> <td><?php echo $i; ?> # </td> <td> Product <?= $cart['pro_id']; ?></td> <td>
解决方案
核心问题是购物车会话中只存储了商品ID和数量,缺少名称与价格数据,以下分两种场景给出修改方案:
方案1:从数据库读取商品信息(推荐)
假设你有products数据表,字段包含pro_id(商品ID)、pro_name(商品名称)、pro_price(商品价格)。
1. 修改产品页PHP代码
添加数据库查询逻辑,将商品名称和价格存入购物车会话:
<?php session_start(); // 替换为你的数据库连接信息 $conn = mysqli_connect("localhost", "数据库用户名", "数据库密码", "数据库名"); if (isset($_GET["pro_id"])) { $proid = $_GET["pro_id"]; // 查询对应商品的名称和价格 $sql = "SELECT pro_name, pro_price FROM products WHERE pro_id = '$proid'"; $result = mysqli_query($conn, $sql); $product = mysqli_fetch_assoc($result); if (!empty($_SESSION["cart"])) { $acol = array_column($_SESSION["cart"], "pro_id"); if (in_array($proid, $acol)) { // 仅更新数量 $_SESSION["cart"][$proid]["qty"] += 1; } else { // 存入完整商品信息 $item = [ "pro_id" => $proid, "pro_name" => $product['pro_name'], "pro_price" => $product['pro_price'], "qty" => 1, ]; $_SESSION["cart"][$proid] = $item; } } else { $item = [ "pro_id" => $proid, "pro_name" => $product['pro_name'], "pro_price" => $product['pro_price'], "qty" => 1, ]; $_SESSION["cart"][$proid] = $item; } } ?>
2. 修改购物车页PHP代码
读取会话中的名称和价格并展示:
<?php session_start(); // 必须开启会话才能读取购物车数据 if (isset($_SESSION['cart'])) : $i = 1; foreach ($_SESSION['cart'] as $cart) : ?> <tr class="text-center"> <td><?php echo $i; ?> # </td> <td><?= $cart['pro_name']; ?></td> <td>$<?= number_format($cart['pro_price'], 2); ?></td> <td><?= $cart['qty']; ?></td> <td>$<?= number_format($cart['pro_price'] * $cart['qty'], 2); ?></td> </tr> <?php $i++; endforeach; endif; ?>
方案2:通过URL参数传递(仅测试/临时场景)
如果暂时没有数据库,可以在添加购物车的链接中直接携带名称和价格参数:
1. 修改产品卡片HTML代码
更新链接参数,补充商品名称和价格:
<div class="card"> <div class="card-body"> <h5 class="card-title">Laptop</h5> <p class="card-text">$200</p> <a href="index.php?pro_id=2&pro_name=Laptop&pro_price=200" class="btn btn-success">Add to Cart</a> </div> </div>
2. 修改产品页PHP代码
接收URL参数并存入会话:
<?php session_start(); if (isset($_GET["pro_id"], $_GET["pro_name"], $_GET["pro_price"])) { $proid = $_GET["pro_id"]; $proName = $_GET["pro_name"]; $proPrice = $_GET["pro_price"]; if (!empty($_SESSION["cart"])) { $acol = array_column($_SESSION["cart"], "pro_id"); if (in_array($proid, $acol)) { $_SESSION["cart"][$proid]["qty"] += 1; } else { $item = [ "pro_id" => $proid, "pro_name" => $proName, "pro_price" => $proPrice, "qty" => 1, ]; $_SESSION["cart"][$proid] = $item; } } else { $item = [ "pro_id" => $proid, "pro_name" => $proName, "pro_price" => $proPrice, "qty" => 1, ]; $_SESSION["cart"][$proid] = $item; } } ?>
3. 修改购物车页PHP代码
与方案1的购物车代码一致,直接读取pro_name和pro_price字段即可。
内容的提问来源于stack exchange,提问作者Fatima
相关产品推荐
相关产品推荐

