За последние 24 часа нас посетили 17826 программистов и 1703 робота. Сейчас ищут 1753 программиста ...

Прошу помощи (online/offline пользователи)

Тема в разделе "PHP для новичков", создана пользователем ArtemRazulin, 14 авг 2014.

  1. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Доброго времени суток друзья.
    У меня появилась проблема не могу настроить php скрипт я новичок в php так что не судите строго.
    У меня есть панель администрации на сайте там показывается список пользователей из базы (логин, пароль, ip и тд)
    Решил сделать статус что бы показывал какие пользователи online а какие offline, долго искать код не пришлось взял его отсюда http://webo4ka.ru/load/57-1-0-3865 и переделал под себя вот так.

    Код (Text):
    1. $today = date("U");
    2. $totime = date("H:i:s",time()+3*3600);
    3. $olddate = date("d.m.Y");
    4. $u_login=$_SESSION['login'];
    5. $timeold = mysql_query("UPDATE users SET lastdate='$today' WHERE login='".$u_login."'");
    6. $timeout = mysql_query("UPDATE users SET lasttime='$totime' WHERE login='".$u_login."'");
    7. $olddatee = mysql_query("UPDATE users SET olddate='$olddate' WHERE login='".$u_login."'");
    8. $userinfo = mysql_query("SELECT lastdate FROM `users` WHERE login='".$u_login."'");
    9. $userinfodat = mysql_fetch_array($userinfo);
    10. $today = date("U");
    11. if($userinfodat['lastdate'] + 100 < $today) {
    12. mysql_query("UPDATE `users` SET `online`='offline' WHERE login='".$u_login."'");
    13. } else {
    14. mysql_query("UPDATE `users` SET `online`='online' WHERE login='".$u_login."'");
    15. };
    А теперь о проблеме: Когда пользователь заходит в кабинет то статус становится online но по истечению времени или если пользователь выйдет то статус не меняется.

    Я новичок в этом деле и не знаю что ешё нужно предоставить что бы знающие люди посмотрели.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    этот код ужасен практически в каждой строке.

    буквально ответ такой: состояние offline не наступает потому, что условие $userinfodat['lastdate'] + 100 < $today всегда ложно. посмотри как добывается $userinfodat['lastdate'] и поймешь.

    подсказка: вызов UPDATE должен быть один!!! и он должен выполняться после SELECT.
     
  3. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Спасибо за ответ, буду копать и изучать. Пол ночи просидел так и не смог нечего сделать
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Ты сформулируй цель четко условия когда пользователя можно считать online и когда offline.
    Другой момент — надо знать как работает UPDATE, как обновить сразу несколько колонок, как обновить сразу несколько строк. Экспериментируй в phpmyadmin с запросами.

    Подсказки:
    - отмечать пользователя online надо "от его имени", т.е. в твоем случае … WHERE `login`=$u_login и одновременно править время его последнего визита
    - отмечать пользователей offline надо сразу всех, чье время последнего визита меньше определенного предела
    - можно обойтись вообще без SELECT для этой задачи. чего там читать-то? то, что только что сам туда записал?
    - date('U') это жесть. есть специальная функция time() для получения unixtime.
     
  5. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Благодаря вам начинаю более менее понимать что к чему, просто я знаю html и css а php для меня гремучий лес я так сказать по дизайну а не по функциям но желание познать PHP есть. Спасибо что просвещаете а не гоните по поисковикам на которых я просидел пол ночи пока не додумался спросить у знающих людей.

    Я мало понимаю в PHP можно сказать вообще не чего но этот код меня насторожил, особенно date('U') впервые вижу.
     
  6. ArtemRazulin

    ArtemRazulin Новичок

    С нами с:
    21 мар 2014
    Сообщения:
    17
    Симпатии:
    0
    Вот помогли но как то не работает
    на страницу
    mysql_query("UPDATE users SET lasttime=".time()." WHERE login='".$u_login."'");

    на вывод
    $now=time()-36000;
    $stat=($row_users[lasttime] >=$now):'Онлайн'?'Оффлайн';

    <td> <?=$stat ?> </td>