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 22.11.2013, 11:57:15
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 22.11.2013, 12:15:30
Post #2





Grupa: Moderatorzy
Postów: 36 557
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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrek442
post 22.11.2013, 12:17:11
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 22.11.2013, 12:18:39
Post #4





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




Do modyfikacji rekordy w badzie sluzy UPDATE - zajrzyj do manuala.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrek442
post 22.11.2013, 12:20:26
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 22.11.2013, 12:33:56
Post #6





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




Nie wiesz jak odjac 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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrek442
post 22.11.2013, 12:47:57
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" ohno-smiley.gif






Go to the top of the page
+Quote Post
nospor
post 22.11.2013, 12:50:37
Post #8





Grupa: Moderatorzy
Postów: 36 557
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 ;



--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrek442
post 22.11.2013, 12:56:27
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 22.11.2013, 13:02:16
Post #10





Grupa: Moderatorzy
Postów: 36 557
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 ....


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrek442
post 22.11.2013, 13:05:42
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 22.11.2013, 14:14:58
Post #12





Grupa: Moderatorzy
Postów: 36 557
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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
zegarek84
post 22.11.2013, 16:07:23
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" 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...


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
piotrek442
post 22.11.2013, 16:46:24
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 22.11.2013, 19:50:58
Post #15





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




@zegarek zegarek.... i kto tutaj ma ochlonac? wink.gif

Cytat
tylko nie mam pojęcia jak to zapisać zeby działało.
Przeciez ci napisalem.... jeszcze tego nie poprawiles?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrek442
post 26.11.2013, 16:51:03
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 26.11.2013, 17:39:35
Post #17





Grupa: Moderatorzy
Postów: 36 557
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 :/


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrek442
post 26.11.2013, 17:47:39
Post #18





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

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


przepraszam , pogubilem się... 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 26.11.2013, 18:06:43
Post #19





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




A czemu ma obciazyc baze? Jest to zwykly INT UNSIGNED - normalna wartosc dla bazy.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrek442
post 26.11.2013, 18:24:06
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 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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 17.06.2025 - 19:09