• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak odświeżyć stronę, żeby zawarty w niej kod PHP wykonał się jeszcze raz?

Object Storage Arubacloud
0 głosów
3,144 wizyt
pytanie zadane 22 czerwca 2015 w JavaScript przez Eerie Mądrala (7,130 p.)

Piszę prostą grę przeglądarkową. Sprawa wygląda tak:

mam plik gra.php. W nim jest zawarta cała strona oraz trochę kodu PHP w różnych miejscach, w tym także na samym początku strony, a poza tym jest jeszcze jeden skrypt javascript.

Skrypt javascript jest bardzo prosty, bo większość bazowana jest i tak na PHP. Ten skrypt to proste odliczanie, które pokazuje użytkownikowi kiedy wykonywanie zadania się zakończy.

var timerText = document.getElementById("divForJS").innerHTML;
timerText--;
document.getElementById("divForJS").innerHTML = timerText;
		
if(timerText==0)
{
//no właśnie, tutaj nie wiem co wpisać
}
			
setTimeout("changeTimerText()", 1000);//wykonanie tej samej funkcji po sekundzie

Ogólnie, to wszystko w skrócie wygląda tak (na razie nie chcę dawać całego kodu):

-w bazie danych w sql zapisano w postaci timestampu, kiedy wykonywanie zadania ma się skończyć

-na samym początku jest kawałek kodu w PHP, który porównuje obecny timestamp z timestampem w bazie danych. Jeśli obecny timestamp jest większy od tego w bazie danych, to znaczy że czas o którym zadanie w grze miało się skończyć wykonywać już minął - wtedy następuje przekierowanie do innego pliku w PHP, w którym podliczany jest exp, dodawany level itd. Jeśli zaś zadanie jeszcze nie skończyło się wykonywać, to nic się nie dzieje i strona jest normalnie wyświetlana.

Na stronie mam proste odliczanie w javascripcie. Chciałbym, żeby w przypadku gdy odliczanie się zakończy i wartość zmiennej timerText wyniesie 0, strona się odświeżyła, ale tak żęby znów został wykonany kod w PHP zawarty na tej stronie.

Próbowałem już location.reload(true); tak jak opisano tutaj: http://www.w3schools.com/jsref/met_loc_reload.asp

Próbowałem też, za pomocą metody window.location, sprawić by przekierowało użytkownika do pliku php, który z kolei zawiera jedynie przekierowanie z powrotem do gry.

W żadnym z tych dwóch przypadków nie wykonał się kod PHP zawarty na początku storny.

Gdy zaś nacisnę przycisk odśwież w przeglądarce, wcisnę F5 lub po prostu wejdę na stronę z paska adresu, to wszystko jest OK.

Moje pytanie: Jak odświeżyć stronę, żeby zawarty w niej kod PHP wykonał się jeszcze raz?

Jakieś pomysły?

1 odpowiedź

0 głosów
odpowiedź 22 czerwca 2015 przez Comandeer Guru (600,730 p.)

Prawdę mówiąc w ciemno bym powiedział location.reload. Nie ma innego sensownego sposobu na odświeżenie strony w JS. Na pewno ta komenda się wywołuje? Konsola nic nie rzuca?

 

BTW http://tutorials.comandeer.pl/js-beauty.html#setTimeout

komentarz 22 czerwca 2015 przez Eerie Mądrala (7,130 p.)
Komenda się wykonuje na 100%. Gdy odliczanie dobiegnie końca, ikonka strony na chwile zmienia się na ikonkę odświeżania i strona mignie na ułamek sekundy. A więc się odświeża. Jedyny problem jest taki, że nie wykonuje się kod PHP zawarty na początku strony. Nie jest prawdą, że nie działa cały PHP, bo inne fragmenty kodu w sekcji body działają normalnie. Sorki, trochę niekompletnie opisałem problem. Ale prawda jest taka, że ten kod który się nie wykonuje podczas odświeżenia przy pomocy skryptu (ale wykonuje się gdy odświeżę stronę przy pomocy F5), znajduje się na samym początku pliku. Zaczyna się w 4 linijce, powyżej jest tylko ustawienie DOCTYPE oraz otwarcie tagu html z wybraniem języka. Sekcje head oraz body są dopiero poniżej tego kodu.

No i odświeżenie strony z wykonaniem również tego fragmentu jest dla mnie kluczowe.
komentarz 22 czerwca 2015 przez Comandeer Guru (600,730 p.)
Tak trochę to niemożliwe. Jak się odświeża i wykonuje resztę kodu PHP to tamten też powinno - chyba że jest warunkowy i odświeżenie JS-em sprawia, że warunek nie jest spełniony (ale to i tak dziwne by było)
komentarz 22 czerwca 2015 przez Eerie Mądrala (7,130 p.)
Nie chciałem tego pokazywać publicznie, bo gra którą robię jest nieco głupia, ale dobra, pokażę bo tak chyba będzie najprościej żeby ktoś mi pomógł. Kod wygląda tak: http://pastebin.com/f1eQfzqK
komentarz 22 czerwca 2015 przez Eerie Mądrala (7,130 p.)
Najbardziej zastanawia mnie, dlaczego ten kod z początku nie wykonał się również wtedy, kiedy ustawiłem przekierowanie do osobnego pliku w php, a ten plik z powrotem przekierował do strony głównej gry.
komentarz 22 czerwca 2015 przez Comandeer Guru (600,730 p.)
Nie rzuca się PHP o to, że nagłówki i rozpoczęcie sesji są po tagach html?
komentarz 22 czerwca 2015 przez Eerie Mądrala (7,130 p.)
Ja to robię w Notepad++, więc jedyne co mi się wyświetla, to przeglądarka mi wyświetla errory jak coś totalnie źle zrobię. Ale spróbuję ten tag html dać po PHP.
komentarz 22 czerwca 2015 przez Eerie Mądrala (7,130 p.)
Zmieniłem tak, żeby było przed tagami html. Problem nadal występuje.
komentarz 22 czerwca 2015 przez Comandeer Guru (600,730 p.)
Nie bardzo rozumiem co ma n++ do tego?
komentarz 22 czerwca 2015 przez Eerie Mądrala (7,130 p.)
To powiedzmy, że nie mam żadnych błędów. Problemu nie rozwiązałem, ale obszedłem go w inny sposób. Ale temat zostawiam otwarty, bo ciekawi mnie jak wykonać odświeżenie strony z wykonaniem skryptu php na początku strony jeszcze raz. Może ktoś coś wymyśli xD
komentarz 22 czerwca 2015 przez Comandeer Guru (600,730 p.)
Ale tu nie ma co wymyślić, bo to po prostu nie ma prawa nie działać… Wygląda to tak jakby sesja była zerowana (?).

Podobne pytania

0 głosów
1 odpowiedź 279 wizyt
pytanie zadane 8 października 2016 w PHP przez ThePatrykOOO Dyskutant (8,400 p.)
0 głosów
1 odpowiedź 352 wizyt
0 głosów
3 odpowiedzi 1,949 wizyt

92,539 zapytań

141,382 odpowiedzi

319,481 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...