Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP] Odliczanie (Powiązanie JS z PHP)
Forum PHP.pl > Forum > Przedszkole
Lirdoner
Witam potrzebuję zrobić takie coś, że gość jak wejdzie na jedną podstronę to rozpocznie się odliczanie od 15 minut w dół
Jak odliczanie się skończy to wykona się pewien skrypt php
Odliczanie nie może być 0 po odświeżeniu strony a więc

Do bazy dodaje rekord z czasem na 00:15:00
Wyciągam go potem do zmiennej tak że
$zmienna = '00:15:00';
I co zrobić teraz aby javascript zaczął odliczanie od 00:15:00 ,a potem co sekunde odliczony czas przenosił do $zmienna2?
Pacio
Z tego co zrozumialem, to chcesz aby odliczanie od 00:15:00 rozpoczelo sie przy pierwszym wejsciu na strone i bez wzgledu na odswiezanie/odwiedzanie podstron, przy 00:00:00 wykonalo konkretny skrypt php.

Widze to w taki sposob:
Sprawdzasz czy gosc wchodzi po raz pierwszy
- jesli tak, to wypluwasz w js 00:15:00 i zaczynasz odliczac, co sekunde wysylajac aktualny stan licznika do php, ktory zapisujesz np. w zmiennej sesyjnej
- jesli nie, wypluwasz aktualny stan licznika ze zmiennej sesyjnej i nadal odliczasz w dol
Po kazdej zmiane licznika sprawdzasz czy doszlo do 0, jesli tak to przekierowanie pod odpowiedni url.
Lirdoner
No oktylko problem mam z tym jak wyslac z js do php aktualny stan licznika
Kshyhoo
Masz kod timera, który wykorzystuję na stronie. Łatwo go zaadoptujesz do swoich potrzeb:

