Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP]Przechowywanie czasu online
piotrek442
post
Post #1





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


Nie moge sobie poradzić z przechowywaniem czasu online ; /

W bazie mam takie rekordy jak czas_wejscia (np, 1385116379 ) i czas_online ( tutaj ma być przechowywany czas online )

I przy wyjściu chciałem odjąć aktualny czas od czasu wejścia i ten czas dodac do czasu online


i później przerobić na : byłeś online 4 dni 5 godzin 20 min i 20 s . ale totalnie mi to nie wychodzi prosze o pomoc! ; /

Ten post edytował piotrek442 22.11.2013, 11:58:23
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




A co jesli user nie klinknie wyjscia tylko zamknie poprostu okno? Bedzie caly czas online?

No i pokaz co zrobiles do tej pory i co ci nie wychodzi. Wrozyc mamy?
Go to the top of the page
+Quote Post
piotrek442
post
Post #3





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


  1. $q = $db->query("select `entry_time` from `userinfo` where `numer`='{$from}'");
  2. if($q->num_rows != 0){
  3.  
  4. while($n = $q->fetch_assoc())
  5. {
  6. $entry_time = $n['entry_time'];
  7. }
  8. }
  9.  
  10. $exit_time=time();
  11.  
  12.  
  13. $entry_time = date("d.m.Y h:i:s",$entry_time);
  14. $exit_time = date("d.m.Y h:i:s",$exit_time);
  15.  
  16.  
  17. $godziny = floor(( strtotime( $exit_time ) - strtotime( $entry_time ) ) / 3600);
  18. $minuty = floor((( strtotime( $exit_time ) - strtotime( $entry_time ) ) / 60) % 60);
  19. $sekundy = (strtotime( $exit_time ) - strtotime( $entry_time )) % 60;
  20.  
  21.  
  22. echo "byłeś online : $godziny godzin, $minuty minut , $sekundy sekund";




no to jeszcze działa! ale jak to zapisać do bazy?

Ten post edytował piotrek442 22.11.2013, 12:17:31
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Do modyfikacji rekordy w badzie sluzy UPDATE - zajrzyj do manuala.
Go to the top of the page
+Quote Post
piotrek442
post
Post #5





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


ja wiem jak się robi update... tylko nie wiem jak odjąć te daty i dodać do ogólnego czasu online..
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Nie wiesz jak odjac (IMG:style_emoticons/default/questionmark.gif) Toc juz zrobiles odejmowanie :/

strtotime( $exit_time ) - strtotime( $entry_time )

zapisujesz se to do zmiennej:
$aktonline = strtotime( $exit_time ) - strtotime( $entry_time ) ;

A potem normalnie robissz zapytanie UPDATE
$sql = 'update tabela set czas_online=czas_online+'.$aktonline.' where JAKIS WARUNEK NA TWOJE REKORD';

Naprawde tu nie ma zadnej filozofii.
Go to the top of the page
+Quote Post
piotrek442
post
Post #7





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


no dobra zrobiłem jak mówisz !

  1. $exit_time=time();
  2.  
  3. $entry_time = date("d.m.Y h:i:s",$entry_time);
  4.  
  5. $exit_time = date("d.m.Y h:i:s",$exit_time);
  6.  
  7. $aktonline = strtotime( $exit_time ) - strtotime( $entry_time ) ;
  8.  
  9. $q = $db->query("update `userinfo` set `online_time` = online_time+'.$aktonline.' where `...`='...' ");



byłem zalogowany trochę a do bazy wpisało "1" (IMG:style_emoticons/default/ohno-smiley.gif)






Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Skoror czas w bazie trzymasz w timestamp to nie:

$exit_time=time();



$entry_time = date("d.m.Y h:i:s",$entry_time);



$exit_time = date("d.m.Y h:i:s",$exit_time);



$aktonline = strtotime( $exit_time ) - strtotime( $entry_time ) ;




a:
$exit_time=time();
$aktonline = $exit_time -$entry_time ;

Go to the top of the page
+Quote Post
piotrek442
post
Post #9





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


czyli tak?

  1. $exit_time=time();
  2. $aktonline = $exit_time -$entry_time ;
  3. $q = $db->query("update `userinfo` set `online_time` = online_time+'.$aktonline.' where `numer`='{$from}' ");



w bazie zapisuje "0" a wartość początkowa jest też "0"

Ten post edytował piotrek442 22.11.2013, 12:56:50
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




