首先是代码:
<?php
$qty = $_GET['qty'];
for($i=0; $i < $qty; $i++)
{
setcookie('animals', $_COOKIE['animals'].'(lion)', time()+3600);
}
?>
这是我正在尝试做的事情:
我想将“animals”cookie的值设置为“(lion)”。应该在cookie中的“(lion)”实例的数量由“qty”GET参数的值确定。例如,如果页面url是:
http://site.com/script.php?qty=10
然后cookie的值应为:
(lion)(lion)(lion)(lion)(lion)(lion)(lion)(lion)(lion)(lion)
但现在它只是设置一次值尽管setcookie函数在循环内部,为什么它不起作用?
答案 0 :(得分:3)
由于Cookie的工作方式(浏览器需要将值作为页面请求的一部分发送回服务器),您无法在单个页面加载中读取和更新cookie的内容,就像您一样'试图。
因此,不要试图将值附加到$ _COOKIE数组中的变量,而只需使用临时变量:
<?php
$quantity = intval($_GET['qty']) ? intval($_GET['qty']) : 10;
$tempString = '';
for($loop=0; $loop < $quantity; $loop++) {
$tempString .= '(lion)';
}
setcookie('animals', $tempString, time()+3600);
?>
答案 1 :(得分:2)
$_COOKIE
仅包含传递给脚本的:
通过HTTP Cookie传递给当前脚本的关联变量数组。
setcookie
仅更改HTTP响应标头。另请参阅documentation:
设置好Cookie后,可以使用
$_COOKIE
数组在下一个页面加载时访问它们。
即。它不会修改$_COOKIE
数组。
你可以这样做:
$str = '';
for($i=0; $i < $qty; $i++)
{
$str .= '(lion)';
}
setcookie('animals', $str, time()+3600);
答案 2 :(得分:2)
$_COOKIE
变量不可用。设置cookie不会设置变量。
来自http://php.net/manual/en/function.setcookie.php:
设置好Cookie后,可以使用$ _COOKIE或$ HTTP_COOKIE_VARS数组访问下一页加载。
(强调我的。)
答案 3 :(得分:1)
你为什么不这样做:
<?php
$qty = $_GET['qty'];
$animals = '';
for($i=0; $i < $qty; $i++)
{
$animals.='(lion)';
}
setcookie('animals', $animals, time()+3600);
?>
答案 4 :(得分:1)
您可以使用内置的str_repeat()
功能:
$qty = $_GET['qty'];
setcookie('animals', str_repeat("(lion)", $qty), time()+3600);