我想在我的网站上做一个访问者计数器,所以我尝试了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.
我找不到阻止整个部分工作的问题。请帮忙:(
你缺少一个s!您正在将数据填充到$visitors_start_count
,但在计数时使用$visitor_start_count
(访客s_start_count)。
不过,总的来说,我建议您的数据库完成繁重的工作,并使用 SELECT,该 SELECT 使用条件来查找正确的行(今天,上周,自时间开始以来)和 GROUP BY 日期和 IP 地址。