переменная increment каждый раз, когда страница вызывается или открывается?

<!doctype html> <html> <head> <title>Index</title> </head> <form action="newquestion.php" method="post"> Question <input type="text" name="question"> <input type="submit"> </form> <body> </body> </html> 

PHP-файл …

 <?php static $q = 1; echo $q; $q++; ?> 

Я новичок в PHP. Будет ли это не увеличиваться на $ q на 1 каждый раз, когда вызывается «newquestion.php»? если нет, как увеличивать эту переменную каждый раз, когда эта страница (newquestion.php) вызывается или открывается?

Каждый скрипт php внутри страницы выполняется при загрузке этой страницы. Поэтому каждый раз ваш скрипт выполняется по строкам. Вы не можете подсчитать номер загрузки страницы в процессе, который вы пытаетесь выполнить.

вы можете выполнить один из следующих способов:

1) вы можете сохранить его в базе данных, и каждый раз, когда он загружается, вы можете выполнить запрос, чтобы увеличить значение счета.
2) вы можете сделать это с помощью сеанса следующим образом:

 session_start(); if(isset($_SESSION['view'])) { $_SESSION['view']=$_SESSION['view']+1; } else { $_SESSION['view']=1; } 

Нет, потому что $q сбрасывается до 1 при каждом вызове страницы. Для отслеживания просмотров страниц вам нужна стратегия сохранения (база данных, запись в текстовый файл и т. Д.).

Также рекомендуется объединить эту функциональность в класс, который можно использовать в вашей базе кода. Например:

 class VisiterCounter { public static function incrementPageVisits($page){ /*! * Beyond the scope of this question, but would * probably involve updating a DB table or * writing to a text file */ echo "incrementing count for ", $page; } } 

И затем в newquestion.php,

 VisiterCounter::incrementPageVisits('newquestion.php'); 

Или, если у вас был фронт-контроллер, который обрабатывал все запросы в вашем веб-приложении:

 VisiterCounter::incrementPageVisits($_SERVER['REQUEST_URI']); 

Самый простой способ – использовать методологию SESSION или COOKIE.

Использование примера SESSION:

В начале страницы (предпочтительная линия) введите следующий код:

session_start();

Убедитесь, что сеанс для этого пользователя был создан и записан, если это так, увеличивайте на единицу значение переменной сеанса q и отобразите его.

Если нет, инициализируйте переменную q session со значением 1 , сохраните и покажите.

  if(!isset($_SESSION["q"]) //check if the array index "q" exists $_SESSION["q"] = 1; //index "q" dosen't exists, so create it with inital value (in this case: 1) else $_SESSION["q"]++; //index "q" exists, so increment in one its value. $q = $_SESSION["q"]; //here you have the final value of "q" already incremented or with default value 1. //doSomethingWith($q); 

Используя пример COOKIE:

 $q = 0; //Initialize variable q with value 0 if(isset($_COOKIE["q"])) //check if the cookie "q" exists $q = $_COOKIE["q"]; //if so, override the q value 0 with the value in the cookie $q++; //increment in one the q value. setcookie("q",$q); //send a HTTP response header to the browser saving the cookie with new value //doSomethingWith($q); //here you have the final value of "q" already incremented or with value 1 like in session. 

С помощью файлов cookie вы не можете использовать $_COOKIE["index"] = value для установки значения для cookie, вместо этого вы должны использовать setcookie . $_COOKIE["index"] предназначен только для чтения значения cookie (если оно существует).

SESSION все еще использует cookie, но только для того, чтобы определить, что пользователь является владельцем этого сеанса, пользователь не может напрямую изменить значение сеанса (только если вы предоставите им способ сделать это).

Используя COOKIE, пользователь увидит файл cookie с именем «q» и его значение и может легко изменить значение с помощью простого кода javascript, инструментов браузера (например, консоли разработчика Google Chrome Developer) или любого расширения для браузера (Edit This Cookie, Google Chrome расширение, в котором перечислены все файлы cookie, значения и параметры для веб-страницы).

Помните, что любой вызов session_start (требуется только один на страницу) или вызовы setcookie должны быть сделаны до того, как любой выход буфера будет похож (но не только) на echo , print . Поскольку оба вызова создают HTTP-заголовок «Set-Cookie», а HTTP-заголовки должны быть отправлены перед телом контента, вызывая эти методы после сброса буфера, генерирует исключение.

Два приведенных выше примера приведены для каждого пользователя. Если вам нужно количество запросов на каждую страницу или количество страниц, вы должны внедрить собственную систему счетчиков, используя файловую систему для хранения данных (запросы страниц / страниц) или базу данных для отслеживания запросов пользователей (с датой, IP-адресом, URL-адресом страницы, именем страницы , что-нибудь еще).

Это не сработает, как вы думаете. PHP-код выполняется каждый раз от начала до конца – это означает, что никакие переменные не переходят с одного запуска на другой.

Чтобы обойти это, вы можете использовать переменную сеанса (это особая разновидность переменной), которая сохранит в ней значение, которое вы могли бы сохранить для каждого посетителя сайта. Это, однако, будет работать для КАЖДОГО ПОСЕТИТЕЛЯ индивидуально.

Если вы хотите увеличить значение для всех пользователей (вы открываете первый, он говорит «1», я открываю второй, он говорит «2» и т. Д.) Вам нужно либо сохранить его в базе данных (хороший вариант), записать его в текстовый файл (не очень хороший вариант) или волшебство каким-либо другим способом сохранить его.

Поместите инициализацию $ q на любую из ваших страниц инициализации, затем увеличьте значение.

или поместите переменную для увеличения в сеансе. с этим вы могли бы хотя бы увидеть, как часто один пользователь вызывает ваши страницы.

Проблема с вашим кодом заключается в том, что переменная сначала устанавливается в 1 каждый раз, и каждая страница посещается. Вам придется использовать $ _SESSION. Но опять же проблема с использованием переменной сеанса будет заключаться в том, что если вы пытаетесь увеличить значение переменной с разных ПК или разных систем, сеанс не будет работать. Для этого лучше всего вставить значение в базу данных.