Čaute. Takže mám takýto problém. Chcel by som si urobiť v PHP online uživateľou...Proste mám napr 10 registrovaných ľudí a keď je 5 prihlásených ukáže ktorý to sú...Prihlasujem cez session...A vedel by som to urobiť takto..Napr pri prihlaseni hodi do DB napr online = 1 pri ohlaseni 0...to by som vedel..ale neviem ako to mám že keď vypne osoba prehliadač..ako tam potom hodiť to že je offline...tak akože on neda odhlasit len vypne prehliadač...neviete niekto help??
PREDOM ĎAKUJEM !
Namiesto:
online=1
resp.online=0
budeš mať:
online=nejaky_cas
Pri každom zobrazení stránky, si pre daného užívateľa do tohto poľa zapíšeš aktuálny čas.
Potom pri zobrazovaní počtu online užívateľov zobrazíš všetkých, u ktorých je rozdiel aktuálneho času a času ich poslednej požiadavky menej ako povedzme spomínaných 5 minút. T.j. za posledných 5 minút niečo klikli na stránke, takže sú online.
v php je na to funkcia time() alebo mktime()
v mysql na to mas UNIX_TIMESTAMP()
mozes to urobit napriklad tak ze ku uzivatelovi co je na stranke prihalseny tak vzdy pri requeste resp reloade stranky sa zapise do DB k jeho riadku v tabulke ze UNIX_TIMESTAMP() + 5*60 // ak chces na 5 minut ak iny pocit vymen cislo 5 za nieco ine :)
a na zistenie ci je niekto online pouzijes len to ze vypises riadky kde je hodnota vacsia alebo rovna UNIX_TIMESTAMP()
that's all
Dajme tomu takato tabulka uzivatelov:
create table uzivatel (i_uzivatel integer auto_increment, v_uzivatel varchar(20), v_cookie varchar(32), d_posledny datetime, primary key(i_uzivatel));
Vkladanie do nej:
insert into uzivatel values (0, "janko", md5(now()), now());
insert into uzivatel values (0, "marienka", md5(now()), now());
insert into uzivatel values (0, "ferko", md5(now()), now());
To md5(now()) je akoze cookie, normalne pri prihlaseni spravis v php:
$cookie = md5(microtime());
set_cookie('cookie',$cookie);
mysql_query("insert into uzivatel values (0,'$user','$cookie',now())");
$id = mysql_insert_id($q);
echo "novy user ma id=$id";
Vyber z tabulky:
$q = mysql_query('select * from uzivatel');
while ($d = mysql_fetch_array($q)) {
echo $d['i_uzivatel'];
echo $d['v_uzivatel'];
...
}
Ked sa prihlasi a pozera si stranky, zistis cookie v $_REQUEST['cookie'] a v databaze zistis ktory user je prihlaseny a tomu updatnes ten datum:
$cookie = $_REQUEST['cookie'];
mysql_query("update uzivatel set d_posledny=now() where v_cookie=$cookie");
Nakoniec ked ostatnym chces zobrazit ci je dany user (janko) pripojeny tak:
$q = mysql_query("select now()-d_posledny from uzivatel where v_uzivatel='janko'");
$d = mysql_fetch_row($q);
if ($d[0]>=600)
echo "janko je odhlaseny";
else
echo "janko je online";
Toto je proof of concept, ani som to neskusal, ani neosetroval na sql injection a podobne srandy.
Pozri google: zaciname s php a mysql