Як зробити свій лічильник відвідуваності для сайту на PHP та MySQL

Насамперед створюємо дві таблиці в нашій базі даних (якщо у вас ще немає бази даних, то створіть її).

Таблиця stats_ip

CREATE TABLE `stats_ip` (
  `ip_id` int(12) NOT NULL AUTO_INCREMENT,  
 `ip_address` varchar (50) NOT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

Таблиця stats_visits

CREATE TABLE `stats_visits` (
  `visit_id` int(12) NOT NULL AUTO_INCREMENT,  
 `date` date NOT NULL,`hosts` int(12) NOT NULL,`views` int(12) NOT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

У першій таблиці створюється 2 поля:

  • ip_id (int (12), первинний ключ, автоінкремент) — ідентифікатор IP-адреси;
  • ip_address (varchar (50)) — сама IP-адреса відвідувача.

У другій таблиці створюються 4 поля:

  • visit_id (int (12), первинний ключ, автоінкремент) - ідентифікатор візиту;
  • date (date) — дата візиту;
  • hosts int(12) — кількість хостів (унікальних відвідувань);
  • views int(12) — кількість хітів (переглядів сторінок).

Лічильник відвідуваності сайту PHP

<?php
// Хост (зазвичай localhost)
$db_host = "localhost";
// Ім'я бази даних
$db_name = "test_db";
// Логін для підключення до бази даних
$db_user = "root";
// Пароль для підключення до бази даних
$db_pass = "";

$db = mysqli_connect ($db_host, $db_user, $db_pass, $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, "TRUNCATE TABLE `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);

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

echo '<p>Кількість переглядів сьогодні: ' . $row['views'] . '<br />';
echo 'Відвідувачів сьогодні: ' . $row['hosts'] . '<br />';
echo 'Відвідувачів за цей час ' . $rowAll['value_sum'] . '</p>';

?>

Main Menu