Показать сообщение отдельно

  #4  
Старый 05.08.2008, 01:50
.:EnoT:.
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме:
4832771

Репутация: 1916


По умолчанию

Цитата:
на главной странице форума античата список тех, кто онлайн. нужен скрипт такой, чтобы был вывод на html странице.
эээ..типо список юзеров?
Всё это безобразие делается примерно так:
Создаёшь с БД таблицу например `sessions` примерно с таким содержанием:
Код:
CREATE TABLE `sessions` (
  `session` varchar(32) NOT NULL,
  `date` datetime NOT NULL,
  `username` varchar(100)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Далее в главном файле делаем примерно следующее:
PHP код:
<?php
session_start
();
$session session_id();

$_SESSION['username'] = !empty($_COOKIE['name']) ? $_COOKIE['name'] : ''//Имя юзера (для примера берём с куки)

$interval 15//интервал бездействия юзера в мин

#Экранируем имя юзера (но лучше сделать функцию получше =)))
$u_name = !get_magic_quotes_gpc() ? mysql_real_escape_string($_SESSION['username']) : $_SESSION['username'];
$sql mysql_query("SELECT * FROM `sessions` WHERE `session` = '".$session."'");
if(
$sql && mysql_num_rows($sql) > 0){
   
#Если сессия уже существует то обновляем время
   
mysql_query("UPDATE `sessions` SET `date` = NOW(), `username` = '".$u_name."' WHERE `session`='".$session."'");
}else{
   
#Если не существует то заносим
   
mysql_query("INSERT INTO `sessions` VALUES('".$session."', NOW(),'".$u_name."')");
}
#Удаляем старые сесии
mysql_query("DELETE FROM `sessions` WHERE `date` < NOW() - INTERVAL '".$interval."' MINUTE");

?>
Далее делаем функцию которая получает кол-во гостей и пользователей:
PHP код:
function online(){
    
$sql mysql_query("SELECT COUNT(*) FROM `sessions` WHERE `username` != '' UNION SELECT COUNT(*) FROM `sessions` WHERE `username` = ''");
    
$users mysql_result($sql0);
    
$guests mysql_result($sql1);
    
$vsego $users $guests;
    return array(
           
'vsego' => intval($all),
           
'users' => intval($users),
           
'guests' => intval($guests])
           );

Соответственно фукция возвращает массив. Выводится так:
PHP код:
<?php
$online 
online();
echo 
'Сейчас на сайте '.$online['vsego'].' пользователей ('.$online['users'].' гостей и '.$online['guests'].' гостей)';
?>
А ники юзеров выводятся просто циклом, типо того:
PHP код:
$sql mysql_query("SELECT * FROM `sessions` WHERE `username` != ''");
if(
$sql && mysql_num_rows($sql) > 0){
   while(
$nick mysql_fetch_array($sql)){
      echo 
htmlspecialchars($nick['username']).'<br/>';
   }

Короче в таком духе))
 
Ответить с цитированием