jak uzywasz " do tekstu to i laczyc masz przez ".." a nie przez '..'. Zmieniaj z glowa moj kod a nie sobie zmienisz jedno, inne zostawisz bez mian i zadowolny ....
Go to the top of the page
+Quote Post
piotrek442
post
Post #11





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


teraz to już wogóle nie rozumiem...
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Ja ci napisalem tak:
$sql = 'blabla '.$zmienna.' blabla';

Ty to radosnie zamieniles na:
$sql = "blabla '.$zmienna.' blabla";

Jesli naprawde nadal nie widzisz bledu w swojej zamianie to zapraszam do manuala i zapoznanie sie z podstawami obslugi tekstow.
Go to the top of the page
+Quote Post
zegarek84
post
Post #13





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


Cytat(piotrek442 @ 22.11.2013, 12:47:57 ) *
...
byłem zalogowany trochę a do bazy wpisało "1" (IMG:style_emoticons/default/ohno-smiley.gif)
Cytat(nospor @ 22.11.2013, 12:50:37 ) *
Skoror czas w bazie trzymasz w timestamp to nie:
...

@nospor chyba za długo w pracy ;]... ochłoń i luknij na temat z boku, bo jak Cię znam wiesz o co chodzi ^^... http jest bez stanowe... więc w tym samym żądaniu nie ma sensu nawet próbować zapisywać czas nie połączenia a czas otwartej strony ;p (no można i jak jest błąd połączenia od razu to jakby nie było połączenia ale to co wspomniałem nie ma sensu nawet zwracać uwagi bo musiałbym dogłębniej opisać)... połączenie http jest bezstanowe - tzn. symuluje się ciągłość połączenia na wiele sposobów, najprostszy i ogólnie stosowany to sesja...

sposobem na rozwiązanie tego problemu to np. założyć minimalny czas na stronie i go updatować co jakiś czas w zapytaniu ajax + zdarzenie onuload... inny sposób to skorzystanie z "wiszącego połączenia" gdzie nie zwracamy odpowiedzi, połączenie zostanie zerwane to ten ktoś zamknął połączenie (tu do poczytania hasła w stylu "ajax push", jsonp itd. bo to można zrobić np. na wczytującym się obrazku...), no i akurat przy tym drugim tricku idąc dalej początek i koniec połączenia można by wykonać w jednym skrypcie ale opisywanie to ociera się o daemon wywoływany online więc to też nie ma sensu... najprostsze rozwiązanie jak wspomniałem zapisać start i updatować czas opuszczenie na zasadzie powtarzającego się zapytania ajax lub na zasadzie ajax push...
Go to the top of the page
+Quote Post
piotrek442
post
Post #14





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


tylko że to jest skrypt gg z bot api . Mam specjalną komendę która dokładnie określa końcowy czas . tylko nie mam pojęcia jak to zapisać zeby działało.
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




@zegarek zegarek.... i kto tutaj ma ochlonac? (IMG:style_emoticons/default/wink.gif)

Cytat
tylko nie mam pojęcia jak to zapisać zeby działało.
Przeciez ci napisalem.... jeszcze tego nie poprawiles?
Go to the top of the page
+Quote Post
piotrek442
post
Post #16





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


zrobiłem troche inaczej

  1. $czas=$exit_time-$entry_time;


gdzie czas wychodzi już w sekundach.

i teraz moje pytanie, w jaki sposób przechowywać w bazie ?
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Jak zrobiles inaczej? Przeciez napisales dokladnie to samo co ja ci wczesniej pisalem:
Cytat
a:
$exit_time=time();
$aktonline = $exit_time -$entry_time ;

I tak, to jest wlasnie czas w sekundach. Jak zapisac w bazie? Przeciez tez ci to podalem :/
Go to the top of the page
+Quote Post
piotrek442
post
Post #18





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


przepraszam , pogubilem się... (IMG:style_emoticons/default/facepalmxd.gif)

więc jak to np zwraca mi wartość w sekundach to jak zapisze to do bazy i ktoś będzie rok zalogowany to wartość będzie 31536000 ?
i jaki typ danych użyć? nie obciąży to bazy?
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




A czemu ma obciazyc baze? Jest to zwykly INT UNSIGNED - normalna wartosc dla bazy.
Go to the top of the page
+Quote Post
piotrek442
post
Post #20





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 30.03.2013

Ostrzeżenie: (0%)
-----


Ostatnie pytanie bo już wszystko prawie wiem (IMG:style_emoticons/default/Lkingsmiley.png)

Jak dam
  1. ALTER TABLE userinfo ADD online_time int(11) DEFAULT 0;

to będzie dobrze?
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 18:22