Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP, JavaScript i sesje
Rellik
post 2.10.2013, 15:32:08
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 7.02.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Rellik 2.10.2013, 15:36:36
Go to the top of the page
+Quote Post
Wazniak96
post 2.10.2013, 16:20:15
Post #2





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Rellik
post 2.10.2013, 16:23:30
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 7.02.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Rellik 2.10.2013, 16:27:56
Go to the top of the page
+Quote Post
Wazniak96
post 2.10.2013, 16:57:34
Post #4





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


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; ?>';
;
Go to the top of the page
+Quote Post
Rellik
post 2.10.2013, 17:04:04
Post #5





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 7.02.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Wazniak96
post 2.10.2013, 17:10:42
Post #6





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:47