Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
paskalnikita
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,068
#1

Подсчитать количество онлайн польщователей

02.02.2016, 03:29. Просмотров 862. Ответов 6
Метки нет (Все метки)

Всем доброго времени суток! Подскажите, как вывести количесвто пользователей, которые находятся онлайн?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//делаем пользователя онлайн
    function setOnline($user_id){
        $user_last_action_time = time();
        $query=mysql_query("UPDATE `users` SET `online_time`='$user_last_action_time' WHERE `user_id`='$user_id'") or die(mysql_error());
    }
 
//определение онлайн ли пользователь
    function getOnline($profile_id){
        $get_time_query=mysql_query("SELECT `online_time` FROM `users` WHERE `user_id`='$profile_id'") or die(mysql_error());
        $get_online_time=mysql_fetch_assoc($get_time_query);
        $last_action_time=$get_online_time['online_time'];
        if(time()-$last_action_time<=300){ // 300 - время в секундах, то есть по истечении 5 минут неактивности пользователь считается оффлайн
            echo 'Online';
        }else{
            echo 'Offline';
            echo '<br> Last activity: '.date('d-m-Y H:i',$last_action_time);
            }
    }
 
//не работает функция, скажите в чем ошибка
    function users_online(){
        $query=mysql_query("SELECT `online_time` FROM `users`") or die(mysql_error());
        $get_online_time=mysql_fetch_assoc($query);
        if(time()-$get_online_time<=300){
                           $calc_users_online=mysql_query("SELECT COUNT(`online_time`) FROM `users` WHERE `online_time`='$current_time'") or die(mysql_error());
            $get_online_time=mysql_fetch_assoc($calc_users_online);
            $users_online=$get_online_time['all'];
            echo "$users_online";
        }
    }

Заранее спасибо!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2016, 03:29
Ответы с готовыми решениями:

Подсчитать количество строк в БД
Хочу подсчитать количество сток в бд access. Слышал это делает функция...

Подсчитать количество в самом запросе
Необходимо обновить, сложить содержимое поля с... Вопрос, как это сделать...

Подсчитать количество столбцов в таблице БД
С помощью запроса получаю таблицу lev1 lev2 lev3 lev4 user1 user2 user3...

Подсчитать количество полей по значению
Здравствуйте, вопрос немного банален, но не знаю как сделать это красиво. Есть...

Подсчитать количество записей в таблице
пишу гостевую книгу. как мне подсчитать к-во записей в таблице messages? я...

6
Azdeman
Фрилансер
Эксперт HTML/CSSЭксперт PHP
1735 / 1278 / 579
Регистрация: 12.01.2011
Сообщений: 5,081
02.02.2016, 10:30 #2
Лучший ответ Сообщение было отмечено paskalnikita как решение

Решение

Выводит тех кто в течении 5 минут находится на сайте.
PHP
1
2
3
4
$query = mysql_query("SELECT * FROM `users ` WHERE `online_time` > NOW() - INTERVAL 5 MINUTE");
     while ($row = mysql_fetch_array($query)){
     echo $row['username'];
}
Добавлено через 1 минуту
Цитата Сообщение от paskalnikita Посмотреть сообщение
$user_last_action_time = time();
вот это можно убрать , в mysql есть встроенная функция для этого NOW();

Добавлено через 20 секунд
Цитата Сообщение от paskalnikita Посмотреть сообщение
$query=mysql_query("UPDATE `users` SET `online_time`='$user_last_action_time' WHERE `user_id`='$user_id'") or die(mysql_error());
PHP
1
$query=mysql_query("UPDATE `users` SET `online_time`= NOW() WHERE `user_id`='$user_id'") or die(mysql_error());
1
paskalnikita
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,068
02.02.2016, 13:08  [ТС] #3
ваша функция ничего не возвращает, сделал так :
PHP
1
2
3
4
5
6
function users_online(){
        $query = mysql_query("SELECT COUNT(*) AS 'online' FROM `users` WHERE `online_time` > NOW() - INTERVAL 5 MINUTE") or die(mysql_error());
            while($row = mysql_fetch_array($query)){
                echo $row['online'];
            }
        }
Тут в ответе получаю 0, хотя один пользователь есть онлайн.
0
Para bellum
Эксперт PHP
4031 / 3006 / 958
Регистрация: 06.01.2011
Сообщений: 8,822
02.02.2016, 14:16 #4
SQL
1
SELECT COUNT(*) AS 'online'
Не путайте апострофы с одинарными кавычками.
Правильно:
SQL
1
SELECT COUNT(*) AS `online`
2
Azdeman
Фрилансер
Эксперт HTML/CSSЭксперт PHP
1735 / 1278 / 579
Регистрация: 12.01.2011
Сообщений: 5,081
02.02.2016, 14:19 #5
Цитата Сообщение от paskalnikita Посмотреть сообщение
ваша функция ничего не возвращает
какая моя функция?
Значит у вас что то не верно. Т.к то что я вам дал работает на 100% так как делал это уже 100500 раз.
1
paskalnikita
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,068
02.02.2016, 15:12  [ТС] #6
извняюсь, запрос к бд. Все получилось, только пришлось вернуться к переменной,так как NOW() мне не подходит, время онлайн меня хранится в UNIX формате
0
Para bellum
Эксперт PHP
4031 / 3006 / 958
Регистрация: 06.01.2011
Сообщений: 8,822
02.02.2016, 15:14 #7
Цитата Сообщение от paskalnikita Посмотреть сообщение
время онлайн меня хранится в UNIX формате
Тогда заместо NOW() используйте CURRENT_TIMESTAMP().
1
02.02.2016, 15:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2016, 15:14

Подсчитать количество столбцов в таблице
Этот запрос- выдает имена всех столбцов, а как получить не имена а количество?...

Подсчитать количество одинаковых строк по логину
Всем привет! Для конкурса рефералов, мне нужно посчитать ref_id по логину. То...

как подсчитать количество строк в запросе средствами php
Как мне узнать количество строк в бд припомощи php. Я знаю что это можно делать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru