Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][JavaScript][PHP]Odliczanie czasu do zdarzenia
ChaYim
post 22.02.2019, 21:09:04
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.11.2015

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


Witam.
Potrzebuję zrobić skrypt, który zadziała w następujący sposób:
1. Użytkownik wybiera interesującą go opcję (klika link/button)
2. Wyświetla się czas potrzebny do wykonania tego zadania.
3. Po upływie tego czasu, jeśli odświeży stronę (a może zrobię to z AJAXem, nie wiem jeszcze smile.gif ) dostanie stosowny komunikat.

Pomyślałem, że najlepiej zrobić to na zasadzie zapisu do bazy zaraz po kliknięciu w opcję, czyli użytkownik klika w button i generuje się komunikat, który wyświetli mu się po upływie konkretnego czasu. Czy jest na to jakiś inny, lepszy sposób? Wydaje mi się, że do stworzenia komunikatu dopiero po upływie czasu potrzebny będzie cron - a to przy kilku setkach użytkowników mija się z celem.
Go to the top of the page
+Quote Post
miccom
post 24.02.2019, 22:42:16
Post #2





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

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


Zrób jak mówisz, dodaj licznik czasowy odliczający sekundy do "zera", i przy wyzerowaniu wykonujesz ajax do sprawdzenia, czy minął wymagany czas- jesli tak: pokazujesz komunikat / jeśli nie- to info że jeszcze nie czas.

Jak klient straci kontakt ze strona ( wyloguje się lub zamknie okno przeglądarki ) to ponownie musisz pobrać czas do końca -> uruchomić w jquery licznik i patrz jak wyżej smile.gif


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
ChaYim
post 27.02.2019, 21:38:01
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.11.2015

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


Czyli tak jak myślałem smile.gif Dzięki za miccom za utwierdzenie.
Zapiszę sobie czas zdarzenia do sesji i będę go porównywał z czasem serwera. Jeżeli czas zdarzenia jest mniejszy bądź równy czasowi serwera to wtedy wywołam funkcję z komunikatem. Przy każdym logowaniu zapis czasu zdarzenia do sesji - nie będzie trzeba robić zapytania do bazy przy każdym odświeżeniu strony, po wywołaniu komunikatu usunięcie zmiennej z czasem zdarzenia smile.gif
Tak dla potomnych, jeśli ktoś będzie kombinował coś podobnego wink.gif

Temat do zamknięcia.

Ten post edytował ChaYim 27.02.2019, 21:39:29
Go to the top of the page
+Quote Post
dublinka
post 28.02.2019, 14:20:17
Post #4





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Mam takiego gotowca. Dziala na zasadzie: logowanie ustawione na okreslony czas -> w okreslonym div-ie trwa odliczanie do ZERA i potem nastepuje wylogowanie. Wazne zeby sprawdzac na kazdej zestron czas i pozostaly czas z sesji. Smo wylogowanie mozna zastapic informacja etc


--------------------
Go to the top of the page
+Quote Post
ChaYim
post 26.03.2019, 08:35:29
Post #5





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.11.2015

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


Witam ponownie smile.gif
Zabrałem się w końcu za to odliczanie i napotkałem problem :/

Posiadam taką oto funkcję js:

  1. function czasDoWydarzenia(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda)
  2. {
  3. var aktualnyCzas = new Date();
  4. var dataWydarzenia = new Date(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda);
  5. var pozostalyCzas = dataWydarzenia.getTime() - aktualnyCzas.getTime();
  6.  
  7. if (pozostalyCzas > 0)
  8. {
  9. var s = pozostalyCzas / 1000; // sekundy
  10. var min = s / 60; // minuty
  11. var h = min / 60; // godziny
  12.  
  13. var sLeft = Math.floor(s % 60); // pozostało sekund
  14. var minLeft = Math.floor(min % 60); // pozostało minut
  15. var hLeft = Math.floor(h); // pozostało godzin
  16.  
  17. if (minLeft < 10)
  18. minLeft = "0" + minLeft;
  19. if (sLeft < 10)
  20. sLeft = "0" + sLeft;
  21.  
  22. return hLeft + " : " + minLeft + " : " + sLeft;
  23. }
  24. else
  25. return "Czas minął!";
  26. }
  27.  
  28. window.onload = function()
  29. {
  30. idElement = "czas";
  31. document.getElementById(idElement).innerHTML = czasDoWydarzenia('.$data_zakonczenia.');
  32. setInterval("document.getElementById(idElement).innerHTML = czasDoWydarzenia('.$data_zakonczenia.')", 1000);
  33. };

Upakowałem ją sobie w pliku functions.php i przekazuję do niej zmienną $data_zakonczenia. W właściwym pliku php odwołuję się do funkcji countdown($data_zakonczenia);

Zmienną $data_zakonczenia tworzę w ten sposób:

  1. $info_o_user = mysqli_query($link,"SELECT * FROM users WHERE `id` = '$user_id'") or die('Błąd zapytania: 1');
  2. $info_o_user = mysqli_fetch_assoc($info_o_user);
  3.  
  4. $czas_zakonczenia = strtotime($info_o_user['miss_time']);
  5. $y = date('Y', $czas_zakonczenia);
  6. $m = date('m', $czas_zakonczenia)-1;
  7. $reszta_daty = date('d, h, i, s, u', $czas_zakonczenia);
  8.  
  9. $data_zakonczenia = $y.', '.$m.', '.$reszta_daty;


Gdy robię echo $data_zakonczenia; jest wszystko ok, otrzymuję '2019, 02, 26, 8, 35, 0, 0'. (od miesięcy odejmuję 1 ponieważ JS odlicza miesiące od 0)
Problem zaczyna się przy wyświetleniu odliczania. W elemencie id="czas" zieje pustka :/

Ten post edytował ChaYim 26.03.2019, 11:18:55
Go to the top of the page
+Quote Post

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: 29.03.2024 - 13:20