Я реализую счетчик 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>
Редактировать: Спасибо всем, я сделал pre increment вещь и заставил ее работать
Это происходит из-за того, что ++
используется как пост-приращение вместо предварительного приращения. По существу, вы говорите: «Установите $cookie
на значение $_COOKIE['count']
, а затем увеличивайте $_COOKIE['count']
. Это означает, что каждый раз, когда вы его устанавливаете, вы на самом деле делая $cookie
равным 1, и хотя $_COOKIE['count']
показывает его как 2, фактический cookie, который вы отправляете, будет равен только 1. Если вы делаете $cookie = ++$_COOKIE['count'];
вы должны получить правильный результат.
Эта строка является проблемой:
$cookie = $_COOKIE['count']++;
Он не увеличивается так, как вы ожидаете; переменная $cookie
устанавливается в значение $_COOKIE
, а затем $_COOKIE
увеличивается. Это оператор постинкремента.
Вместо этого используйте оператор preincrement, который увеличивает и возвращает:
$cookie = ++$_COOKIE['count'];
массив _COOKIE заполняется ONCE, когда скрипт запускается первым (до того, как фактически выполняется какой-либо код), а затем снова не тронут PHP. Даже если вы вызываете setcookie () для изменения одного из файлов cookie, это изменение НЕ будет действовать до загрузки следующей страницы.
Кроме того, оператор ++ работает в режиме «пост-инкремент». дела
$cookie = $_COOKIE['count']++;
сводится к следующему:
$cookie = $_COOKIE['count']; $_COOKIE['count'] = $_COOKIE['count'] + 1;
Вам нужна версия PRE-increment:
$cookie = ++$_COOKIE['count'];
который увеличивает значение cookie, а THEN присваивает его cookie var.
Вам нужно только сделать это
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>