讲师中心 微信公众号
AI工具推荐 视频效率加速

如何修复“Add to Cart”按钮无法将商品加入购物车的问题

云丽小哥_7294

云丽小哥_7294

发布时间:2026-07-06 12:24:23

|

970人浏览过

|

来源于php中文网

原创

如何修复“Add to Cart”按钮无法将商品加入购物车的问题

本文详解为何点击“Add to Cart”按钮无响应,并指出核心逻辑错误:item.php 中的添加逻辑未被触发,因其依赖 POST 请求,但表单却提交到了 cart.php(而后者未处理添加逻辑);正确做法是将购物车添加逻辑迁移至 cart.php 并统一处理。

本文详解为何点击“add to cart”按钮无响应,并指出核心逻辑错误:`item.php` 中的添加逻辑未被触发,因其依赖 post 请求,但表单却提交到了 `cart.php`(而后者未处理添加逻辑);正确做法是将购物车添加逻辑迁移至 `cart.php` 并统一处理。

在您当前的实现中,item.php 包含了完整的「添加到购物车」业务逻辑(如读取 POST 数据、更新 $_SESSION['shopping_cart']),但它只会在当前页面收到 POST 请求时执行。然而,关键问题在于:您在 item.php 中的 <form> 标签将数据提交到了 cart.php:

<form method="post" action="cart.php?action=add&id=<?php echo $itemID; ?>">

这意味着浏览器会向 cart.php 发起一个 POST 请求,而 cart.php 当前代码完全不处理任何 POST 数据或添加逻辑——它仅检查 $_SESSION['shopping_cart'] 是否存在并直接渲染购物车列表。因此,无论用户点击多少次“Add to Cart”,cart.php 都不会执行添加操作,导致购物车始终为空。

✅ 正确解决方案:将添加逻辑移至 cart.php

请将 item.php 中以下这段处理添加请求的核心逻辑(含数据库连接、参数校验、购物车数组更新等)整体迁移至 cart.php 的顶部(session_start() 之后):

<?php
// Start the session
session_start();

// === 新增:处理 "Add to Cart" 请求 ===
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_to_cart'])) {
    // 数据库连接(建议提取为独立文件或复用配置)
    $servername = "localhost";
    $username = "root";
    $dbpassword = "";
    $dbname = "fyp";

    $conn = new mysqli($servername, $username, $dbpassword, $dbname);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    // 获取并校验 item_id(来自 URL 参数或隐藏字段更安全,此处先兼容原逻辑)
    $itemID = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
    if (!$itemID) {
        die("Invalid item ID.");
    }

    // 查询商品信息(防止伪造价格/名称)
    $stmt = $conn->prepare("SELECT item_name, item_price FROM menu WHERE item_id = ?");
    $stmt->bind_param("i", $itemID);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows === 0) {
        die("Item not found.");
    }

    $row = $result->fetch_assoc();
    $itemName = $row['item_name'];
    $itemPrice = (float)$row['item_price'];

    // 获取数量(强制整型,防注入)
    $quantity = max(1, (int)($_POST['quantity'] ?? 1));

    // 构建商品项
    $itemArray = [
        'item_id'   => $itemID,
        'item_name' => $itemName,
        'item_price'=> $itemPrice,
        'item_quantity' => $quantity
    ];

    // 更新购物车 Session
    if (empty($_SESSION['shopping_cart'])) {
        $_SESSION['shopping_cart'] = [$itemArray];
    } else {
        $found = false;
        foreach ($_SESSION['shopping_cart'] as &$item) {
            if ($item['item_id'] == $itemID) {
                $item['item_quantity'] += $quantity;
                $found = true;
                break;
            }
        }
        if (!$found) {
            $_SESSION['shopping_cart'][] = $itemArray;
        }
    }

    $conn->close();

    // 可选:添加成功后重定向回 cart.php,避免重复提交
    header('Location: cart.php');
    exit;
}
// === 添加逻辑结束 ===
?>

⚠️ 重要安全提醒:

  • 原代码中 $sql = "SELECT * FROM menu WHERE item_id = '$itemID'"; 存在严重 SQL 注入风险。上例已改用 预处理语句(Prepared Statement),这是必须实施的安全措施。
  • 所有用户输入(如 $_GET['id'], $_POST['quantity'])都需经过 filter_input() 或 (int) 强制转换校验,禁止直接拼接 SQL 或输出到 HTML。

? 同时优化 item.php 表单(保持简洁)

item.php 中的表单无需改动逻辑,但建议:

  • 移除冗余的数据库查询(因添加逻辑已移至 cart.php);
  • 确保 action 指向正确路径(如 cart.php);
  • 可添加隐藏域传递 item_id,避免依赖 URL 参数(更健壮):
<form method="post" action="cart.php">
    <input type="hidden" name="item_id" value="<?php echo htmlspecialchars($itemID); ?>">
    <label for="quantity">Quantity:</label>
    <select name="quantity" id="quantity">
        <?php for ($i = 1; $i <= 10; $i++): ?>
            <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
        <?php endfor; ?>
    </select>
    <input type="submit" name="add_to_cart" value="Add to Cart">
</form>

? 总结与最佳实践

问题根源 修复方式
添加逻辑在错误页面(item.php)且未被触发 将完整添加流程迁移至接收 POST 的目标页 cart.php
SQL 注入漏洞 全面使用 PDO 或 MySQLi 预处理语句 + 参数绑定
重复提交风险 添加成功后使用 header('Location: ...') 重定向
代码耦合度高 后续可将数据库操作抽象为函数/类,分离关注点

完成上述修改后,点击“Add to Cart”将真正写入 Session 购物车,刷新 cart.php 即可看到商品。此结构也更符合 Web 开发常规模式:表单提交 → 服务端处理 → 重定向/响应 → 展示结果。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

5155

2023.06.14

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2992

2023.06.21

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2650

2023.07.31

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2679

2023.08.01

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

4599

2023.08.11

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2641

2023.08.11

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2409

2023.08.31

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2208

2023.09.01

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

120

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
php初学者入门课程
php初学者入门课程

共10课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn