Как создать счётчик посещаемости сайта на PHP и MySQL без обнуления на следующий день?

Есть пример как создать счётчик посещаемости сайта на PHP. Но каждый день он обнуляется. Может можно его как-то переделать, чтобы считать статистику и по каждому дню отдельно, и выводить общее количество посетителей за всё время?
<?php
// Хост (обычно localhost)
$db_host = "localhost";
// Имя базы данных
$db_name = "test_db";
// Логин для подключения к базе данных
$db_user = "root";
// Пароль для подключения к базе данных
$db_pass = "";

$db = mysqli_connect ($db_host, $db_user, "", $db_name) or die ("Невозможно подключиться к БД");


// Указываем кодировку, в которой будет получена информация из базы
@mysqli_query ($db, 'set character_set_results = "utf8"');

// Получаем IP-адрес посетителя и сохраняем текущую дату
$visitor_ip = $_SERVER['REMOTE_ADDR'];
$date = date("Y-m-d");

// Узнаем, были ли посещения за сегодня
$res = mysqli_query($db, "SELECT `visit_id` FROM `stats_visits` WHERE `date`='$date'") or die ("Проблема при подключении к БД");

// Если сегодня еще не было посещений
if (mysqli_num_rows($res) == 0)
{
    // Очищаем таблицу ips
    mysqli_query($db, "DELETE FROM `stats_ip`");

    // Заносим в базу IP-адрес текущего посетителя
    mysqli_query($db, "INSERT INTO `stats_ip` SET `ip_address`='$visitor_ip'");

    // Заносим в базу дату посещения и устанавливаем кол-во просмотров и уник. посещений в значение 1
    $res_count = mysqli_query($db, "INSERT INTO `stats_visits` SET `date`='$date', `hosts`=1,`views`=1");
}

// Если посещения сегодня уже были
else
{
    // Проверяем, есть ли уже в базе IP-адрес, с которого происходит обращение
    $current_ip = mysqli_query($db, "SELECT `ip_id` FROM `stats_ip` WHERE `ip_address`='$visitor_ip'");

    // Если такой IP-адрес уже сегодня был (т.е. это не уникальный посетитель)
    if (mysqli_num_rows($current_ip) == 1)
    {
        // Добавляем для текущей даты +1 просмотр (хит)
        mysqli_query($db, "UPDATE `stats_visits` SET `views`=`views`+1 WHERE `date`='$date'");
    }

    // Если сегодня такого IP-адреса еще не было (т.е. это уникальный посетитель)
    else
    {
        // Заносим в базу IP-адрес этого посетителя
        mysqli_query($db, "INSERT INTO `stats_ip` SET `ip_address`='$visitor_ip'");

        // Добавляем в базу +1 уникального посетителя (хост) и +1 просмотр (хит)
        mysqli_query($db, "UPDATE `stats_visits` SET `hosts`=`hosts`+1,`views`=`views`+1 WHERE `date`='$date'");
    }
}


// Извлекаем статистику по текущей дате
$res = mysqli_query($db, "SELECT `views`, `hosts` FROM `stats_visits` WHERE `date`='$date'");
$row = mysqli_fetch_assoc($res);

echo '<p>Уникальных посетителей: ' . $row['hosts'] . '<br />';
echo 'Просмотров: ' . $row['views'] . '</p>';

?>
  • Вопрос задан
  • 420 просмотров
Пригласить эксперта
Ответы на вопрос 2
tsklab
@tsklab
Здесь отвечаю на вопросы.
У вас ничего не обнуляется. Вы же сами пишите и читаете данные за один день, а про другие дни — забываете, но они в таблице stats_visits сохраняются.
Ответ написан
@demiancz Автор вопроса
Короче я сделал всё вот так:

$result = mysqli_query($db, "SELECT SUM(hosts) AS `value_sum` FROM `dnik_stats_visits`"); 
$rowAll = mysqli_fetch_assoc($result); 

echo 'Всего:  ' . $rowAll['value_sum'];


Но может кто-нибудь подскажет как мне
mysqli_query($db, "SELECT SUM(hosts) AS `value_sum` FROM `dnik_stats_visits`");

объединить с
$res = mysqli_query($db, "SELECT `views`, `hosts` FROM `stats_visits` WHERE `date`='$date'");


чтобы одной строкой всё было красиво.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы