基于MySQL数据库的访问者计数器工作在

时间:2017-10-06 14:05:54

标签: php database mysqli

我想在我的网站上设置访问者计数器,因此我尝试使用MySQL数据库并根据IP地址和访问日期对访问者进行计数(每天计算与新访问者相同的IP地址)。计数器今天有部分(仅计算当前访客数量),部分计算来自网站启动的访客(或确切地说,启动计数器)。但是,只有今天的部分才有效。

从数据库获取访问者数据(IP地址和访问日期和时间):

// Get data from database
$query_get_data = "select ip_address, access_date_time from $table_name;";

$mysql_conn = mysqli_connect('localhost', 'root', '', $db_name);
if(!$mysql_conn) {
    die("<strong>ERROR WHILE ACCESSING DATABASE `$db_name`!!!</strong>");
    // access the database was unsuccessful
}

$query = mysqli_query($mysql_conn, $query_get_data);
if(!$query) {
    die("<strong>ERROR WHILE FETCHING DATA FROM TABLE `$table_name` IN DATABASE `$db_name`!!!</strong>");
}

从获取的数据中计算访问者:

if(mysqli_num_rows($query) > 0) {
    while($row = mysqli_fetch_assoc($query)) {
        if(isset($visitors_start_count[$row['ip_address'] . ' IN DATE ' . trim(explode(",", $row['access_date_time'])[0])])) {
            ++$visitors_start_count[$row['ip_address'] . ' IN DATE ' . trim(explode(",", $row['access_date_time'])[0])];
        } else {
            $visitors_start_count[$row['ip_address'] . ' IN DATE ' . trim(explode(",", $row['access_date_time'])[0])] = 1;
        }

        if(trim(explode(",", $row['access_date_time'])[0]) == trim(explode(",", $date_time)[0])) {
            if(isset($visitors_today_count[$row['ip_address']])) {
                ++$visitors_today_count[$row['ip_address']];
            } else {
                $visitors_today_count[$row['ip_address']] = 1;
            }
        }
    }
}

计算访客总数:

$visitors_num_start = 0;
$visitors_num_today = 0;

foreach($visitor_start_count as $counter) {
    ++$visitors_num_start;
}

foreach($visitors_today_count as $counter) {
    ++$visitors_num_today;
}

这是我的输出:

Today is Fri Oct 6th 2017.

You are the 1st visitor today here and 0th from websites launch.

我无法找到阻止整个部分工作的问题。请帮忙:(

1 个答案:

答案 0 :(得分:1)

你错过了一个!您正在将数据填入$visitors_start_count,但在计算时会使用$visitor_start_count(访问者 s _start_count)。

一般情况下,我建议让你的数据库完成繁重的工作并使用一个使用条件的SELECT来查找正确的行(今天,上周,从开始时间开始)和GROUP BY日期和IP地址。