Кто OnLine?

Среда, 27 июля 2011 г.
Рубрика: PHP программирование -> Готовые решения
Метки: | |
Просмотров: 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>";
?>
Поделиться...
twitter.com facebook.com vkontakte.ru mail.ru google.com bobrdobr.ru
Комментариев: 1
  1. Спасибо большое, всё очень хорошо работает:-)

Оставьте свой комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор, укажите пароль и свой действующий email.

(обязательно)