【问题标题】:Creating hit Counter创建命中计数器
【发布时间】:2012-08-23 20:50:46
【问题描述】:

我正在尝试为我的网站创建一个计数器,并且我已经为它开发了以下代码。我只在我的主页的 Codeigniter 的主控制器中包含了以下代码。

起初我认为代码工作正常,但我发现如果我不继续浏览页面然后再次转到主页它不会更新数据。我的意思是:如果我第一次访问我的主页,它会更新数据,但如果我刷新页面 10 秒后它不会更新数据。但如果我继续刷新它 10 秒,它就会起作用。

那么你能告诉我如何让它更新数据而不必继续浏览页面或刷新主页吗?

谢谢:)

function __construct() {

    parent::__construct();

    // Visitor Counter
    if (!$this->session->userdata('timeout')) {

        $out = time() + 10; // I will change it to $out = time() + 60*60; later 
        $this->session->set_userdata('timeout', $out);
        mysql_query("UPDATE cane_visitor_counter SET visitor_stat = visitor_stat+1 
              WHERE id = '1'");
    } else {
        $timeout_time = $this->session->userdata('timeout');
        if (time() > $timeout_time) {

            $this->session->set_userdata(array('timeout' => ''));
            $this->session->sess_destroy();
        }
    }
}

编辑

我想要实现的是当用户第一次访问该网页时,我想更新我的数据库。在 10 秒内(例如目的),如果访问者再次访问主页,则不会更新数据库。但是10秒后如果他再次访问主页,我想更新我的数据库。

谢谢:)

【问题讨论】:

  • 这不是访客计数器,这是命中计数器
  • 是的,你的权利。我正在更新我的问题
  • @black_belt - 所以你希望它在每次调用时都更新吗?因为你所要做的就是删除超时代码。
  • CodeIgniter 提供了一个独立于 DBMS 的查询系统,无论如何mysql_* 已被弃用。
  • 这可能无助于回答您的问题,但您应该停止使用mysql_* 函数。它们正在被弃用。请改用PDO(PHP 5.1 起支持)或mysqli(PHP 4.1 起支持)。如果您不确定使用哪一个,read this article

标签: php codeigniter codeigniter-2


【解决方案1】:

您的代码显示“如果会话中没有超时,请更新计数”。您希望它说“如果会话中没有超时,或者有但它是旧的,请更新计数”。

function __construct() {

    parent::__construct();

    // Visitor Counter
    if (!$this->session->userdata('timeout') || $this->session->userdata('timeout') < time()) {
        $this->session->set_userdata('timeout', time() + 10);
        mysql_query("UPDATE cane_visitor_counter SET visitor_stat = visitor_stat + 1 WHERE id = 1");
    }

}   

我不是 CodeIgniter 用户,所以我假设您正确使用了它的会话功能;我只是以同样的方式使用它们。

【讨论】:

  • 谢谢。我已经尝试过你的代码,我认为它按照我想要的方式工作。谢谢 :) 我想我现在必须改变查询方式。谢谢
猜你喜欢
  • 2016-01-27
  • 2017-03-20
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 2019-07-10
  • 2016-05-28
相关资源
最近更新 更多