[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. <!-- <![CDATA[
  3. function wykonaj() {
  4. /* jakaś operacja, np.: */
  5. location.href="http://forum.php.pl/index.php/";
  6. }
  7. liczbasekund = 1800;
  8. teraz = 0;
  9. function zegar() {
  10. // wyliczanie roznicy
  11. var sekund = Math.abs(liczbasekund-teraz);
  12. var minut = Math.floor(sekund/60);
  13. var godzin = Math.floor(minut/60);
  14. // wyliczanie okresu
  15. sekund = Math.floor(sekund-minut*60);
  16. minut = Math.floor(minut-godzin*60);
  17. var roznica="Do końca pozostało "+((minut<10)?"0":"")+minut+":"+((sekund<10)?"0":"")+sekund;
  18. document.getElementById("stoper").innerHTML = roznica;
  19. if (teraz<liczbasekund) {
  20. teraz++;
  21. setTimeout("zegar()",1000);
  22. } else {
  23. document.getElementById("stoper").innerHTML = "Czas minął...";
  24. wykonaj();
  25. /* tu można wywołać inne zdarzenia */
  26. }
  27. }
  28. zegar();
  29. // ]]> -->
  30. </script>
[JAVASCRIPT] pobierz, plaintext

Wywołujesz:
  1. <div id="stoper"><!-- --></div>

Jeżeli chcesz przekazywać coś do php, kombinuj tak (np. w linku):
[JAVASCRIPT] pobierz, plaintext
  1. function wyslij() {
  2. img = new Image();
  3. img.src = "http://www.serwer.pl/katalog/index.php?opcja=6&wiek=25";
  4. }
[JAVASCRIPT] pobierz, plaintext

Pacio
Cytat(Lirdoner @ 16.01.2010, 23:01:14 ) *
No oktylko problem mam z tym jak wyslac z js do php aktualny stan licznika


Ajaxem mozesz wyslac do skryptu php jako zmienna:
skrypt.php?stan=00:12:43
zegarek84
Cytat(Pacio @ 16.01.2010, 23:11:57 ) *
Ajaxem mozesz wyslac do skryptu php jako zmienna:
skrypt.php?stan=00:12:43

zamiast bawić się ajaxem to do przesłania paramatru przez get możesz użyć obiektu new Image
[JAVASCRIPT] pobierz, plaintext
  1. var Image_on = new Image();
  2. Image_on.src = 'adres_do_obrazka_który_nie_jest_obrazkiem';
[JAVASCRIPT] pobierz, plaintext



a nie wygodniej to by było w cookies?? winksmiley.jpg - i nie musiałbyś co chwila wysyłać zapytań do serwera...
Kshyhoo
Pewnie, że można:
[JAVASCRIPT] pobierz, plaintext
  1. function ustawcookie(nazwa, wartosc, czas, sciezka, domena) {
  2. document.cookie = nazwa + "=" + wartosc + ";expires=" + czas + ";path=" + sciezka + ";domain="+domena;
  3. }
  4.  
  5. wygasa = new Date(new Date().getTime()+1000*60*60*24*30).toGMTString() // 30 dni
  6. ustawcookie('nazwaCiacha', 'FajneCiacho', wygasa, '/', '.serwer.pl');
[JAVASCRIPT] pobierz, plaintext
Lirdoner
Hmm... w cookie to byłby dobry pomysł, ale mi trzeba coś takiego jak jest w grach internetowych np. ogame lub zielone imperium
W ogame jak się rozwija bydynki trzeba czekać załóżmy te 15 minut i user może się wylogować a kiedy znowu się zaloguje czas będzie zmniejszony tzw. o tyle ile był wylogowany czyli wszystko wykonuje się bez wiedzy użytkownika

Czy to wtedy też jest na cookie?
albo jaka jest zasada tego skryptu, jak on działa?
Kshyhoo
Rozwiązań jest co najmniej kilka. Możesz np. zapisać timestamp do bazy danych z końcem czasu budowania, po zalogowaniu usera pobierać go i ładować do zmiennej w timerze. Powiedzmy, że czas trwania jakiegoś zdarzenia to 30 minut. Zapisujesz czas do bazy a user się wylogował. Loguje się po 20 minutach ponownie. Wtedy timer zaczyna odliczać czas pobrany z bazy danych. Mam nadzieję, że rozumiesz.
Lirdoner
Ale w bazie będzie nadal 30 minut a nie 10
I rozpocznie odliczanie od 30 minut
Kshyhoo
No co Ty, nie potrafisz wyliczyć różnicy? Po za tym, jak zapiszesz czas zakończenia zdarzenia, a nie początek, to nie będzie problemu.
Lirdoner
Dobra mam zmienna z rozpoczeciem akcji i muszę teraz ustalić zmienną z zakończeniem więc muszę do tej zmiennej dodać 15 minut do zmiennej z rozpoczęciem

$rozpoczecie = date('20y/m/d H:i:s');
I załóżmy że $rozpoczecie = 2010:01:17 10:00:00
I $zakonczenie ma być równe 2010:01:17 10:15:00

Próbowałem tak
$zakonczenie = $rozpoczecie + '0000/00/00 00:15:00';
Ale nie idzie :/

//już nie ważne
Poradziłem sobie!


Dobra jeszcze jedno

$rozpoczecie = 2010-01-17 17:00:00
$inc = explode(":", $rozpoczecie);
$lol = $inc[1] + 15;
$zakonczenie = "$inc[0]:$lol:$inc[2]";

W powyższym fragmencie dodaje 15 minut i całość zapisuje do $zakonczenie
Ale jak $rozpoczecie miałaby wartość 2010-01-17 17:50:00 to wtedy $zakonczenie miałaby wartość 2010-01-17 17:65:00

Co zrobić aby sekundy przekształcać na minuty, minuty na godziny, godziny na dni?
Kshyhoo
Czas pobieraj tak:
  1. $time = $_SERVER["REQUEST_TIME"];
Lirdoner
Ale ja rozpoczęcie pobieram z bazy danych dodaje to neigo 15 minut zapisuje jako $zakonczenie i znów wysyłam do bazy ale jak minutu przekraczają 60 to zamiast dobrego wpisu w bazie pojawia się 0000-00-00 00:00:00
Kshyhoo
Źle robisz. To nie matematyka, to czas... Musisz przeliczać
  1. $czas = "2010-01-17 18:43:55";
  2. $znacznik = strtotime($czas);
  3. echo $znacznik;
  4. echo "<br />";
  5. echo date("Y-m-d H:i:s", $znacznik); // test poprawności

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.