jaq: zjistit kolik je lidi zrovna cte online

diky
Pomocí databáze a session. Vždycky když si stánku někdo otevře nebo klikne na ni na nějaký odkaz, uložit jeho session ID do databáze spolu s aktuálním datem+časem, případně datum+čas pouze aktualizovat pokud již dané SID v databázi je.
Problém je ale s určením, kdo stránky OPUSTIL, lépeřečeno HTTP na to neposkytuje žádnou možnost.
Takže jediné co se snad dá použít je když budeš zobrazovat seznam lidí co jsou online, tak vypsat jen ty, u kterých datum+čas poslední akce je novější než cca 5 minut.
Problém je že jestli někdo stránku jen otevře a hned zmizí, tak ještě 5 minut bude veden jako že si ji právě prohlíží.
Další problém je, že pokud někdo stránku otevře a bude si ji číst (bez klikání na další odkazy) déle než 5 minut, tak přestane být veden jako online.
<?php
$server ="mysql.wz.cz";
$db_user ="";
$db_pass ="";
$database ="";

$timeoutseconds = 300; // tolerance 5 min

$timestamp=time();
$timeout=$timestamp-$timeoutseconds;
mysql_connect($server, $db_user, $db_pass) or die ("ERROR : ve spojeni s tabulkou useronline");
mysql_db_query($database, "INSERT INTO online VALUES ('$timestamp','$REMOTE_ADDR','$PHP_SELF')") or die("ERROR : v zapisu do tabulky useronline");
mysql_db_query($database, "DELETE FROM online WHERE timestamp<$timeout") or die("ERROR : ve smazani TIMEOUTu v tabulce useronline");
$result=mysql_db_query($database, "SELECT DISTINCT ip FROM online WHERE file='$PHP_SELF'") or die("ERROR: ve vycucnuti udaju z tabulky useronline");
$user=mysql_num_rows($result);
mysql_close();

if ($user=="1"):
echo "Online je: $user člověk";
else:
if ($user<"5"):
$ozne = "é"; //toto nám zajistí koncovku (etenáoi,etenáou,...)
echo"Online jsou: $user lid$ozne";
else:
$ozne = "í";
echo"Online jsou: $user lid$ozne";
endif;
endif;
?>
CREATE TABLE online (
timestamp int(15) DEFAULT '0' NOT NULL,
ip varchar(40) NOT NULL,
file varchar(100) NOT NULL,
PRIMARY KEY (timestamp),
KEY ip (ip),
KEY file (file)
);
je to to cos chtel?
Nechápu ty čachry s proměnnou $ozne, proč prostě v každé větvi if nemáš jiné echo? (Online jsou: $user lidé , Online je: $user lidí). Navíc takhle jde změnit i to slovo jsou/je.

Dále řízení se podle IP není úplně ideální, protože např. v jednom podniku / škole můžou spousty lidí mít stejnou IP (stejný proxy server).
lamac: diky, uz sem to podbne sesmolil
tom: presne to sem mel na mysli - takze sem to nakonec udelal pres session ALE - porad je tam ten problem s tim timeoutem... existuje nejakej l¨jinej zbusob?

diky obema + vsem dalsim ;-)
mno, muzes bejt prase, udelat framy, v jenom by se zobrazovala stranka a v tom druhym by byl nakej meta-refresh nebo JS, kterej rekneme kazdejch 10s udela refresh na nakej srciptik, kterej to zaznamena ... ale radsi bych se tomuhle postupu vyhnul
Nene, to má budoucnost! Vraž tam třeba < img src="image.php" name="obr" > kterej ti javascript obnoví třeba každou půl minutu. V image.php si vošéfuješ zápis aktuálního návštěvníka do db a generuješ obrázek 1x1 px. :-)
Nebo ten obr. může bejt větší a přímo ti dynamicky vypisovat ten aktuální počet návštěvníků, to by bylo úplně profi!

@!#$ the people kterejm se ten obrázek nezobrazí (třeba že maj vypnutý obrázky)
@!#$ the people kterejm se ten obrázek nezobrazí (třeba že maj vypnutý obrázky)....

na čo sú alty?
stanley: chápeš to špatně
jde o to že když maj vypnutý obrázky tak ten prohlížeč vůbec nepožádá server o ten obrázek => tenhle user se nezapočítá do návštěvníků
ale keď je to i-frame, tak prehliadač požiada o stránku, ktorá v ňom má byť, nie?

napr: activity-checker.php obsahuje:

<hlavičky>
<meta tag s refreshom> (s pamäti to neviem)
<body>
<img src="image-generator.php?id=214531115447" alt="
<?php
$on_line=funkcia_ktora_to_zisti ( "214531115447" ); // to ID z9ska5 samozrejme nejakým korektným spôsobom
echo "Online je $on_line užívateľov";
?>
>
</body>


PMSN (IMHO)
iframe často blbne, aspoň já s nim mam takovou skušenost. Mělo by být jedno jestli se bude refreshovat obrázek nebo iframe, já bych podle zkušenosti řek, že ten obrázek je spolehlivější, ale nevim...
lenže pokiaľ viem, tak na refresh obrázka potrebujem Java, JS a na refresh i-frame mi stačí metatag. (PMSN)
Refreshovat pravidelně stránku v iframe mi nepřipadá moc vhodné. Když už, tak jedině pokud to návštěvníkům sdělíš, aby se nedivili proč mají každou chvíli přenášeny přes síť nějaká data aniž by věděli proč.
to je jasné, tu sa skôr rieši, či a ako realizovať zisťovanie on-line užívateľov (mimo time limitu v DB).
Prečo by sme to mali zatajovať, a pokiaľ to bude viditeľný obrázok (zobrazujúci text o on-line užívateľoch) tak by si to mal užívateľ všimnúť, nie?
a pri texte by to tiež malo blikať (IMHO).
no a tu by sa dalo využiť zabudnuté marguee ?:-) (kde by mohlo to varovanie rolovať)
Ježíš proboha marquee neeeeee!
to bol vtip
jj. dik, jak tak koukam (jelikoz tu stranku navstevujou vetsinoiu modemari) zustanu u DB a timeoutu.. dik vsem
Stejně to refreshování má ještě další mouchy oproti "timeoutu". Jde o to, že když si někdo stránku otevře, nechá ji v prohlížeči a jde třeba na dvě hodinky pryč, tak bude pořád veden jako že si stránku čte, celé dvě hodiny. Zatímco při "timeoutu" ho to za xx minut vymaže.
čo takto zkombinovať, refresh a timeout (po xx min sa zobrazí hláška "Ak žiješ, klikni")
aj tak je to blbosť (refresh), lebo ak má DB limit 6000/hod (wz), tak pri kontrole po pol min. je možné za hodinu strážiť iba 50 užívateľov, inak treba využiť nedatabázové riešenia (na wz)

a to všetky prístupy zhltne len on-line checking
?:-(
osobne pouzivam zvlastni tabulku on-line useru, kde je cas posledni aktivity, SID a podrobnejsi identifikacni udaje (IP, browser etc.), mazani neaktivnich obstarava kontrolni skript, likvidujici krom neaktivnich i uzivatele s nejakeho duvodu nespravnymi udaji typu SID nebo IP (bezpecnostni opatreni)

seznam aktivnich je pak prosty... pocet radku tabulky