<!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&#34; newquestion.php&#34;叫做?如果不是每次调用或打开此页面(newquestion.php)时如何增加此变量?
答案 0 :(得分:5)
不,因为每次调用页面时$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');
或者,如果您有一个处理Web应用程序中所有请求的前端控制器:
VisiterCounter::incrementPageVisits($_SERVER['REQUEST_URI']);
答案 1 :(得分:4)
当您加载此页面时,页面中的每个PHP脚本都会被执行。所以每次你的脚本都是逐行执行的。您无法通过正在尝试的过程计算页面加载编号。
您可以按照以下流程之一进行操作:
1)您可以将其保存到数据库中,每次加载时都可以执行查询以增加计数值。
2)您可以通过以下会话来完成:
session_start();
if(isset($_SESSION['view']))
{
$_SESSION['view']=$_SESSION['view']+1;
}
else
{
$_SESSION['view']=1;
}
答案 2 :(得分:2)
简单的方法是使用SESSION或基于COOKIE的持久性方法。
使用SESSION示例:
在页面的开头(首选的第一行)中输入以下代码:
session_start();
检查是否已创建并记录此用户的会话,如果是,请将q
会话变量的值加1并显示它。
如果没有,请使用值q
初始化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 ,用户会看到一个名称为&#34; q&#34;它的价值,可以通过简单的JavaScript代码,浏览器工具(如谷歌Chrome开发者控制台工具)或任何浏览器扩展(编辑此Cookie,一个列出所有Cookie,值和参数的谷歌浏览器扩展程序)轻松更改价值对于网页)。
请记住,任何session_start
调用(每页只需要一个)或setcookie
调用必须在任何缓冲区输出之前进行,但不仅仅是echo
,{ {1}}。因为两个调用都会生成一个HTTP标头&#34; Set-Cookie&#34;必须在内容体之前发送HTTP标头,在缓冲区刷新后调用此方法将引发异常。
以上两个例子是按用户数计算的。如果您需要每个应用程序或每页计数,您必须实现自定义计数器系统,使用文件系统来存储数据(网页浏览量/页面请求)或数据库以跟踪个人请求(包括日期,IP地址,页面网址,页面名称) ,其他任何事情)。
答案 3 :(得分:0)
它不会像你想象的那样奏效。每次从开始到结束都会执行PHP代码 - 这意味着从一次运行到下一次运行都不会保留任何变量。
为了解决这个问题,您可以使用会话变量(这是一种特殊的变量),它将保留一个值,您可以为站点的每个访问者保留该值。然而,这将适用于每个访客。
如果你想增加所有用户的值(你打开第一个,它说1,我打开第二个,它说2,依此类推)你需要将它存储在一个数据库中(好选项),把它写出来一个文本文件(不是一个很好的选择),或者通过其他一些方法来保存它。
答案 4 :(得分:0)
在任何初始页面中放入$ q初始化,然后递增值。
答案 5 :(得分:0)
或将变量放在会话中递增。有了这个,你至少可以看到一个用户多久调用你的页面。
答案 6 :(得分:0)
您的代码存在的问题是,每次访问页面时,变量首先设置为1。您将不得不使用$ _SESSION。但是,再次使用会话变量的问题是,如果您尝试从不同的PC或不同的系统增加变量的值,则会话将无法工作。为此,最好的方法是在数据库中插入值。