如何在PHP不同页面间传递变量,点击按钮获取对应商品信息
现有代码核心问题
- 按钮调用
test()函数时未传入当前商品的PartsID,函数拿到的是空值 - 跳转逻辑错误:你需要跳转到新页面展示详情,完全不需要使用AJAX,现有代码中AJAX请求携带了ID,但跳转时没有把ID拼到跳转地址里,
window.location.assign("pageContent.php").innerHTML属于无效语法 script标签放在while循环内,每渲染一个商品就重复定义一次test函数,会产生函数冲突
最优实现方案(无需AJAX)
你需要的是点击后跳转带ID的详情页,直接跳转带参是最简洁稳定的方案,也支持用户保存、分享详情页链接。
修改content.php
- 将
script标签移出循环,整个页面仅定义一次函数 - 按钮点击事件传入当前商品的
PartsID - 简化跳转逻辑,直接拼接ID到跳转地址
修改后代码如下:
<?php $stmt = $pdo->query("SELECT * FROM Parts"); while ($product = $stmt->fetch(PDO::FETCH_ASSOC)) { ?> <td> <button type="button" class="testButton" onclick="test(<?php echo $product['PartsID'];?>)"> <!-- 建议这里也动态输出商品缩略图,不要写死路径 --> <img src="images/<?php echo $product['ImageFileName'];?>" alt="商品缩略图"> </button> </td> <td class="td-manufacturer"> <h6>MANUFACTURER</h6> <p><?php echo $product["Manufacturer"];?></p> </td> <?php } ?> <!-- 脚本放在循环外,页面底部即可 --> <script type="text/javascript"> function test(itemid) { // 直接跳转带ID的详情页,无需AJAX window.location.href = "pagecontent.php?id=" + itemid; } </script>
修改pagecontent.php
- 先获取GET参数的ID,做合法性校验
- 使用PDO预处理查询防止SQL注入,拿到对应商品数据
- 增加异常判断,避免ID无效时页面报错
修改后代码如下:
<?php // 先获取ID并校验 $partId = isset($_GET['id']) ? intval($_GET['id']) : 0; if ($partId <= 0) { die("无效的商品ID"); } // 预处理查询商品信息,防止SQL注入 $stmt = $pdo->prepare("SELECT * FROM Parts WHERE PartsID = ?"); $stmt->execute([$partId]); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (!$row) { die("商品不存在"); } ?> <div class="productInfo"> <h2 class="productTitle"><?php echo $row["PartTitle"];?></h2> </div> <table> <tr> <td><?php echo $row["Availability"];?></td> <td><?php echo $row["Price"];?></td> </tr> </table>
可选方案:AJAX无刷新加载
如果你不需要跳转页面,要在当前页局部加载详情,才需要使用AJAX,此时不需要跳转逻辑,直接把返回的内容插入到当前页的指定容器即可。
内容的提问来源于stack exchange,提问作者09jesses
相关产品推荐
相关产品推荐

