Четверг
16 Май 24, 18:36
BYDEM.RU Web Стандарт
Приветствую Вас Гость | RSS
Главная Каталог статей Регистрация Вход
Меню сайта

Категории каталога
PHP [18]
HTML [3]
CSS [2]
Общая информация [7]
MySQL [3]

Мини-чат
200

Главная » Статьи » Учебники » MySQL

Счетчик онлайн

Для того, чтобы скрипт функционировал на сервере должен стоять php5 и MySQL.

Для начала необходимо создать таблицу в вашей базе данных, это можно сделать следующим образом, выполнив запрос:

CREATE TABLE win_online(
id int AUTO_INCREMENT,
ip VARCHAR (30),
browser VARCHAR (60),
time DATETIME,
PRIMARY KEY(id));


После этого можно начать использовать данный код:
<?php
class online
{
//объявляем константы классы с данными к базе данный MySQL
//сервер базы данных
const db_host = 'localhost';
//пользователь базы данных
const db_user = 'windoctor';
//пароль пользователя
const db_pass = '123456789';
//имя базы данных
const db_name = 'online';
//время, по истечении, которого считаем посетителя ушедшего в офф
const time = 600;

//объявляем конструктор
function __construct($ip,$browser)
{
$this->connect();
$this->count_online($ip,$browser);
}

//соединение с базой данных MySQL
private function connect()
{
if(!$this->r = @mysql_connect(self::db_host, self::db_user, self::db_pass)) throw new Exception ('Невозможно подключиться к серверу MySQL!');
if (!@mysql_select_db(self::db_name, $this->r)) throw new Exception ('Ошибка при выборе базы данных!');
}

//записываем нового посетителя или обновляем время его присутсвия на сайте
public function count_online ($ip,$browser)
{
$ip = mysql_real_escape_string($ip);
$browser = strip_tags(trim(substr(mysql_real_escape_string ($browser),0,60)));$this->clean_online();

$q=mysql_query ("SELECT COUNT(id) as total FROM win_online WHERE ip='$ip'",$this->r);
if(!@$all = mysql_fetch_array($q,$this->r)) throw new Exception ('Возникла ошибка при выборке списка он-лайн, приносим вам свои извенения');
if ($all[0] < 1 ) {
mysql_query ("INSERT INTO win_online VALUES (NULL,'$ip','$browser',NOW())",$this->r);
}
else {
mysql_query ("UPDATE win_online SET time=NOW() WHERE ip='$ip'",$this->r);
}
}
//возвращаем массив пользователей он-лайн
public function returnOnlineList()
{
$q = mysql_query ("SELECT * FROM win_online ORDER by id DESC",$this->r);
if (!$q) throw new Exception ('Ошибка при выборке списка он-лайн!');
while ($rows = mysql_fetch_array($q)) {
$array[] = $rows;
}
return $array;
}
//Возвращаем количество посетителей в он-лайне
public function returnAllOnline()
{
$q=mysql_query ("SELECT COUNT(id) as total FROM win_online",$this->r);
if (!$all = mysql_fetch_array($q)) throw new Exception ('Ошибка при подсчёте он-лайн пользователей!');
return (int) $all['total'];
}
//очищение таблицы посетителей от тех кто ушёл в офф-лайн
private function clean_online ()
{
mysql_query ("DELETE FROM win_online WHERE time<NOW()-INTERVAL ".self::time." SECOND",$this->r);
}
}
?>

Как использовать данный класс спросите вы?
Элементарно, отвечу я.

Создаём файл с таким содержимым:

<?php
require_once ('путь до класса');
//инициализируем класс и ловим исключения
try {
$online = new online($_SERVER['REMOTE_ADDR'],$_SERVER['HTTP_USER_AGENT']);
}
catch (Exception $e) {
//просто выводим сообщение, но также для логгирования можно дописать соотвествующие функции, ибо использование исключений предоствляет обширный функционал
echo $e->getMessage();}
?>

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

Чтобы вывести список он-лайн вам необходимо создать страницу со следующим кодом:

<?php
require_once ('путь до класса');
try {
$online = new online($_SERVER['REMOTE_ADDR'],$_SERVER['HTTP_USER_AGENT']);
$arr = $online->returnOnlineList();
$all = $online->returnAllOnline();
echo 'Всего в он-лайн: '.$all;
echo '<br />';
for ($i=0;$i < count($arr);$i++) {
echo 'Браузер: '.$arr[$i]['browser'].'<br /> ip:'.$arr[$i]['ip'].'<br /> Дата: '.$arr[$i]['time'].'<br /><br />';
}
}
catch (Exception $e) {
echo $e->getMessage();
}
?>
Вот и всё, теперь есть у вас на сайте система, которая считает количество пользователей он-лайн.
Класс хорошо прокомментирован, так что думаю с его разбором проблем не будет.

Автор статьи: windoctor
e-mail: admin@wapcoder.com, admin@windoctor.org
Сайт автора: http://sultanov.net, http://wapcoder.org, http://windoctor.org

Все вопросы вы можете задать на форуме wapcoder.com или по e-mail
При перечатке материалов необходимо установить видимую ссылку на http://wapcoder.com

Категория: MySQL | Добавил: bydem (14 Сен 07)
Просмотров: 643 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Поиск

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Copyright MyCorp © 2024