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 ) 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.
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
Czyli tak jak myślałem 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
Tak dla potomnych, jeśli ktoś będzie kombinował coś podobnego
Temat do zamknięcia.
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
Witam ponownie
Zabrałem się w końcu za to odliczanie i napotkałem problem :/
Posiadam taką oto funkcję js:
function czasDoWydarzenia(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda) { var aktualnyCzas = new Date(); var dataWydarzenia = new Date(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda); var pozostalyCzas = dataWydarzenia.getTime() - aktualnyCzas.getTime(); if (pozostalyCzas > 0) { var s = pozostalyCzas / 1000; // sekundy var min = s / 60; // minuty var h = min / 60; // godziny var sLeft = Math.floor(s % 60); // pozostało sekund var minLeft = Math.floor(min % 60); // pozostało minut var hLeft = Math.floor(h); // pozostało godzin if (minLeft < 10) minLeft = "0" + minLeft; if (sLeft < 10) sLeft = "0" + sLeft; return hLeft + " : " + minLeft + " : " + sLeft; } else return "Czas minął!"; } window.onload = function() { idElement = "czas"; document.getElementById(idElement).innerHTML = czasDoWydarzenia('.$data_zakonczenia.'); setInterval("document.getElementById(idElement).innerHTML = czasDoWydarzenia('.$data_zakonczenia.')", 1000); };
$info_o_user = mysqli_query($link,"SELECT * FROM users WHERE `id` = '$user_id'") or http://www.php.net/die('Błąd zapytania: 1'); $info_o_user = mysqli_fetch_assoc($info_o_user); $czas_zakonczenia = http://www.php.net/strtotime($info_o_user['miss_time']); $y = http://www.php.net/date('Y', $czas_zakonczenia); $m = http://www.php.net/date('m', $czas_zakonczenia)-1; $reszta_daty = http://www.php.net/date('d, h, i, s, u', $czas_zakonczenia); $data_zakonczenia = $y.', '.$m.', '.$reszta_daty;
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)