Кто OnLine?
Среда, 27 июля 2011 г.Рубрика: PHP программирование -> Готовые решения
Метки: online | php | who
Просмотров: 371
Подписаться на комментарии по RSS
И Вы не раз над этим задумывались...
Многие ставят себе на сайт специальные баннеры, которые толком ничего не показывают...
В этом уроке мы с Вами поговорим о том, как создать скрипт, позволяющий просмотреть кол-во посетителей на сайте.
Для реализации такой скрипта нам понадобится sql-запрос в базу данных.
CREATE TABLE online ( id tinytext NOT NULL, date datetime NOT NULL default '0000-00-00 00:00:00' ) TYPE=MyISAM;
После sql-запроса можно продолжать наше обучение.
Сначала стоит определиться - как мы будем определять что этот пользователь есть на сайте, или его нет?
Очень просто - мы воспользуемся уникальными id сессий.
Эти id мы будем сравнивать с id, которые будут находится в базе - если такого id не будет, то мы их добавим, и уже сможем понимать что кто-то присутствует.
Ещё один момент - если пользователь не будет заходить на страницу например минут - 10, то мы удаляем его id из базы - и он уже не он-лайн.Значение 10 можно легко изменить в sql запросе - в конце кода web-приложения.
А теперь объясним пошагово что делает наш код:
1) Стартуем сессию
2) Заносим уникальный id сессии в переменную
3) Соединяемся с базой данных
4) Проверяем есть ли такой id в базе, если база не работает, то выдаём ошибку
5) Если есть, то заменяем его время посещения
6) Если нет, то заносим его id и время посещения в базу
7) Если каких-то пользователей нет 10 минут, то удаляем их из базы
8) Выводим кол-во посетителей на экран
Вот код:
<?php // Начинаем сессию session_start(); // Получаем уникальный id сессии $id_session = session_id(); // Устанавливаем соединение с базой данных $db = mysql_connect ( "localhost", "root", "" ); mysql_select_db ( "site", $db ); // Проверяем, присутствует ли такой id сессии в базе данных $res = mysql_query ( "SELECT * FROM online WHERE id = '$id_session'" ); // Если нет, то выводим ошибку if( !$res ) { exit ( "<p>Ошибка в запросе к таблице сессий</p>" ); } /* * Если сессия с таким номером уже существует, * значит пользователь online - обновляем время его * последнего посещения */ if( mysql_num_rows ( $res ) > 0 ) { mysql_query( "UPDATE online SET date = NOW() WHERE id = '$id_session'" ); } else { // Иначе, если такого номера нет - посетитель только что // вошёл - помещаем в таблицу нового посетителя if ( !mysql_query ( "INSERT INTO online VALUES('$id_session', NOW())" ) ) { exit ( "<p>Ошибка при добавлении пользователя</p>" ); } } /* * Будем считать, что пользователи, которые отсутствовали * в течении 10 минут - покинули сайт - удаляем их * id_session из базы данных */ mysql_query("DELETE FROM online WHERE date < NOW() - INTERVAL '10' MINUTE"); /* * Вытаскиваем кол-во посетителей на сайте из базы, и выводим это кол-во на экран */ $query = mysql_query ( "SELECT COUNT(*) FROM online" ); $row = mysql_fetch_array ( $query ); echo "<tt>Посетителей на сайте - ".$row[0]."</tt>"; ?>


Спасибо большое, всё очень хорошо работает:-)