Lirdoner
16.01.2010, 22:32:29
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
16.01.2010, 22:45:50
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
16.01.2010, 23:01:14
No oktylko problem mam z tym jak wyslac z js do php aktualny stan licznika
Kshyhoo
16.01.2010, 23:07:41
Masz kod timera, który wykorzystuję na stronie. Łatwo go zaadoptujesz do swoich potrzeb:
<script type="text/javascript">
<!-- <![CDATA[
function wykonaj() {
/* jakaś operacja, np.: */
location.href="http://forum.php.pl/index.php/";
}
liczbasekund = 1800;
teraz = 0;
function zegar() {
// wyliczanie roznicy
var sekund = Math.abs(liczbasekund-teraz);
var minut = Math.floor(sekund/60);
var godzin = Math.floor(minut/60);
// wyliczanie okresu
sekund = Math.floor(sekund-minut*60);
minut = Math.floor(minut-godzin*60);
var roznica="Do końca pozostało "+((minut<10)?"0":"")+minut+":"+((sekund<10)?"0":"")+sekund;
document.getElementById("stoper").innerHTML = roznica;
if (teraz<liczbasekund) {
teraz++;
setTimeout("zegar()",1000);
} else {
document.getElementById("stoper").innerHTML = "Czas minął...";
wykonaj();
/* tu można wywołać inne zdarzenia */
}
}
zegar();
// ]]> -->
</script>
Wywołujesz:
<div id="stoper"><!-- --></div>
Jeżeli chcesz przekazywać coś do php, kombinuj tak (np. w linku):
function wyslij() {
img = new Image();
img.src = "http://www.serwer.pl/katalog/index.php?opcja=6&wiek=25";
}
Pacio
16.01.2010, 23:11:57
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
16.01.2010, 23:20:27
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
var Image_on = new Image();
Image_on.src = 'adres_do_obrazka_który_nie_jest_obrazkiem';
a nie wygodniej to by było w cookies??

- i nie musiałbyś co chwila wysyłać zapytań do serwera...
Kshyhoo
16.01.2010, 23:27:44
Pewnie, że można:
function ustawcookie(nazwa, wartosc, czas, sciezka, domena) {
document.cookie = nazwa + "=" + wartosc + ";expires=" + czas + ";path=" + sciezka + ";domain="+domena;
}
wygasa = new Date(new Date().getTime()+1000*60*60*24*30).toGMTString() // 30 dni
ustawcookie('nazwaCiacha', 'FajneCiacho', wygasa, '/', '.serwer.pl');
Lirdoner
17.01.2010, 09:25:46
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
17.01.2010, 09:39:15
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
17.01.2010, 10:36:54
Ale w bazie będzie nadal 30 minut a nie 10
I rozpocznie odliczanie od 30 minut
Kshyhoo
17.01.2010, 10:57:08
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
17.01.2010, 17:21:11
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
17.01.2010, 18:31:32
Czas pobieraj tak:
$time = $_SERVER["REQUEST_TIME"];
Lirdoner
17.01.2010, 18:34:53
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
17.01.2010, 18:49:57
Źle robisz. To nie matematyka, to czas... Musisz przeliczać
$czas = "2010-01-17 18:43:55";
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.