PHP-单击按钮即可向cookie中的现有数组添加值

问题描述 投票:0回答:2

我想将值添加到cookie内的现有数组变量中。

当前,我使用Ajax设置cookie:

Ajax:

function setcookie(productid){
     $.ajax({
            type: 'POST',
            url: "setcookies.php",
            data: {
                id: "productid"
            },
            success: function (e) {
                alert(e);
            }
        });
}

PHP setcookies.php

<?php
$cookiename = "products";
$cart = array();

$pid = $_POST['id'];
array_push($cart, $pid);

setcookie($cookiename, serialize($cart), time() + 3600, "/");
$_COOKIE[$cookiename] = serialize($cart);

当我单击添加产品按钮时,将调用setcookie()函数。单击添加产品按钮三次,我希望应将3个产品ID添加到cookie数组,但是当我访问将在页面中显示cookie的页面时,它只会显示最后添加的productid。

预先感谢您。

编辑我的工作代码:

下面的代码对我有效:只需稍微修改一下Dominique回答的代码即可。

$cookiename = "products";
$cart = null;
$pid = $_POST['id'];
if (!empty($_COOKIE[$cookiename])) {
    $cart = unserialize($_COOKIE[$cookiename]);
    array_push($cart, $pid);
} else {
    $cart = array();
    array_push($cart, $pid);
}
setcookie($cookiename, serialize($cart), time() + 3600, "/");
$_COOKIE[$cookiename] = serialize($cart);
php ajax cookies
2个回答
4
投票

在您的代码中,您将$ cart实例化为包含0个元素的数组,并将其放入$ _COOKIE ['products']中,这样它将删除现有内容。

它将解释为什么只能有一个带有简单元素的数组。

此代码应可用

<?php
$cookiename = "products";

$cart = array();

if(!empty($_COOKIE[$cookiename])) {
    $cart = json_decode($_COOKIE[$cookiename], true);
}

$pid = $_POST['id'];
array_push($cart, $pid);

setcookie($cookiename, json_encode($cart), time() + 3600, "/");
$_COOKIE[$cookiename] = json_encode($cart);

0
投票
<?php

$pid = $_POST['id'];
$cookiename = "products";

$cart = array();

if(isset($_COOKIE[$cookiename]) && !empty($_COOKIE[$cookiename])) {
    $cart = unserialize(base64_decode($_COOKIE[$cookiename]));
}

array_push($cart, $pid);

setcookie($cookiename, base64_encode(serialize($cart)), time() + 3600, "/");

//Your Cookie data output
$_COOKIE[$cookiename] = serialize($cart);
© www.soinside.com 2019 - 2024. All rights reserved.