PHP提交产品ID到购物车仅提交最后一条产品ID问题求助
问题根源
你把所有产品的表单元素都放在了同一个全局form标签里,循环输出每个产品的时候,重复生成name为product_id和qty的隐藏字段,同名表单元素在提交时,后面的值会覆盖前面的值,所以最终提交的永远是循环到最后一个产品的ID。
修复方案
最简单的改法是把form标签放到产品循环内部,每个产品对应一个独立的表单,修改后的产品页代码参考:
<?php require_once 'db.php'; try { $STH = $DBH->prepare("SELECT * FROM products"); $STH->execute(); $rows_affected = $STH->rowCount(); if ($rows_affected > 0){ while($row = $STH->fetch()){ $pro_id = $row['product_id']; $pro_cat = $row['product_cat']; $pro_image = $row['product_image']; $cat_name = $row["cat_title"]; $pro_title = $row["product_title"]; // 补充你原代码缺失的变量赋值 // 每个产品单独生成独立表单 echo " <form method='POST' action='action.php'> <input type='hidden' class='form-control' name='product_id' value='$pro_id' required> <input type='hidden' class='form-control' name='qty' value='1' required> <div class='product'> <a href='product.php?p=$pro_id'><div class='product-img'> <img src='product_images/$pro_image' style='max-height: 170px;' alt=''> </a> </div> <div class='product-body'> <p class='product-category'>$cat_name</p> <h3 class='product-name header-cart-item-name'><a href='product.php?p=$pro_id'>$pro_title</a></h3> <div class='product-btns'> <button type='submit' class='addToCart' name='addToCart'><i class='fa fa-shopping-cart'></i><span class='tooltipp'>Add to cart</span></button> </div> </div> </form> "; } } } catch(PDOException $e){ $_SESSION['error'] = "Couldn't fetch the products"; file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); } ?>
其他可优化点
- 你原代码的提交按钮没有加
type="submit"属性,部分浏览器可能识别异常,补充后更稳妥 - action.php中
header('refresh:2; url=index.php');之前有echo输出内容,会触发header已发送的报错,建议把提示信息存入session,跳转后再输出,或者改用JS实现延迟跳转 - action.php中插入数据库用到的
$ip_add变量没有提前定义,会导致插入失败,需要补充获取用户IP的逻辑赋值
内容的提问来源于stack exchange,提问作者Denver
相关产品推荐
相关产品推荐

