Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP] dlaczego nie działa, mimo że warunek jest spełniony
Forum PHP.pl > Forum > Przedszkole
xpander
Witam.

Chciałbym napisać skrypt php który ładuje obrazek z określonego folderu w zależności od rozdzielczości.
ponieważ jednak "duży skrypt" nie działa, napisałem krótki testowy.

  1. <script language="JavaScript">
  2.  
  3. if (screen.width>1024) {
  4. rozdzialka=1;
  5. }
  6. else {
  7. rozdzialka=2;
  8. }
  9. </script>
  10. <?php
  11. $zmienna = "?><script language=javascript>document.write(rozdzialka);</script><?php";
  12. $zmienna = str_replace("?>", "", $zmienna);
  13. if ($zmienna == 1) echo "jeden";
  14. ?>


niestety mimo że wartość $zmienna wypisana za pomocą echo $zmienna;
daje wartość 1 (czyli warunek w pętli if jest spełniony)
to słowo "jeden" nie pojawia się na ekranie.

co robię źle, że to działać nie chce? sciana.gif
nospor
Cytat
daje wartość 1
wcale ze nie . $zmienna u ciebie przyjmuje tekst. a tekst porownany (==) do 1 daje zawsze true smile.gif
xpander
dzięki za błyskawiczną odpowiedź .

po wyrzuceniu str_replace();

  1. <?php
  2. $zmienna = "<script language=javascript>document.write(rozdzialka);</script>";
  3. if ($zmienna==1) echo "jeden";
  4. ?>


nie wyswietla nic.

jednak skrypt

  1. <?php
  2. $zmienna = "<script language=javascript>document.write(rozdzialka);</script>";
  3. echo $zmienna;
  4. ?>


wyswietla 1.

Zatem pętla if nie działa bo funkcja document.write(); zapisuje do $zmiennej tekst?
Musze zrobić konwersję typu danych?
nospor
Cytat
wyswietla 1.

nie moj kochany. $zmienna zawiera kod js, ktory to jest wysylany do przegladarki i przegladarka go interpretuje i daje to w rezultacie 1, bo tą wartosc zwraca ci js. Ale to sie dzieje dopiero po stronie przeglądarki.
po stronie php $zmienna ma zwykly tekst, który rownie dobrze moze wartosc: "Przynies mi frytki". Dla php to bedzie tak samo bez znaczenia jak tekst z twoim kodem js.
emtiej
ja przyłączam się do pytania jak to zrobić, żeby przekonwertować tą zmienną na integer, albo coś w tym stylu, bo aktualnie nie da się przyrównać tej zmiennej do niczego... sam próbowałem różnymi sposobami.

Próbowałem nawet tak:
  1.  
  2. <script language="JavaScript">
  3.  
  4. if (screen.width>1024) {
  5.  
  6. rozdzialka="wieksze";
  7.  
  8. }
  9.  
  10. else {
  11.  
  12. rozdzialka="mniejsze";
  13.  
  14. }
  15.  
  16. </script>
  17.  
  18. <?php
  19.  
  20. $zmienna = '<script language=javascript>document.write(rozdzialka);</script>';
  21.  
  22. if ($zmiennaa=='wieksze')
  23. {
  24. echo "Rozdzielczosc jest wieksza niz 1024";
  25. }else{
  26. echo "Rozdzielczosc jest mniejsza niz 1024";
  27. }
  28. ?>
  29.  


I też lipa, nie działa heh dziwna sprawa z tymi zmiennymi przekazywanymi od javascript...
nospor
no przeciez tlumacze: kod js jest wykonywany po stronie przegladarki a nie po stronie serwera. Kod js nie moze zostac zinterpretowany przez php.

Najpierw wykonuje sie caly kod php, kod ten moze zwrocic kod html/js ktory to dopiero potem zostanie przetworzony przez przegladarke i nie zwraca on juz do tego samego kodu php zadnej odpowiedzi...

ten kod:
$zmienna = '<script language=javascript>document.write(rozdzialka);</script>';

if ($zmiennaa=='wieksze')
{
echo "Rozdzielczosc jest wieksza niz 1024";
}else{
echo "Rozdzielczosc jest mniejsza niz 1024";
}

jest rownowazny z tym
$zmienna = 'Przynies mi frytki i cole';

if ($zmiennaa=='przyniosł mi frytki i cole')
{
echo "Rozdzielczosc jest wieksza niz 1024";
}else{
echo "Rozdzielczosc jest mniejsza niz 1024";
}

nie ma tu nawet znaczenia literowka, '$zmiennaa' ktorą popelniles winksmiley.jpg
darko
Panowie:
[JAVASCRIPT] pobierz, plaintext
  1. if (screen.width>1024) {
  2. window.location.href = 'skrypt.php?r=1';
  3. }
  4. else {
  5. window.location.href = 'skrypt.php?r=2';
  6. }
[JAVASCRIPT] pobierz, plaintext


  1. switch($_GET['r']) {
  2. case 1:
  3. echo "jeden";
  4. break;
  5.  
  6. case 2:
  7. echo "dwa";
  8. break;
  9. }
