Первым делом создаём две таблицы в нашей базе данных (если у вас ещё нет базы данных, то создайте её).
Таблица 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>';
?> 