Доброго времени суток друзья. У меня появилась проблема не могу настроить php скрипт я новичок в php так что не судите строго. У меня есть панель администрации на сайте там показывается список пользователей из базы (логин, пароль, ip и тд) Решил сделать статус что бы показывал какие пользователи online а какие offline, долго искать код не пришлось взял его отсюда http://webo4ka.ru/load/57-1-0-3865 и переделал под себя вот так. Код (Text): $today = date("U"); $totime = date("H:i:s",time()+3*3600); $olddate = date("d.m.Y"); $u_login=$_SESSION['login']; $timeold = mysql_query("UPDATE users SET lastdate='$today' WHERE login='".$u_login."'"); $timeout = mysql_query("UPDATE users SET lasttime='$totime' WHERE login='".$u_login."'"); $olddatee = mysql_query("UPDATE users SET olddate='$olddate' WHERE login='".$u_login."'"); $userinfo = mysql_query("SELECT lastdate FROM `users` WHERE login='".$u_login."'"); $userinfodat = mysql_fetch_array($userinfo); $today = date("U"); if($userinfodat['lastdate'] + 100 < $today) { mysql_query("UPDATE `users` SET `online`='offline' WHERE login='".$u_login."'"); } else { mysql_query("UPDATE `users` SET `online`='online' WHERE login='".$u_login."'"); }; А теперь о проблеме: Когда пользователь заходит в кабинет то статус становится online но по истечению времени или если пользователь выйдет то статус не меняется. Я новичок в этом деле и не знаю что ешё нужно предоставить что бы знающие люди посмотрели.
этот код ужасен практически в каждой строке. буквально ответ такой: состояние offline не наступает потому, что условие $userinfodat['lastdate'] + 100 < $today всегда ложно. посмотри как добывается $userinfodat['lastdate'] и поймешь. подсказка: вызов UPDATE должен быть один!!! и он должен выполняться после SELECT.
Ты сформулируй цель четко условия когда пользователя можно считать online и когда offline. Другой момент — надо знать как работает UPDATE, как обновить сразу несколько колонок, как обновить сразу несколько строк. Экспериментируй в phpmyadmin с запросами. Подсказки: - отмечать пользователя online надо "от его имени", т.е. в твоем случае … WHERE `login`=$u_login и одновременно править время его последнего визита - отмечать пользователей offline надо сразу всех, чье время последнего визита меньше определенного предела - можно обойтись вообще без SELECT для этой задачи. чего там читать-то? то, что только что сам туда записал? - date('U') это жесть. есть специальная функция time() для получения unixtime.
Благодаря вам начинаю более менее понимать что к чему, просто я знаю html и css а php для меня гремучий лес я так сказать по дизайну а не по функциям но желание познать PHP есть. Спасибо что просвещаете а не гоните по поисковикам на которых я просидел пол ночи пока не додумался спросить у знающих людей. Я мало понимаю в PHP можно сказать вообще не чего но этот код меня насторожил, особенно date('U') впервые вижу.
Вот помогли но как то не работает на страницу mysql_query("UPDATE users SET lasttime=".time()." WHERE login='".$u_login."'"); на вывод $now=time()-36000; $stat=($row_users[lasttime] >=$now):'Онлайн'?'Оффлайн'; <td> <?=$stat ?> </td>