PHP - Online uživatelia.

Sekcia: Programovanie 24.03.2009 | 23:14
Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
Č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 !
    • Re: PHP - Online uživatelia. 25.03.2009 | 00:10
      Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
      Toto sa robi len na zaklade aktivity. Vzdy si niekam uloz aktualny cas, ked si nejaky pouzivatel vyziada stranku. A potom len spocitaj vsetkych pouzivatelov, ktori si vyziadali stranku za poslednych niekolko minut, bezne sa pouziva napriklad 5 minut.
      Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
      • Re: PHP - Online uživatelia. 25.03.2009 | 16:43
        Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
        Aha takže to mám dávať napr DO DB čas alebo ako?
        • Re: PHP - Online uživatelia. 25.03.2009 | 16:52
          Avatar a a   Používateľ
          Áno.
          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.
          • Re: PHP - Online uživatelia. 25.03.2009 | 16:57
            Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
            Jaj ták takže to mám dať na každý php script napr...na login.php na menu.php a tak..Všade kde kliknu sa zapíše čas áno?
            • Re: PHP - Online uživatelia. 25.03.2009 | 17:15
              Avatar a a   Používateľ
              Presne tak, aby si mal záznam o jeho poslednej aktivite na stránke.
              • Re: PHP - Online uživatelia. 25.03.2009 | 17:28
                Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
                Ok Ďakujem pomohli ste mi :)
          • Re: PHP - Online uživatelia. 25.03.2009 | 23:20
            Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
            A počuj takto ešte niečo podobné som vymyslel...Ale ide tam o to neviem ako to nakodiť tak vlastne napr keď sa prejde z jedného dňa nadruhý....atď alebo z 1 hodiny na druhú tam sa to už mení je napr 57 min a o 5 min už nebude 62 ale 2 minuty...Neviem proste ako to nakodiť..Mohol by si mi dať niečo ako to vyberať napr z DB alebo neaké provnávanie?? Že ja vytiahnem z DB len dátum a ono mi to porovná...A ja už len vypíšem tých čo sa zmestili do tých 5 minút... Predom dík.
            • Re: PHP - Online uživatelia. 25.03.2009 | 23:30
              Avatar Mirrec ubuntu 8.10  Používateľ
              pouzi unix timestamp

              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
              • Re: PHP - Online uživatelia. 25.03.2009 | 23:40
                Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
                Hmm neako neviem o čo ide....Nemohol by si urobiť príklad prosím ťa? Tabulka + vyberanie z nej + davanie do nej.... Dík
                • Re: PHP - Online uživatelia. 26.03.2009 | 01:57
                  Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                  V mysql ak mas stlpec datetime tak to su v podstate sekundy, mozes odcitat od now() a ziskas pocet sekund.

                  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
                  • Re: PHP - Online uživatelia. 26.03.2009 | 07:55
                    Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
                    Díky....Ale viem že som otravný a neako cez SESSION cez to TIMESTAMP ??...
                    • Re: PHP - Online uživatelia. 26.03.2009 | 08:03
                      Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
                      Napis mi cez icq, preberieme to.
                      Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
                      • Re: PHP - Online uživatelia. 26.03.2009 | 08:10
                        Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
                        Poslal som ti mail. Tak mi tam prosím ťa pošli tvoj skype alebo jabber dík.
                        • Re: PHP - Online uživatelia. 26.03.2009 | 08:19
                          Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
                          Je to divne, lebo kedysi si ma mal pridaneho na icq :) Ale dal som si ta do blacklistu po tom, co si mi zacal posielat nejake divne linky.
                          Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
    • Re: PHP - Online uživatelia. 25.03.2009 | 01:20
      Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
      neda sa, http je bez spojovej orientacie
      • Re: PHP - Online uživatelia. 25.03.2009 | 16:45
        Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
        Tak potom ako to robia ostatné stránky??