xpander
Cytat
$zmienna zawiera kod js, ktory to jest wysylany do przegladarki i przegladarka go interpretuje i daje to w rezultacie 1, bo tą wartosc zwraca ci js. Ale to sie dzieje dopiero po stronie przeglądarki.


czyli problemem jest przekazanie wartości js--->PHP.
z tego co widze kolega darko proponuje wykorzystanie paska adresu
czy jeszcze jakoś można przekazać zmienną z js-->PHP?

powyższy skrypcik zapętla przeglądarkę...
darko
Ech...
  1. if($_GET['r'] == "" || !is_numeric($_GET['r'])) {
  2. echo "
  3. <script>
  4. if (screen.width>1024) {
  5. window.location.href = 'skrypt.php?r=1';
  6. }
  7. else {
  8. window.location.href = 'skrypt.php?r=2';
  9. }</script>";
  10. }
kingofspace
To akurat normalne ze zapętla przeglądarke:P
bo wszystko wladowales do jednego pliku i ciągle js ci przesyla na inną strone
zrob tak

1 plik

np

teatrozdzialki.php

  1.  
  2. if (screen.width>1024) {
  3.  
  4. window.location.href = 'index2.php?r=1';
  5.  
  6. }
  7.  
  8. else {
  9.  
  10. window.location.href = 'index2.php?r=2';
  11.  
  12. }


i następny plik

index2.php
  1.  
  2. switch($_GET['r']) {
  3.  
  4. case 1:
  5.  
  6. echo "jeden";
  7.  
  8. break;
  9.  
  10.  
  11.  
  12. case 2:
  13.  
  14. echo "dwa";
  15.  
  16. break;
  17.  
  18. }



Oczywiście niezbędne jest dokladne przefultrowanie i sprawdzenie danych przeslanych getem
skowron-line
Cytat(xpander @ 18.01.2010, 14:08:52 ) *
Chciałbym napisać skrypt php który ładuje obrazek z określonego folderu w zależności od rozdzielczości.

A nie możesz poprostu w JS zmienić atrybutu src dla zdjęcia ?

Krótki przykład
[JAVASCRIPT] pobierz, plaintext
  1. <html>
  2. <head>
  3. <script type="text/javascript">
  4.  
  5. function zmien()
  6. {
  7. document.getElementById( 'foto' ).src = 'fly/superman.gif';
  8. }
  9.  
  10. </script>
  11. </head>
  12. <body>
  13. <a href="java script:void(0);" onclick="zmien();">zamian obrazek</a>
  14. <img src="airplane.png" border="0" id="foto">
  15. </body>
  16. </html>
  17.  
[JAVASCRIPT] pobierz, plaintext
xpander
@skowron-line

cały problem przekazywania zmiennej js-->php polega na tym, że przerabiam szablon joomli, a konkretnie index.php

  1. <div id="ja-header" class="clearfix" style="background: url(
  2. <?php echo $tmpTools->templateurl();?>
  3. <?php
  4. $zmienna = "<script language=javascript>document.write(rozdzialka);</script>";
  5. if ($zmienna == '1') {
  6. echo ('/images/header/');
  7. echo $tmpTools->getRandomImage(dirname(__FILE__).DS.'images/header');
  8. }
  9. else{
  10. echo '/images/header_low/';
  11. echo $tmpTools->getRandomImage(dirname(__FILE__).DS.'images/header_low');
  12. }
  13. ?>) no-repeat top <?php if($this->direction == 'rtl') echo 'left'; else echo 'right';?>;">


i chciałem w ten sposób przystosować szablon do różnych rozdzielczości uzytkownika. proponujesz
całe ładowanie obrazka "header" przerzucić do js?

skowron-line
Wydaje mi się że chyba tak będzie lepiej.
xpander
  1. <div id="ja-header" class="clearfix" style="background: url(
  2. <script language="JavaScript">
  3. var rozdzialka=0;
  4. if (screen.width>1024) {
  5. document.write("/images/header/header1.jpg")
  6. }
  7. else {
  8. document.write("/images/header_low/header1.jpg")
  9. }
  10. </script>);
  11. no-repeat top <?php if($this->direction == 'rtl') echo 'left'; else echo 'right';?>;">


wypisuje mi treść skryptu na ekranie, zamiast ładować obrazki. używam złej funkcji do tego celu (document.write) ?
lukaszgolder
A nie przypadkiem document.write('<img src="/images/header/header1.jpg" />') Nie sprawdzałem czy działa, ale ewentualnie możesz też wyświetlić obrazek i jeśli szerokość jest większa / mniejsza to zmienić jego src np: document.getElementById("logo").src = '/images/header/header1.jpg'
skowron-line
Document.write nie używaj jak kolega wyżej napisał
- document.getElementById
- document.getElementsByTagName
i inne pochodne które pomagają dobrać się do elementu, tym bardziej że ty chcesz zmienić atrybut obrazka, a nie zmienić go całego.
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.