簡體   English   中英

$ _SESSION數組中添加的第一項被添加了TWICE ...為什么?

[英]First item added to $_SESSION array is added TWICE…why?

昨天我在這里發布了一個問題,關於正在使用的多維$_SESSION數組,用於跟蹤正在開發的購物車中的項目。 很有幫助的回答之一是建議我創建$_SESSION數組而不是創建多維數組,我同意這是一種更平滑的方法。

當用戶單擊商店頁面上的任何“添加到購物車”按鈕時, $_SESSION數組將啟動。 我帶有多維數組的原始代碼是這樣的:

$quantity = 1;

// add first item from shop page
if(isset($_POST['add_item']) && (!isset($_SESSION['cart']))) {
    $_SESSION['cart'] = array();
    $_SESSION['cart'][$_POST['product_description']] = array('quantity' => $quantity, 'price' => $_POST['product_price']);
    header("Location: http://website.com/cart.php");
    }

這樣做很好,但是我無法達到我想要的效果(請參閱另一篇文章)。

建議我使用的代碼是這樣的:

$quantity = 1;

// add first item from shop page
if(isset($_POST['add_item']) && (!isset($_SESSION['cart']))) {
$_SESSION['cart'][] = array('product_description'=> $_POST['product_description'], 'quantity' => $quantity, 'price' => $_POST['product_price']);
header("Location: http://website.com/cart.php");
}

而且效果很好,可以讓我做自己想做的事情(同樣,請參見其他文章以了解詳細信息)。

然而...

無論在商店頁面上單擊了哪個“添加到購物車”按鈕(只有四個),第一次單擊都會將信息添加到$_SESSION['cart']數組TWICE中。 此后單擊的所有其他按鈕僅輸入一次。 同樣,首先單擊哪個按鈕也沒關系,無論如何都會發生這種情況。

這是新的$_SESSION數組代碼上的print_r結果:

Array
(
    [0] => Array
        (
            [product_description] => iPhone case - Black
            [quantity] => 1
            [price] => 9.49
        )

    [1] => Array
        (
        [product_description] => iPhone case - Black
        [quantity] => 1
        [price] => 9.49
    )

)

我已經向SO和Google搜尋了有關發生這種情況的線索,但是無論我如何查詢我的話,我似乎都找不到任何有幫助的東西。

我想念的東西一定很簡單...

衷心的感謝!

更新

為了澄清,商店頁面上只有4個項目。 再也沒有了。 為了使事情超級簡單,每個項目都有自己的“添加到購物車”按鈕。 單擊該按鈕后,用戶將被帶到購物車頁面,他們可以在其中調整數量或刪除商品,然后簽出取消並清除購物車或繼續購物。

您的描述似乎表明您想要以下內容:

  • 檢查以查看購物車是否存在,如果不存在,請創建

  • 然后將商品添加到購物車

如果您還沒有購物車,您發布的代碼似乎只會添加一個商品。

我能想到的雙重原因的唯一原因是,代碼比您發布的要多,並且“創建購物車”和后來的“添加項目”塊中都出現了“添加項目”的代碼。

這就是我要做的:

quantity = 1;

// ensure cart
if (!isset($_SESSION['cart'])) {
    $_SESSION['cart'] = array();
}

// add item from shop page
if(isset($_POST['add_item'])) {
    $_SESSION['cart'][$_POST['product_description']] = array(
        'quantity' => $quantity, 
        'price' => $_POST['product_price']
    );

    // or if you prefer the numeric indexed array:
    // $_SESSION['cart'][] = array(
    //     'product_description'=> $_POST['product_description'], 
    //     'quantity' => $quantity, 
    //     'price' => $_POST['product_price']);

    header("Location: http://website.com/cart.php");
}

我已經修改了您的代碼以保持邏輯簡單,但就像@dognose注釋:不要相信通過帖子傳遞的價格。 黑客入侵一個表單並向您發布不良數據,以0.01美元的價格獲取東西,這是非常簡單的。

由於未提供完整代碼,因此無法回答; 然而:

$_SESSION = array_map("unserialize", array_unique(array_map("serialize", $_SESSION)));

將從您的會話中刪除重復項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM