在数据库的帮助下在PHP中创建一个命中计数器?

在数据库的帮助下在PHP中创建一个命中计数器?,php,mysql,database,Php,Mysql,Database,我有URL为$fileID.php的网页 我正在尝试提取$fileID,然后使用它 $query = $mysqli->query("SELECT * FROM tablename WHERE ID = $fileID"); $rows = mysqli_fetch_array($query); $hits = $rows['HITS']; $hits = $hits + 1; $query = $mysqli->query("UPDATE tablename SET HITS =

我有URL为$fileID.php的网页 我正在尝试提取$fileID,然后使用它

$query = $mysqli->query("SELECT * FROM tablename WHERE ID = $fileID");
$rows = mysqli_fetch_array($query);
$hits = $rows['HITS'];
$hits = $hits + 1;
$query = $mysqli->query("UPDATE tablename SET HITS = $hits WHERE ID = $fileID");
echo 'Total hits on page'.$hits.'';
我不知道如何只获取$fileID部分,我想问我的其余过程是否正确

编辑

根据上面的代码,点击量会停留在1。我在想,每次页面刷新后,它们都会更新为+1。

试试这个:

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);
?>
如果有帮助,请参阅。

尝试以下方法:

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);
?>

如果有帮助,请参见。

您可以像这样确定$fileId:

/* $_SERVER['PHP_SELF'] results to e.g. '/directory/onemore/5.php' */
/* basename(...) results to e.g. '5.php' */
$fileName = basename($_SERVER['PHP_SELF']);
/* take the text before the last occurrence of '.' */
$fileID = substr($fileName, 0, strrpos($fileName, '.'));


$query = $mysqli->query("UPDATE tablename SET HITS = HITS + 1 WHERE ID = $fileID");

$query = $mysqli->query("SELECT * FROM tablename WHERE ID = $fileID");
$rows = mysqli_fetch_array($query);
$hits = $rows['HITS'];
echo 'Total hits on page'.$hits.'';

您可以按如下方式确定$fileId:

/* $_SERVER['PHP_SELF'] results to e.g. '/directory/onemore/5.php' */
/* basename(...) results to e.g. '5.php' */
$fileName = basename($_SERVER['PHP_SELF']);
/* take the text before the last occurrence of '.' */
$fileID = substr($fileName, 0, strrpos($fileName, '.'));


$query = $mysqli->query("UPDATE tablename SET HITS = HITS + 1 WHERE ID = $fileID");

$query = $mysqli->query("SELECT * FROM tablename WHERE ID = $fileID");
$rows = mysqli_fetch_array($query);
$hits = $rows['HITS'];
echo 'Total hits on page'.$hits.'';

如果您不需要每次打印点击,您可以在一个查询中增加它,这会更加清晰和高效

UPDATE tablename SET hits = hits + 1 WHERE id = $fileID

如果您不需要每次打印点击,您可以在一个查询中增加它,这会更加清晰和高效

UPDATE tablename SET hits = hits + 1 WHERE id = $fileID

正在获取URL的$fileID: 查看一下-此函数在不同部分提取URL

在您的情况下,它将是:

$path_parts = pathinfo($_SERVER["SCRIPT_FILENAME"]);
$fileID = $path_parts['filename']; 
您的更新查询将起作用,如果您只想计数而不显示新值,您可以使其更简单-在更新表行时只增加点击次数:

$query = mysqli->query("UPDATE tablename SET HITS = HITS+1 WHERE ID = $fileID");

正在获取URL的$fileID: 查看一下-此函数在不同部分提取URL

在您的情况下,它将是:

$path_parts = pathinfo($_SERVER["SCRIPT_FILENAME"]);
$fileID = $path_parts['filename']; 
您的更新查询将起作用,如果您只想计数而不显示新值,您可以使其更简单-在更新表行时只增加点击次数:

$query = mysqli->query("UPDATE tablename SET HITS = HITS+1 WHERE ID = $fileID");


小提示:您也可以在数据库$mysqli->query(“updatetablename SET HITS=HITS+1”)中向这样的值添加1;非常感谢。你知道我怎样才能把它提取出来吗$fileID@Asain当前位置如果TheNAkos打算回答问题,我相信他/她会发布答案,而不是评论。但评论有点简明扼要。当然,“…点击率=点击率+1…”安全得多,因为它避免了由于计时/消费货币而导致的不精确性。但是updatestatemnt应该有一个WHERE子句来指定要更新的行。如果执行SELECT的唯一原因是查找$row['HITS']的现有值,则它是reduntant。这里的代码中还有其他一些错误做法。旁注:您需要使用
WHERE
子句。这样做将更新您的所有行。谢谢。它实际上已经更新了所有命中率。小提示:您也可以在数据库$mysqli->query(“update tablename SET hits=hits+1”)中向这样的值添加1;非常感谢。你知道我怎样才能把它提取出来吗$fileID@Asain当前位置如果TheNAkos打算回答问题,我相信他/她会发布答案,而不是评论。但评论有点简明扼要。当然,“…点击率=点击率+1…”安全得多,因为它避免了由于计时/消费货币而导致的不精确性。但是updatestatemnt应该有一个WHERE子句来指定要更新的行。如果执行SELECT的唯一原因是查找$row['HITS']的现有值,则它是reduntant。这里的代码中还有其他一些错误做法。旁注:您需要使用
WHERE
子句。这样做会更新你所有的行。谢谢。它实际上已经更新了所有的点击量。我尝试了这段代码,之后把我的MySQL代码写在上面。它已将数据库中的每个命中值设置为1,然后停止更新。我发现您的sql语句中有一个错误,并更新了上面的答案。还有一个问题,echo语句现在显示了页面上的总点击量,之后什么都没有。我检查了我的数据库,点击量没有增加,它们设置为0。我尝试了这段代码,然后将我的MySQL代码写在上面。它已将数据库中的每个命中值设置为1,然后停止更新。我发现您的sql语句中有一个错误,并在上面更新了我的答案。仍然存在一个问题,echo语句现在在页面上显示
总命中数
,之后什么都没有。我检查了我的数据库,命中数没有增加。它们设置为0