如何使用PHP $_SESSION变量在商品列表同页展示点击的商品
SESSION实现单页幻灯片商品详情展示方案
核心逻辑
- 用户点击商品时携带当前商品的唯一id跳转
- 后端接收id后存入SESSION全局变量跨请求保存
- 商品详情slide读取SESSION中的id查询对应商品信息,渲染到对应位置
实现步骤
1. 开启SESSION支持
在index.php文件最顶部(所有HTML输出前,不能有任何前置空格、换行)添加如下代码,同时可以把公共的数据库连接代码放在这里,避免重复编写:
<?php session_start(); // 公共数据库连接 $con = mysqli_connect("localhost:3306", "root", "", "users"); // 处理前端传递的选中商品id if (isset($_GET['selected_pid'])) { // 转整型过滤参数,防止SQL注入 $_SESSION['selected_product_id'] = intval($_GET['selected_pid']); } ?>
2. 修改Slide3商品列表的跳转链接
原循环内的a标签存在id重复问题,同时需要携带商品id参数,修改对应代码:
<!-- 把原来的<a href="#7" id="p_click">改为以下内容 --> <a href="?selected_pid=<?= $product['id'] ?>#7" class="p_click"><img src="<?= $product['image']; ?>" alt=""></a>
说明:把重复的id属性改为class,链接中新增selected_pid参数传递当前商品的数据库id,锚点#7保证跳转到对应slide
3. 修改Slide7代码渲染商品信息
在Slide7中读取SESSION存储的商品id,查询数据库后输出对应内容到
标签:
<div class="slide" id="7" > <div class="content seventh-content"> <div class="container-fluid"> <form id="product" action="" method="post"> <div class="row"> <div class="col-md-12"> <?php $current_product = null; // 判断SESSION中是否存在选中的商品id if (isset($_SESSION['selected_product_id'])) { $pid = $_SESSION['selected_product_id']; $query = mysqli_query($con, "SELECT * FROM Products WHERE id = $pid LIMIT 1"); if ($query && mysqli_num_rows($query) > 0) { $current_product = mysqli_fetch_assoc($query); } } ?> <h2><?= $current_product ? $current_product['title'] : '未查询到对应商品' ?></h2> <!-- 后续需要展示商品价格、描述、图片等信息,直接从$current_product数组中取值即可 --> </div> </div> </form> </div> </div> </div>
注意事项
- 所有数据库操作的用户输入参数都要做过滤,本方案中用
intval()转换商品id为整型,是基础的防SQL注入处理,符合课程项目的安全要求 - 不需要在每个slide中重复编写数据库连接代码,统一放在页面顶部即可,减少冗余代码
- 如果不希望页面刷新,可以改用AJAX请求把选中的商品id传给后端存SESSION,再用JS跳转到slide7,本质逻辑和上述方案一致
内容的提问来源于stack exchange,提问作者spaceTRT
相关产品推荐
相关产品推荐

