我正在实施一个php页面计数器,它将跟踪每次用户访问此页面,直到浏览器关闭。我正在检查是否设置了cookie,如果是的话。然后我增加它并重置它的值。但我遇到的问题是计数器总是两个,为什么会这样?
<html>
<head>
<title>Count Page Access</title>
</head>
<body>
<?php
if (!isset($_COOKIE['count']))
{
?>
Welcome! This is the first time you have viewed this page.
<?php
$cookie = 1;
setcookie("count", $cookie);
}
else
{
$cookie = $_COOKIE['count']++;
setcookie("count", $cookie);
?>
You have viewed this page <?= $_COOKIE['count'] ?> times.
<?php }// end else ?>
</body>
</html>
编辑:谢谢大家,我做了预增量工作并让它发挥作用
答案 0 :(得分:7)
这一行是问题所在:
$cookie = $_COOKIE['count']++;
它不会以你期望的方式增加;变量$cookie
设置为$_COOKIE
的值,然后$_COOKIE
递增。这是后增量算子。
改为使用preincrement运算符,该运算符递增,然后返回:
$cookie = ++$_COOKIE['count'];
答案 1 :(得分:7)
这种情况正在发生,因为++
被用作后增量而不是预增量。基本上正在发生的事情是你说,“将$cookie
设置为$_COOKIE['count']
的值,然后增加$_COOKIE['count']
。这意味着每次设置它时你实际上只是在做$cookie
等于1,即使$_COOKIE['count']
显示为2,您发送的实际Cookie也只会等于1.如果执行$cookie = ++$_COOKIE['count'];
,您应该得到正确的结果。
答案 2 :(得分:5)
当脚本首次启动时(实际执行任何代码之前)填充_COOKIE数组,然后PHP不再触及。即使您执行setcookie()调用以更改其中一个cookie,该更改也不会生效,直到下一页加载。
同样,++运算符正在“后递增”模式下工作。做
$cookie = $_COOKIE['count']++;
归结为:
$cookie = $_COOKIE['count'];
$_COOKIE['count'] = $_COOKIE['count'] + 1;
你想要的是PRE-increment版本:
$cookie = ++$_COOKIE['count'];
增加cookie值,然后将其分配给cookie var。
答案 3 :(得分:3)
你只需要这样做
setcookie('count', isset($_COOKIE['count']) ? $_COOKIE['count']++ : 1);
像这样:
<?php
setcookie('count', isset($_COOKIE['count']) ? $_COOKIE['count']++ : 1);
$visitCount = $_COOKIE['count'];
?>
<html>
<head>
<title>Count Page Access</title>
</head>
<body>
<?if ($visitCount == 1): ?>
Welcome! This is the first time you have viewed this page.
<?else:?>
You have viewed this page <?= $_COOKIE['count'] ?> times.
<?endif;?>
</body>
</html>