php和mysql点击计数器,只计算一次

时间:2014-09-09 08:56:02

标签: php mysql sql counter hit

我尝试了几种方法,但我只能算一次。我在想我的数据库一定有问题吗?当我重置我的数据库coloumn" count"为了0,并刷新页面,它计为1,但之后不再有。

<?php
function update_count() {
    $query = "SELECT `count` FROM `hits`";
    if($query_run = mysql_query($query)) {
        $count++;
        echo $count;
        $query_count = "UPDATE `hits` set `count`='$count'";
        mysql_query($query_count);
    }
}
update_count();
?>

3 个答案:

答案 0 :(得分:3)

那是因为当您刷新页面时$count丢失,您需要从数据库中重新选择它:

$query = "SELECT `count` as cnt FROM `hits`";
$results = mysql_query($query);
$count = mysql_fetch_array($result); // take only the first row.
print_r($count['cnt']);

简单说明,mysql_*函数已弃用mysqli_*prepared statements

答案 1 :(得分:2)

当您刷新页面(或再次运行脚本)时,没有&#34;直接&#34;上一次执行的记忆。脚本结束时,$count值将丢失。 (即使您在代码中多次调用update_count$count仅在您的函数范围内设置)

如果你想要实现类似的东西,你将不得不以某种方式存储该数量:在cookie中,在数据库中或(但可能是最差的方式)直接在文件中。

答案 2 :(得分:1)

您没有将数据库中的计数分配给变量,而只是递增一个新变量(应该抛出错误 - 注意:未定义的变量:count ... - 您是否禁用了错误检查?)实际上分配您的数据库值。因此,为什么你总是得到1 - 你每次刷新时都会创建一个0的新值并加1。

你需要 -

$row = mysql_fetch_row($result);
$count = $row[0];
$count++;

注意我建议你不要在你的数据库中使用count作为字段名,因为它是MySQL和PHP中的保留字。它可能导致意外错误/输出。 Try having a look at this thread

尝试此操作(assuming you have PDO and your connection declared),因为已经指出您使用的逻辑对您的查询有误。

function updateCount() {

# Update count
$queryUpdate = $db->prepare('UPDATE hits SET hitcount = hitcount + 1');
$queryUpdate->execute();

# Get the updated count value
$queryCount = $dbo->('SELECT hitcount FROM hits');
$queryCount->execute();

    # Check that a result is returned and assign result 
    if ($result = $queryCount->fetch(PDO::FETCH_OBJ) {
    return $result->hitcount;
    }

}

# Echo returned value
$value = updateCount();
echo $value;