每次调用或打开页面时增量变量?

时间:2014-04-11 12:01:42

标签: php html

<!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)时如何增加此变量?

7 个答案:

答案 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或不同的系统增加变量的值,则会话将无法工作。为此,最好的方法是在数据库中插入值。