Как сделать свой счётчик посещаемости для сайта на 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