首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 購物車添加商品邏輯實現:Session + 數據庫雙重存儲

     編輯:PHP 相關知識

購物車加入商品核心邏輯完整代碼

返回碼定義:1=成功、2=未登錄、3=已存在、4=出錯、5=無商品。

完整業務邏輯

<?php
session_start();
header("Content-Type: text/html; charset=UTF-8");
require("system/system.inc.php");

$reback = '0';

if (empty($_SESSION['member'])) {
    $reback = '2';  // 未登錄
} else {
    $key = $_GET['key'];
    if (empty($key)) {
        $reback = '5';  // 無商品
    } else {
        $boo = false;
        $sql = "SELECT id, shopping FROM tb_user WHERE name = '{$_SESSION['member']}'";
        $shopcont = $admindb->ExecSQL($sql, $conn);
        
        if (!empty($shopcont[0]['shopping'])) {
            $arr = explode('@', $shopcont[0]['shopping']);
            foreach ($arr as $value) {
                $tmp = explode(',', $value);
                if ($key == $tmp[0]) {
                    $reback = '3';  // 已存在
                    $boo = true;
                    break;
                }
            }
            if (!$boo) {
                // 追加商品:@商品ID,數量
                $shopcont[0]['shopping'] .= '@' . $key . ',1';
                $update = "UPDATE tb_user SET shopping = '{$shopcont[0]['shopping']}' WHERE name = '{$_SESSION['member']}'";
                $reback = $admindb->ExecSQL($update, $conn) ? '1' : '4';
            }
        } else {
            // 首次添加
            $update = "UPDATE tb_user SET shopping = '{$key},1' WHERE name = '{$_SESSION['member']}'";
            $reback = $admindb->ExecSQL($update, $conn) ? '1' : '4';
        }
    }
}
echo $reback;

數據結構設計

shopping 字段存儲格式:商品ID,數量@商品ID,數量@...

  • 用 @ 分隔不同商品
  • 用 , 分隔商品 ID 與數量
  • 查詢時 explode('@') → 遍歷 explode(',')

優化建議

  1. 防刷新重複提交:前端使用 AJAX 異步提交,按鈕點擊後禁用
  2. SQL 注入防護:使用參數化查詢或 intval($key) 強制轉整數
  3. 併發安全:高併發下建議改用 Redis 存儲購物車,或數據庫行鎖 SELECT ... FOR UPDATE
  4. 結構優化:獨立 cart 表(user_id, goods_id, qty, add_time)更利於擴展

當前方案適用於中小型項目快速原型,生產環境建議重構為關聯表模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved