You need to enable JavaScript to run this app. PHP实现加入购物车功能提交空字符串无法写入数据库求助
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现加入购物车功能提交空字符串无法写入数据库求助

问题核心原因

你提交参数为空的核心问题是表单内的隐藏字段未设置value属性,浏览器提交表单时只会传递带name属性且有有效值的字段,你只给隐藏字段加了name,没有绑定商品值,自然提交到后端的是空字符串。

具体修复步骤

  1. 给商品页的隐藏字段补充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"]; ?>">
  1. 补全缺失的code字段
    你的add.php中接收了$_POST['code']参数,但表单中没有对应字段,会导致插入数据失败。如果你的商品表有商品编码字段,在表单中新增对应的隐藏字段即可:
<input type="hidden" name="code" value="<?php echo $products[$i]["code"]; ?>">

如果不需要code字段,直接删除add.php中接收code和SQL插入code的相关逻辑。

  1. 其他问题修复
  • 删掉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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 18:06:08