Добрый день подскажите, как сделать вывод пользователей которые онлайн на сайте, таблица user есть поля id, login, pass, last_visit уже всю голову сломал.
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: <?phpif(!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;