[JS][PHP] Przekazane zmienne - ?

0

Witam,

mam problem przy przekazywaniu zmiennych z js do php.

$sw = "<script language=javascript>document.write(sw);</script>";
$ile_w = "<script language=javascript>document.write(ile_w);</script>";
$ile_h = "<script language=javascript>document.write(ile_h);</script>";
$ile_div = intval($sw) * intval($ile_w) * intval($ile_w);
echo $ile_div . '<br/>';
echo $sw . '<br/>';
echo $ile_h . '<br/>';
echo $ile_w . '<br/>';

problem polega na tym że zmienna np. $sw ma wartość np. = 23, lecz to nie jest liczba... poleceniem echo wyświetlam ją normalnie, lecz jak chcę zrobić jakieś działanie nic się nie dzieje, ciągle 0...
najlepsze jest to że próbowałem na różny sposób konwertować, intval(), (int), nie działają, w różnych miejscach
a w internecie nie znalazłem innej metody konwersji więc zwracam się o pomoc,

Jak skonwertować zmienną przekazaną z js na liczbę ?

z góry wielkie dzięki :)

0
$sw = "<script language=javascript>document.write(sw);</script>";

Że co to ma być? To nie jest zmienna przekazana przez JS tylko normalny string zawierający tekst:
<script language=javascript>document.write(sw);</script>
A ty próbujesz z tego liczbe zrobić.

0

Najwyraźniej nie rozumiesz, gdzie i w jakiej kolejności wykonywany jest kod JS i PHP. Nie ma takiej możliwości, by najpierw jakiś kod PHP wykonał się do połowy, następnie by wykonał się kod JS, a następnie dalej był kontynuowany ten kod PHP (druga połowa).

Przeglądarka wysyła na serwer żądanie. Na serwerze pracuje interpreter PHP. W miarę przetwarzania kodu PHP modyfikowana jest baza danych i generowany jest kod HTML, wewnątrz którego może być osadzony kod JS. Do tego generalnie służy PHP na stronach www: do przyjęcia żądania, zmodyfikowania stanu aplikacji (np. bazy danych) i wygenerowania kodu HTML odpowiedzi.

Skrypt PHP kończy pracę. Wynikiem jego pracy jest np. zmiana bazy danych oraz kod odpowiedzi, czyli zwykle jakiś kod HTML z ewentualnymi wstawkami JS. Odpowiedź jest wysyłana do przeglądarki. Przeglądarka dostaje odpowiedź i ją interpretuje: wyświetla dokument HTML (stosując do niego np. style CSS) i wykonuje umieszczony w dokumencie kod JavaScript. I tyle.

Nie ma żadnego powrotu do PHP. Najpierw działa kod PHP -- po stronie serwera -- a kod JS działa potem, w przeglądarce, po stronie klienta.

To, co masz w tym przykładowym kodzie, to zupełne masło maślane, głupoty nie mające żadnego sensu. Dodatkowo, używasz atrybutu language="script/javascript", który jest zabroniony we współczesnych wersjach HTML-a (powinieneś zamiast tego użyć type="text/javascript") oraz zupełnie niepotrzebnie używasz document.write, które ma swoje h4x0rskie zastosowanie, ale generalnie jest niezalecane bo przez sam fakt jego istnienia strona ładuje się wolniej.

Podstawowym problemem tego kodu jest jednak to, że po prostu nie ma sensu ;-).

Kod JavaScript może się komunikować z serwerem, tj. z kodem PHP, ale to np. za pomocą Ajaxa (obiektu XMLHttpRequest), co skutkuje wysłaniem zupełnie oddzielnych żądań. Nic nie wskazuje, żebyś używał tutaj czegoś takiego i dlatego ten kod wygląda zupełnie bez sensu. I działa tak, jak napisał @Demonical Monk.

0

aaa no tak... sorrki za głupie pytanie, ale o tym nie pomyślałem

w takim razie jakie macie sposoby na poprawnie przekazanie zmiennej z js do php,
bo mierzę rozdzielczość ekranu w js a potem chcę tych wartości użyć w php

0

a to czego używać jak nie document.write ?

0

Zamiast document.write użyj metod DOM, ewentualnie innerHTML, które w praktyce też jest standardem (a w teorii zaczyna nim być). Radzę używać document.write albo dla nauki (i szybko z niego "wyrosnąć"), albo gdy już zrozumiesz różne sposoby manipulowania dokumentem, a także problemy jakie przedstawia document.write -- wtedy będziesz go mógł użyć świadomie.

Co do przesyłania pomiarów z JS do PHP, to obawiam się, że będziesz musiał podesłać dane Ajaxem, w osobnym żądaniu. Będziesz mógł zapisać sobie dane przesłane przez Ajax w sesji użytkownika i używać przy kolejnych klasycznych żądaniach PHP (nie-ajaxowych). Ale przy pierwszym żądaniu to nie zadziała. Alternatywnie, JavaScript może umieścić dokumencie jakieś ukryte elementy input, których wartości możesz sprawdzać przy każdym kolejnym żądaniu.

Zwróć jednak uwagę na kolejność wykonywania rzeczy. Nie ma czegoś takiego, że masz skrypcik PHP, on się wykonuje -- ale do połowy -- generuje JavaScript, JavaScript coś sprawdza, magicznie przekazuje to do skryptu PHP i wykonywana jest druga połowa skryptu PHP. Nie. Najpierw wykonuje się CAŁY skrypt PHP, po stronie serwera. Dopiero potem JavaScript, po stronie przeglądarki.

0

ok dzięki za wskazówki ;)

rozwiązałem ten problem poprzez wysłanie danych przez formularz metodą post:

if (isset($_POST['ile_w']) && isset($_POST['ile_h']) && isset($_POST['sw'])) {
	$ile_w = $_POST['ile_w'];
	$ile_h = $_POST['ile_h'];
	$sw = $_POST['sw'];
}else{
	echo "<div id=\"roz_div\" style=\"display:none;\">&nbsp;</div>";
	echo '
	<script type="text/javascript">
	<!--
	if (screen){
		var sww = screen.width;
		var shh = screen.height;
		var sw = sww;
		var sh = shh;
		var i=0;
		var koniec = true;
		for (i=0;koniec;i++){
			sw = sw / 2;
			if(sw > 22 && sw < 45) koniec = false;
		}
		var ile_w = sww / sw;
		var ile_h = shh / sw;' . "
	
		function wyslij_roz(){
			var nhtml = '<form action=\"enjoy.php\" method=\"post\" id=\"form_roz\"><input type=\"text\" name=\"ile_w\" value=\"'+ile_w+'\"><input type=\"text\" name=\"ile_h\" value=\"'+ile_h+'\"><input type=\"text\" name=\"sw\" value=\"'+sw+'\"></form>';
			document.getElementById('roz_div').innerHTML = nhtml;
			document.getElementById('form_roz').submit();
		}
	}
	// -->
	</script>";
	echo "<div id=\"start\" style=\"width:100%;height:100%;margin:0;padding:0;border:0;overflow:hidden;background-color:#FFFFFF;position:fixed;top:0;left:0px;display:block;\">
			<div style=\"width:200px; height:100px; margin:0 auto; padding-top:20%;\">
				<input type='button' onclick='wyslij_roz()' value='Start' style=\"height:100px; width:200px; font-size:26px; font-family:Arial, Helvetica, sans-serif;\" />
			</div>
		</div>";
}

użyłem co prawda .innerHTML lecz przez to musiałem zrobić button
natomiast document.write działa automatycznie, bez "wspomagaczy"

0 użytkowników online, w tym zalogowanych: 0, gości: 0