【问题标题】:How to increment count using session and id of a file using php如何使用 php 使用 session 和 id 增加计数
【发布时间】:2014-05-07 03:17:33
【问题描述】:

下面显示了我的代码,以增加我网站的发布视图数量。现在,每当我单击刷新时它都会增加。我在代码的某些部分使用了会话命令,但是它不起作用,每当我单击刷新时它都会增加。我想了解如果他们在同一个会话中,我怎么能不让用户增加会话。

如果您能帮助我,将不胜感激。

<?php   
session_start();
$_SESSION['counted'] = true;

if (isset($_GET['id'])) {
    $file_id = ($_GET['id']); //$id is a new vairable given value to the id selected in publication.php

    if ($file_id <= 0) { //check if id is less than or equal to 0
        die('The ID is invalid, please check the technical process!');
    } else {
        mysql_query("SELECT * FROM files WHERE id='$file_id'");

        if (!isset($_SESSION['id'])) {
            $_SESSION['id'] = 0;
            $query = "UPDATE files SET visitors=visitors+1 WHERE id='$file_id'";
            mysql_query($query);
            mysql_close();
            session_destroy();
        }
    }
}
?>

【问题讨论】:

    标签: php html mysql session count


    【解决方案1】:

    每次刷新时它都会增加的原因是因为以下代码行:

    session_destroy();
    

    它所做的是(如名称所示)在每次增量后销毁您的会话,因此下次页面加载时, $_SESSION['id'] 不再实例化,因此您的 if(!isset($ _SESSION['id'])) 总是返回 true。

    您可以尝试以下方法:

    <?php   
    session_start();
    $_SESSION['counted'] = true;
    
    if (isset($_GET['id'])) {
        $file_id = ($_GET['id']); //$id is a new variable given value to the id selected in publication.php
    
        if ($file_id <= 0) { //check if id is less than or equal to 0
            die('The ID is invalid, please check the technical process!');
        } else {
            mysql_query("SELECT * FROM files WHERE id='$file_id'");
    
            if (!isset($_SESSION['id'][strval($_GET['id'])])) {
                $_SESSION['id'][strval($_GET['id'])] = true;
                $query = "UPDATE files SET visitors=visitors+1 WHERE id='$file_id'";
                mysql_query($query);
                mysql_close();
            }
        }
    }
    ?>
    

    我使用了一个数组 $_SESSION['id'] 来为每个不同的页面 ID 存储一个键,然后每次我们测试是否需要增加您的计数器时,我们都会检查该页面是否存在数组键,如果是这样,我们就不会增加。

    希望这会有所帮助! :)

    【讨论】:

    • 删除会话销毁的问题是,当我离开页面并转到具有相同计数器但不同 ID 的另一个页面时,它不会增加。但是,就像您说的那样,如果我们确实销毁会话,它将永远增加该页面 id 的计数器。例如:php?id=149 & php?id=150 是不同的页面,但使用相同的计数器。
    • 很抱歉,在您放置“$_SESSION['id'][$_GET['id ']] = 真;"。您对此类错误有任何线索吗?
    • 啊,对不起。您需要先将其转换为字符串。这样它将是一个关联数组。当我再次访问计算机时,我会修正我的答案。
    • 当然。我会等你的。
    • 我仍然有问题。它在“ if (!isset(strval($_SESSION['id'][$_GET['id']]))) 行中显示“致命错误:无法在写入上下文中使用函数返回值” .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多