DANFA

Счётчик просмотров страницы на PHP

При создании или допилки сайта, может потребоваться написать счетчик просмотров страницы, например, для того, чтобы знать сколько человек читали заметку. Реализовать счетчик просмотров на самом деле не сложно, достаточно добавить соответствующее поле в таблице записей (статей, комментариев, фотографий и так далее), значение которого будет 0, после чего выполнять запрос на увеличение значения на 1 при каждом посещении страницы.

Как увеличить значение поля, говорится в теме: Увеличить значение поля на 1 (MySQLi). Постараюсь рассказать, как это можно использовать. Допустим, нам необходимо установить счетчик просмотров для статей, где все статьи хранятся в таблице "blog". В данную таблицу добавляем поле "view" типа "int", со значением "0". Теперь выполняем запрос, при каждом посещении страницы:
UPDATE blog SET view = view + 1 WHERE blog_id = \'' . $blog_id . '\'

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

Возможно, потребуется считать только уникальные просмотры, например, один человек трижды открывал страницу, а его посещение зафиксировалось только одно, то, что было первым. Тут следует не только считать просмотры, но и вести логи посещений, например, по IP адресу. Значит, создаем таблицу "logs", где будет два основных поля (не считая id лога): IP пользователя и id статьи, которую посетил этот IP. Далее, при посещении какой то статьи, получаем IP пользователя и ID статьи, используя эти данные, проверяем наличие записи в таблице:
SELECT id FROM logs WHERE user_ip = \'' . $ip . '\' AND blog_id = \'' . $blog_id . '\'

Выполнив этот запрос, проверяем, есть ли такая запись. Если запись такая имеется, значит пользователь уже посещал страницу, если записи нет, то добавляем запись в таблицу "logs" и прибавляем единицу к количеству просмотров.
Вот собственно и все.

Если у вас есть вопросы по данной теме, пожалуйста, задавайте их, постараюсь помочь.