Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP, JavaScript i sesje
Forum PHP.pl > Forum > PHP
Rellik
Witam.

Zaskoczył mnie pewien przypadek. Pewnie ja coś przeoczyłem, dlatego chcę żeby ktoś też na to zerknął.

Jest taka sytuacja:

Kod JS:

Kod
var numer = 5;
document.getElementById("jakisDIV").innerHTML = '<?php $test = "' + numer + '"; echo $test; $_SESSION["numer"] = $test; ?>';


w divie "jakisDIV" pojawi się poprzez powyższe echo wartość "5".

Na innej podstronie jest taki kod PHP:

Kod
echo $_SESSION["numer"];


...i tu się robią cuda. Na stronie tej pojawia się wartość: "' + numer + '" (łącznie z apostrofami).

Proszę o wyjaśnienie dlaczego tak się dzieje? Dodam, że na każdej z tych stron jest użyte session_start();.

Pisane z pamięci, jakby były jakieś błędy to przepraszam. Jakby trzeba było coś więcej podać to dopiszę.

PS. Napiszę jeszcze, że jeśli w powyższym kodzie JS napisałbym z palca $_SESSION["numer"] = "5"; to na innej podstronie bez problemu mógłbym tą wartość odczytać, więc wina nie leży po stronie sesji.
Wazniak96
Dzieje się tak, ponieważ kod PHP jest wykonywany po stronie serwera, a kod JS po stronie użytkownika. Tzn. że, kod PHP wykonuje się na serwerze i zwraca dane(razem z kodem JS) do przeglądarki(czyli kod PHP wykonuje się najpierw...).

W twoim kodzie przypisujesz zmiennej z PHP treść "+ numer +". PHP interpretuje to jako zwykły tekst, i wysyła go do przeglądarki, a po stronie przeglądarki JS wyświetla zawartość swojej zmiennej. Dlatego też na stronie wyświetla Ci ok, a na podstronach już nie, bo brak jest odpowiedniego kodu JavaScript.
Dla PHP JS jest zwykłym tekstem wink.gif
Rellik
Podpowiedz mi jeszcze kolego jak to ugryźć żeby działało tak jak założyłem? Da rade to zrobić w jakoś mało inwazyjny sposób?

PS. A to dlaczego w powyższym przykładzie w zmiennej $test siedzi już wartość "5", a do zmiennej sesyjnej już się tej zmiennej $test nie da przypisać? Bo przecież echo ją zwraca prawidłowo.
Wazniak96
Nie siedzi wartość 5 tylko fragment kodu JavaScript.

Tak na szybko:
Kod
<?php $nr = 5; ?>
var numer = <?php echo $nr; ?>
document.getElementById("jakisDIV").innerHTML = '<?php $test = "' + numer + '"; echo $test; $_SESSION["numer"] = $nr; ?>';
;
Rellik
Mnie poniższy kod podłożony do diva zwraca 5:

Kod
var numer = 5;
document.getElementById("jakisDIV").innerHTML = '<?php $test = "' + numer + '"; echo $test; $_SESSION["numer"] = $test; ?>';


więc zmienna $test przechowuje już odpowiednią wartość. Nie wiem dlaczego dalsza część kodu nie przypisuje już jej do zmiennej sesyjnej.
Wazniak96
Przeczytaj jeszcze raz to co napisałem i krok po kroku zastanów się czy rozumiesz. Jeżeli nie to powróć do kursów PHP i JavaScript rozdział 1 facepalmxd.gif
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.