Php 我的页面浏览量计数器在我的页面上递增1个单位,但在辅助页面上递增3个单位
我在做一个功能来计算访客,浏览量和页面浏览量 现在我只是想计算页面浏览量,但我有一个奇怪的问题 我有一个包含以下列的统计表:“用户、访问、页面视图” 现在我只想在用户访问某个页面时增加我的页面浏览量 每次我访问我的主页,我的页面浏览量都会增加1个单位,但当我访问第二个页面时,我的专栏页面浏览量会增加3个单位,我只需要1个单位 你知道为什么会这样吗 我认为问题出在我的getHome()函数中,因为如果我在getHome()之前或之后调用我的函数countViews(),我会有不同的行为。但我不知道为什么 当我的getHome()上面有我的countViews()时,我似乎在第二页上调用了3次我的函数countViews 但是我只在index.php文件上调用我的函数countViews(),在这个函数下面我有一个getHome()函数,在这里我可以导航到项目中的所有页面Php 我的页面浏览量计数器在我的页面上递增1个单位,但在辅助页面上递增3个单位,php,Php,我在做一个功能来计算访客,浏览量和页面浏览量 现在我只是想计算页面浏览量,但我有一个奇怪的问题 我有一个包含以下列的统计表:“用户、访问、页面视图” 现在我只想在用户访问某个页面时增加我的页面浏览量 每次我访问我的主页,我的页面浏览量都会增加1个单位,但当我访问第二个页面时,我的专栏页面浏览量会增加3个单位,我只需要1个单位 你知道为什么会这样吗 我认为问题出在我的getHome()函数中,因为如果我在getHome()之前或之后调用我的函数countViews(),我会有不同的行为。但我不知道
function countViews(){
$pdo = start();
//if Im not logged as admin
if(!isset($_SESSION['admin'])){
//So at first I read my table stats, if my table dont have any row,
// I create a row with my columns with value of '0'.
$readStats= $pdo->prepare("SELECT * FROM stats");
$readStats->execute();
if($readStats->rowCount()<1){
$insStats= $pdo->prepare("INSERT INTO stats(users, views, page_views) VALUES (?,?,?)");
$insStats->bindValue(1,'0');
$insStats->bindValue(2,'0');
$insStats->bindValue(3,'0');
$insStats->execute();
}
//If my table stats already have one row, I want to increment page_views.
else{
$resultStats= $readStats->fetch(PDO::FETCH_ASSOC);
$incrementPageViews = $resultStats['page_views'] + 1;
$updatePageViews = $pdo->prepare("UPDATE stats set page_views = ?");
$updatePageViews ->bindParam(1,$incrementPageViews);
$updatePageViews ->execute();
}
}
}
函数countview(){
$pdo=start();
//如果我没有以管理员身份登录
如果(!isset($\u会话['admin'])){
//因此,首先我阅读我的表格统计数据,如果我的表格没有任何行,
//我用值为“0”的列创建一行。
$readStats=$pdo->prepare(“从统计中选择*);
$readStats->execute();
如果($readStats->rowCount()准备(“插入统计(用户、视图、页面视图)值(?,,?)”;
$insStats->bindValue(1,'0');
$insStats->bindValue(2,'0');
$insStats->bindValue(3,'0');
$insStats->execute();
}
//如果我的表统计已经有一行,我想增加页面视图。
否则{
$resultStats=$readStats->fetch(PDO::fetch_ASSOC);
$incrementPageViews=$resultStats['Pageu views']+1;
$updatePageViews=$pdo->prepare(“更新统计设置页面\视图=?”);
$updatePageViews->bindParam(1,$incrementPageViews);
$updatePageViews->execute();
}
}
}
My index.php类似于:
<?php
ob_start(); session_start();
require_once('dts/db.php');
$pdo = start();
countViews();
?>
<!DOCTYPE>
<!-- here I have my css and js imports -->
<?php getHome(); ?>
我的第二页:
<title>Untitled Document</title>
</head>
<body>
<!-- here I have my html -->
</body>
无标题文档
getHome()函数:
<?php
function getHome(){
$url = $_GET['url'];
$url = explode('/', $url);
$url[0] = ($url[0] == NULL ? 'index' : $url[0]);
if(file_exists('project/'.$url[0].'.php')){
require_once('project/'.$url[0].'.php');
}
elseif(file_exists('project/'.$url[0].'/'.$url[1].'.php')){
require_once('project/'.$url[0].'/'.$url[1].'.php');
}
else{
require_once('project/404.php');
}
}
?>
我的桌子是这样的:
我可以想到两种可能性
require\u once
文件中有countview我想说的是,我肯定这不是魔法。我不知道为什么会发生这种情况,但我可以帮你找到 在CountView()中执行以下操作:
echo”“;
var\u dump(“从以下位置调用的计数视图:”。\uuuuu FILE\uuuuuuu);
回声“;
如果您仍然找不到为什么要使用它,请告诉我,我将帮助您设置xdebug和profiling,它将准确地告诉您包含的文件以及按调用/包含顺序调用的函数
像这样:
您所能做的就是将您的函数更改为更简单的函数,并检查此问题是否仍然存在
function countViews(){
$tmp = $_SERVER["REQUEST_URI"]; // huge logging: $tmp = print_r($_SERVER, 1);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/viewslog.txt', $tmp, FILE_APPEND | LOCK_EX );
$pdo = start();
如果仍然不起作用,您应该向我们展示您的
stats
表中有哪些数据。您将所有404个请求路由到index.php。看起来您在辅助页面上缺少了2个资源。
尝试修改countview()函数,如下所示:
我会开始查看您的服务器日志,它会告诉您有哪些文件被请求,似乎有些文件被多次请求。问题可能在于函数的调用方,而不是函数定义。我不知道您希望我们如何告诉您为什么要多次调用函数。顺便说一句,您应该这样做了解如何在重复密钥更新时使用
INSERT…以便您不需要SELECT
查询。您仍然没有提供足够的信息。问题在于辅助页面,对吗?请向我们展示它们的外观。感谢您的帮助Barmar!抱歉,但我不理解您的“您应该学习如何使用INSERT…”。我仍然是php的初学者,我通常会像我在问题中那样进行插入。我会用我在第二页中的内容更新我的问题,但我认为他们没有任何可能导致此问题的内容。你应该在stats
表中添加主键。然后执行插入到stats(stats\u id、用户、视图、页面视图)重复键更新页面上的值(1、、?、?)\u views=page\u views+1
。感谢您的回答Chibueze Opata。但现在,我只计算index.php文件的视图。在我的第二个页面中,我没有ant重定向代码。my getHome()在我的index.php文件中调用的函数,执行所有导航,我只在index.php文件中调用它。谢谢你的回答。我得到以下信息:string(74)“Count Views being being being called from:F:\Xampp\htdocs\website\code\functions.php”。这个functions.php是我拥有所有函数的地方。当你放置countViews()时,他会转储它3次吗回家后和访问辅助页面?不,只转储一次!您还可以使用此技术在整个应用程序生命周期中跟踪指向countview
的所有调用路径。谢谢您的帮助。但我仍然有相同的问题。我真的能理解发生了什么。可能是因为我的.htaccess文件?@Marby不是,但很难说。我认为最好是将你的小应用程序放到github上,我们可以在我们的PC上运行它并测试正在发生的事情。
function countViews(){
$pdo = start();
//if Im not logged as admin
if(!isset($_SESSION['admin'])){
//So at first I read my table stats, if my table dont have any row,
// I create a row with my columns with value of '0'.
$sth= $pdo->query("SELECT * FROM stats LIMIT 1");
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
if(!$result){
$pdo->exec("INSERT INTO stats(users, views, page_views) VALUES (0,0,0)");
}
//If my table stats already have one row, I want to increment page_views.
else{
$pdo->exec("UPDATE stats set page_views = page_views + 1");
}
}
}
function countViews(){
$tmp = $_SERVER["REQUEST_URI"]; // huge logging: $tmp = print_r($_SERVER, 1);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/viewslog.txt', $tmp, FILE_APPEND | LOCK_EX );
$pdo = start();