php вывод пользователей которые онлайн

Тема в разделе "PHP", создана пользователем Savok32, 27 окт 2015.

  1. Savok32

    Savok32

    Регистрация:
    18 дек 2012
    Сообщения:
    331
    Симпатии:
    51
    Добрый день подскажите, как сделать вывод пользователей которые онлайн на сайте,
    таблица user есть поля id, login, pass, last_visit

    уже всю голову сломал.
     
  2. ValeriusSoft

    ValeriusSoft

    Регистрация:
    4 фев 2015
    Сообщения:
    72
    Симпатии:
    29
    Добрый день, держи скрипт Переход к скрипту
     
  3. Savok32

    Savok32

    Регистрация:
    18 дек 2012
    Сообщения:
    331
    Симпатии:
    51
    не, мне не надо кол-во, надо чтобы он брал пользователей с базы, которые онлайн
     
  4. ValeriusSoft

    ValeriusSoft

    Регистрация:
    4 фев 2015
    Сообщения:
    72
    Симпатии:
    29
    PHP:
    <?php
        
    if(!defined("DNREAD")) exit( 'Access denied!' );
        
    # Подключаем класс Online
        
    include_once( "online.php" );
        try
        {
            
    # Создаём объект класса
            
    $online = new Online( array('logged'=>0) );
          
            
    # Получаем пользователей онлайн
            
    $online $online->Online();
          
            
    # Считаем количества авторизованных онлайн
            
    $users count$online['users'] );
          
            
    # Подключаем шаблон
            
    include_once( "online.tpl.php" );
          
        }
        catch( 
    Exception $error )
        {
            return 
    $error->getMessage();
        }
    Создаёте ещё файлы:
    online.php

    PHP:
    <?php
    if(!defined("DNREAD")) exit( 'Access denied!' );
    class 
    Online
    {
        
    # Настройки
        
    private $as_online 180# Время, в которое пользователь считается онлайн (в секундах)
        
    private $location 'localhost'# Хост БД
        
    private $dbname 'voting'# Название БД
        
    private $user 'root'# Имя пользователя БД
        
    private $password ''# Пароль пользователя БД
        
    private $table 'guests'# Название таблицы с гостями
        # Настройки (конец)
      
        # Тут хранятся переменные
        
    private $vars = array();
      
        
    # Тут хранится подключение к базе
        
    private $mysqli;
      
        
    # Тут хранится, авторизован или нет пользователь
        
    private $is_logged;
      
        
    # Конструктор класса
        
    public function __construct$usermain )
        {
            
    # Подключаемся к БД
            
    $this->connectDB();
          
            
    # Выставляем, авторизован ли пользователь
            
    $this->is_logged = (int) $usermain['logged'];
        }
      
        
    # Для подключения к БД
        
    private function connectDB()
        {
            
    // Инициализируем класс MySQLi
            
    $this->mysqli = new mysqli$this->location$this->user$this->password$this->dbname );
          
            
    // Если соединиться с БД не удалось
            
    if ($this->mysqli->connect_errno)
                
    # Ошибка
                
    throw new Exception'Ошибка соединения: ' $this->mysqli->connect_error );
        }
      
        
    # Для вывода количества зарегистрированных пользователей онлайн
        
    private function OnlineUsers()
        {
            
    # Запрос SQL
            
    $sql "SELECT `userid`, `uname` FROM `users` WHERE `lastvisit` >= UNIX_TIMESTAMP()-" $this->as_online;
          
            
    # Получаем всех онлайн пользователей
            
    $result $this->mysqli->query$sql );
          
            
    # Массив с данными онлайн пользователей
            
    $users = array();
          
            
    # Формируем массив пользователей онлайн
            
    while( $data $result->fetch_assoc() )
                
    # Дописываем
                
    $users[] = $data;
              
            
    # Возвращаем
            
    return $users;
        }
      
        
    # Для подсчёта гостей
        
    private function OnlineGuests()
        {
            
    # IP гостя
            
    $ip getenv("REMOTE_ADDR");
          
            
    # SQL запрос
            
    $sql NULL;
            
    # Если пользователь авторизован
            
    if( !$this->is_logged )
                
    # Заносим в гости
                
    $sql "REPLACE INTO `guests` VALUES('$ip', UNIX_TIMESTAMP());";
          
            
    # Дополняем SQL запрос
            
    $sql .= "SELECT COUNT(*) AS `online` FROM `guests` WHERE `lastvisit` > UNIX_TIMESTAMP() - " $this->as_online ";";
          
            
    # Выполняем запрос
            
    if ( $this->mysqli->multi_query($sql) )
            {
                
    # Получаем следующий результат множественного запроса
                
    if( $this->mysqli->next_result() )
                {
                    
    # Получаем результат
                    
    $result $this->mysqli->use_result();
                  
                    
    # Возвращаем результат
                    
    return $result->fetch_object()->online;
                }
              
                
    # По умолчанию
                
    return 0;
            }
            else
                throw new 
    Exception("Невозможно выполнить множественный запрос в MySQL");
        }
      
        
    # Для возвращения онлайн гостей и пользователей
        
    public function Online()
        {
            
    # Массив онлайн
            
    $online = array();
          
            
    # Получаем онлайн пользователей
            
    $online['users'] = $this->OnlineUsers();
          
            
    # Получаем гостей онлайн
            
    $online['guests'] = $this->OnlineGuests();
          
            
    # Возвращаем
            
    return $online;
        }
    }

    Только вам его нужно подредактировать. В частности:
    - В функции OnlineUsers() измените вот эту часть с учётом тех полей, которые нужно вытащить из БД, чтобы сформировать в шаблоне ссылку. Я ведь не знаю, как у вас ссылки на профили пользователей формируются. Лишние поля только не вытаскивайте, дополнительная нагрузка никчему.
    В настройках класса пропишите правильные названия и пароль.
    online.tpl.php:
    PHP:
    <?php
        
    if(!defined("DNREAD")) exit( 'Access denied!' );
       
        
    $content '<b>Онлайн:</b>
                    <br/>
                    <b>Пользователей:</b>
                    '
    .$users.'
                    <br />'
    ;
        foreach( 
    $online['users'] as $user )
            
    # Дописываем ссылку на аккаунт
            
    $content .= '<a href="/account?id='.$user['userid'].'">
                            '
    .$user['uname'].'
                         </a><br />'
    ;
       
        
    # Дописываем
        
    $content .= '<b>Гостей:</b>' $online['guests'];
       
        
    # Возвращаем
        
    return $content;