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

云丽小哥_7294

云丽小哥_7294

2026-07-06

970人浏览

原创

如何修复“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 中的

标签将数据提交到了 cart.php:

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

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

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

CreateWise AI
CreateWise AI

一款面向播客创作者的AI内容辅助工具,可处理音频中的口癖并提炼节目亮点,同时辅助生成标题和节目说明。

下载
<?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 参数(更健壮):

? 总结与最佳实践

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

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

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

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

相关专题

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

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

2023.06.14

5055

7

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

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

2023.06.21

2952

4

html网页制作
html网页制作

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

2023.07.31

2590

5

html空格
html空格

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

2023.08.01

2639

5

html是什么
html是什么

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

2023.08.11

4579

6

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

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

2023.08.11

2581

3

html转txt
html转txt

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

2023.08.31

2369

3

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

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

2023.09.01

2168

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2128

5

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.2万人学习