submit 和我的 result4.php '; print_r($_COOKIE["lastvi-6ren">
gpt4 book ai didi

php - $_COOKIE 仅存储最后插入的值

转载 作者:搜寻专家 更新时间:2023-10-31 21:04:54 24 4
gpt4 key购买 nike

我试图在 cookie 中插入多个值,但我只能存储一个值。听到是我的代码。

<?php
session_start();
$rand= "SED".rand(10000,99999);
?>
<!doctype>
<html lang="en">
<body>

<form action="result4.php" method="post">
<input type="hidden" name="productid" value="<?=$rand?>">
<button type="submit">submit</button>
</form>
</body>
</html>

和我的 result4.php

<?php
$cookie_name = "lastview";
$cookie_value = array($_POST['productid']);
$init = json_encode($cookie_value);
setcookie($cookie_name, $init, time() + (86400 * 30));
?>
<?php
echo count($_COOKIE["lastview"]);
echo '<pre>';
print_r($_COOKIE["lastview"]);
echo '</pre>';
?>

输出

1
["SED73204"]

我想得到这个

5
["SED73204"]
["SED73507"]
["SED23207"]
["SED73286"]
["SED23294"]

最佳答案

如前所述,检查 cookie 中是否已存在值。如果是,则首先提取它,然后添加新值。

$cookie_name = "lastview";

// Set the cookie value from previous (if exists) or else an empty array
$cookie_value = (isset($_COOKIE[$cookie_name])) ?
json_decode($_COOKIE[$cookie_name]) : array();

// Add the new value to the array if one exists
if (isset($_POST['productid']) && is_numeric($_POST['productid'])) {
$cookie_value[] = $_POST['productid'];
}

// Set the cookie
setcookie($cookie_name, json_encode($cookie_value), time() + (86400 * 30));

您可能希望将此处对 is_numeric 的调用替换为 preg_match 以检查更具体的产品 ID 格式。例如:

if (preg_match('/^[\w]{3}[\d]{5}$/', $_POST['productid'])) { ... }

此外,您将无法在与 setcookie() 相同的执行周期中看到 $_COOKIE 数组中的任何值。在您看到 $_COOKIE 数组中填充的值之前,您需要等待浏览器在下一个请求中发回 cookie。

关于php - $_COOKIE 仅存储最后插入的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com