PHP实现加入购物车功能提交空字符串无法写入数据库求助
问题核心原因
你提交参数为空的核心问题是表单内的隐藏字段未设置value属性,浏览器提交表单时只会传递带name属性且有有效值的字段,你只给隐藏字段加了name,没有绑定商品值,自然提交到后端的是空字符串。
具体修复步骤
- 给商品页的隐藏字段补充
value赋值
你现有的隐藏字段写法是:
<input type="hidden" class="product-image" name="image">
需要改成把PHP拉取的商品值写入value属性,三个隐藏字段都要修改:
<!-- 商品图片隐藏字段 --> <input type="hidden" class="product-image" name="image" value="<?php echo $products[$i]["image"]; ?>"> <!-- 商品名称隐藏字段 --> <input type="hidden" class="product-title" name="name" value="<?php echo $products[$i]["name"]; ?>"> <!-- 商品价格隐藏字段 --> <input type="hidden" class="product-price" name="price" value="<?php echo $products[$i]["price"]; ?>">
- 补全缺失的
code字段
你的add.php中接收了$_POST['code']参数,但表单中没有对应字段,会导致插入数据失败。如果你的商品表有商品编码字段,在表单中新增对应的隐藏字段即可:
<input type="hidden" name="code" value="<?php echo $products[$i]["code"]; ?>">
如果不需要code字段,直接删除add.php中接收code和SQL插入code的相关逻辑。
- 其他问题修复
- 删掉
header跳转前的echo输出:HTTP头信息发送前不能有任何输出,echo "Added To cart !"会导致跳转失效,直接删除该行即可。 - 新增登录状态判断:插入购物车前先判断
$_SESSION['email']是否存在,避免未登录用户插入空邮箱数据。 - 改用预处理语句:直接拼接用户提交的参数到SQL语句存在SQL注入风险,改用
mysqli预处理语句更安全。
修正后完整代码
商品展示页表单部分
<div id="product-grid"> <div class="product-item"> <form method="post" action="add.php"> <input type="hidden" class="product-image" name="image" value="<?php echo $products[$i]["image"]; ?>"> <img src="<?php echo $products[$i]["image"]; ?>"> <div class="product-tile-footer"> <input type="hidden" class="product-title" name="name" value="<?php echo $products[$i]["name"]; ?>"> <b><?php echo $products[$i]["name"]; ?></b> <br> <input type="hidden" class="product-price" name="price" value="<?php echo $products[$i]["price"]; ?>"> <?php echo "$".$products[$i]["price"]; ?> <input type="hidden" name="code" value="<?php echo $products[$i]["code"]; ?>"> <div class="cart-action"> <input type="text" class="product-quantity" name="quantity" value="1" size="2" /> <input type="submit" value="Add to Cart" name="add" class="btnAddAction"/> </div> </div> </form> </div> </div> <?php } ?>
add.php代码
<?php session_start(); // 校验登录状态 if (!isset($_SESSION['email'])) { die("请先登录后再添加购物车"); } $link = mysqli_connect("localhost", "root", "", "MyGym") or die("数据库连接失败"); if(isset($_POST['add'])) { $email = $_SESSION['email']; $image = $_POST['image']; $name = $_POST['name']; $code = $_POST['code']; $price = $_POST['price']; $qty = $_POST['quantity']; // 预处理语句防注入 $stmt = mysqli_prepare($link, "INSERT INTO cart (email,image,name,code,price,quantity) VALUES (?,?,?,?,?,?)"); mysqli_stmt_bind_param($stmt, "ssssdi", $email, $image, $name, $code, $price, $qty); if (mysqli_stmt_execute($stmt)) { header("location:Store.php"); exit; } else { echo "插入失败:" . mysqli_error($link); } mysqli_stmt_close($stmt); mysqli_close($link); } ?>
内容的提问来源于stack exchange,提问作者waleed nader
相关产品推荐
相关产品推荐

