Насамперед створюємо дві таблиці в нашій базі даних (якщо у вас ще немає бази даних, то створіть її).
Таблиця 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>';
?> 