为什么这个简单的PHP For循环不工作?

时间:2011-01-15 22:39:29

标签: php

首先是代码:

<?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函数在循环内部,为什么它不起作用?

5 个答案:

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