【问题标题】:PHP - Add value to existing array in cookie on button clickPHP - 单击按钮时向 cookie 中的现有数组添加值
【发布时间】:2019-11-13 22:04:30
【问题描述】:

我想向我的 cookie 中的现有数组变量添加值。

目前我使用 Ajax 设置我的 cookie:

阿贾克斯:

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);

当我点击 addproduct 按钮时 setcookie() 函数将被调用。 点击 addproduct 按钮三次,我预计应该将产品的 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);

【问题讨论】:

  • 为什么不设置cookie客户端?
  • @ka_lin 我该怎么做?抱歉,我是 cookie 新手
  • @iamj:请参阅stackoverflow.com/questions/14573223/…,了解有关在客户端查看 cookie 的说明。

标签: php ajax cookies


【解决方案1】:

在您的代码中,您将 $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);

【讨论】:

  • 让我试试 ;)
  • 感谢您的回复。我已经在我的代码中解决了这个问题。我只是稍微修改了你的代码:)
【解决方案2】:
<?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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-13
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2021-01-20
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多