Сейчас: 13:46:06   26-го апреля 2024 г.
UsefulScript.ruСкриптыРазныеСчетчик посещений на PHP
26
91

Счетчик посещений на PHP

Итак, создав свой сайт, многие естественно захотят узнать, какие его странички являются наиболее посещаемыми и привлекают больше посетителей. Для того чтобы определить, какие странички Вашего сайта наиболее посещаемые, необходимо установить счетчик посещений на сайт. Причем данный счетчик должен считать не просто количество посетителей сайта, а именно посетителей для каждой странички в отдельности.


Если Вы обратили внимание, то в конце каждой темы нашего сайта уже установлен подобный счетчик, который отображает какое количество раз была посещена каждая страничка сайта.


При разработке скрипта учета количества визитов необходимо предусмотреть, в течение какого времени не будут учитываться повторные заходы одного и того же посетителя. Таким образом, если посетитель Вашего сайта за небольшой промежуток времени вернется на уже посещенную ранее страничку, либо обновит ее несколько раз, то будет засчитан только один просмотр для данной странички.


Для создания такого скрипта Вам понадобится добавить в MySQL таблицу, которая будет содержать в себе id посещенной темы, IP адрес посетителя и время визита. Назовем данную таблицу visit_theme. Структура таблицы visit_theme приведена ниже:


Структура таблицы visit_theme

Также потребуется добавить в основную таблицу, где хранится вся информация по темам сайта (в PHP коде мы назвали данную таблицу all_theme), дополнительное поле visits (тип данных integer). В данном поле мы будем хранить суммарное число посещений темы, которое будет показываться на сайте для конкретной странички.


Далее, на все странички Вашего сайта, где необходимо установить счетчик посещений, добавьте следующий PHP код:

PHP код:
<?php
$theme_id
='';    //Необходимо из базы получить и указать id темы
$ip=$_SERVER['REMOTE_ADDR'];
$time=time();

$res=mysqli_query($db,"SELECT count(id) FROM visit_theme WHERE
    id_theme_visit='"
.$theme_id."' and ip_visit=INET_ATON('".$ip."') and
    date_visit>'"
.($time-86400)."' LIMIT 1");
$count_id=mysqli_fetch_array($res);
if (
$count_id[0]==0) {
 
$res=mysqli_query($db,"UPDATE all_theme SET visits=(visits+1) WHERE
    id='"
.$theme_id."' LIMIT 1");
 
$res=mysqli_query($db,"INSERT INTO visit_theme (id_theme_visit,ip_visit,date_visit)
    VALUES ('"
.$theme_id."',INET_ATON('".$ip."'),'".$time."')");
}
?>

Данный PHP код проверяет в таблице visit_theme, были ли посещения данной странички с данного IP адреса за последние 24 часа (86400 секунд). Если не было, то увеличивает в таблице all_theme для темы с указанным id количество просмотров на единицу и добавляет в таблицу visit_theme новую запись с id посещенной страницы, IP адресом посетителя и временем посещения.


В том месте, где должно выводиться количество посещений темы, добавьте такой PHP код:

PHP код:
<?php
$result
=mysqli_query($db,"SELECT visits FROM all_theme WHERE
    id='"
.$theme_id."' LIMIT 1");
$res=mysqli_fetch_array($result);
echo 
'<span>Просмотров странички - <b>'.$res["visits"].'</b></span>';
?>

Данный код просто получает из базы количество посещений данной темы и выводит на экран.


Чтобы не перегружать базу и не хранить все посещения сайта, таблицу visit_theme необходимо периодически чистить от устаревших записей (старше 24 часов). Для этого достаточно раз в сутки запускать следующий код:

PHP код:
<?php
$res
=mysqli_query($db,"DELETE FROM visit_theme WHERE
    date_visit<'"
.(time()-86400)."'");
?>
Дата создания: 18:30:21 20.04.2014 г.
Посещений: 17020 раз(а).

Комментарии посетителей (10 шт.):
Денис
6
# 2297
(00:15:19  04.03.2015 г.)

Все сделал как написали только вот не знаю, как сделать запрос чтоб получить id темы.
Необходимо из базы получить и указать id темы.
Ответить

Игорь
0
# 3533
(21:14:05  01.11.2016 г.)

Поддерживаю. Как получить id темы? Допустим у меня страничка newc=1. Все перепробовал. Подскажите, пожалуйста.
Ответить

FastFinder
1
# 3563
(12:35:21  14.11.2016 г.)

Ну вы и нубы в комментах сорри: Для первого через пост получи, а эти все скрипты разбей на функции и передавай им id. Для второго ты же используешь GET ну и получай $_GET['newc'] и отдавай функции.
Ответить

DdGrow
0
# 3773
(17:47:50  05.03.2017 г.)

Назовем данную таблицу visit_theme. Структура таблицы visit_theme приведена ниже: - а картинка со структурой таблицы отсутствует. Прошу, добавьте :)
Ответить

Administrator
3
# 3774
(17:53:10  05.03.2017 г.)

Картинка на месте. Обновите страничку.
Ответить

Анна
0
# 3927
(23:55:40  31.05.2017 г.)

База данных пишет MySQL вернула пустой результат (т.е. ноль строк). Подскажите что делать.
Ответить

Administrator
0
# 3931
(19:29:50  01.06.2017 г.)

Перепроверьте структуру таблицы и правильность указания id темы.
Ответить

Марина
0
# 4488
(19:44:21  05.07.2019 г.)

Главное не поставьте для ip_visit integer, потому что будет неправильно записываться IP в БД.
Ответить

Administrator
0
# 4489
(12:09:53  06.07.2019 г.)

Напротив, тип поля должен быть INTEGER, т.к. мы преобразует IP адрес в число при помощи стандартной функции INET_ATON, что позволяет неплохо экономить на размере БД (4 байта INT против 15 байт CHAR) и положительно сказывается на скорости работы с данным полем.
Ответить

Кирилл
-1
# 4777
(17:56:13  02.01.2021 г.)

Здравствуйте, помогите пожалуйста вывести ид темы, совсем слаб в php, не могу понять. Брал скрипт комментариев все работает, пробовал сделать аналогичный запрос ид, не вышло. Возможно из-за конфликта переменных?
Количество просмотров из базы в статье вывожу как <?=$new["visits"]; ?>
Ответить

Закрыть
Ваше имя:
513 + 12 =
Добавить комментарий:
Ваше имя:
513 + 12 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 9

Как Вы узнали о нашем сайте?