Fritz: JavaScript-Variablen in PHP

Hallo zusamme

folgendes Problem: Ich möchte aus einer Java-Script-Funktion heraus eine PHP-Seite öffnen und beim Aufruf Variablen aus der Java-Script-Funktion übergeben. Die JS-Funktion öffnet ein Fenster, falls ein vorher im Formular eingegebener Wert eine bestimmte Grenze überschreitet. Im neuen Fenster soll dieser Wert ausgegeben werden. Versucht habe ich es mit folgendem Code, der leider nicht richtig funktioniert, d.h. es wird nicht der Variablenwert ausgegeben, sondern nur "var2".

<script language="JavaScript">
  <!--
   function pop() {
    var2 = document.forms[0].zei001.value;
    if (var2>=40) {
    fenster=window.open("datei.php?var1=var2","name","width=400,height=300,resizable=yes");
    return false;
   }
   return true;
   }
   // -->
   </script>
 </head>
 <body>
  <form action="test2.php" method="post" onSubmit="return pop();">
<fieldset>
   <legend>Arbeitszeit</legend>
    <label for="zei001">Stunden/Woche</label>
    <input type="text" name="zei001" id="zei001"><br>
   </fieldset>
   <input type="submit" value="weiter"/>
  </form>

Code des php-Fensters (datei.php)

<body>
 <?php
 echo "Sie haben "."$_GET[var1]"." eingegeben!"
 ?>

Kann mir jemand sagen, wo das Problem liegt.
Vielen Dank
Fritz

  1. ersetze

    "datei.php?var1=var2"

    durch
    "datei.php?var1="+var2

    (woher soll JavaScript wissen, dass du mit var2 in einem String eine bestimmte Variable meinst?)

    1. Danke erstmal für die superschnellen Antworten

      ersetze

      "datei.php?var1=var2"
      durch
      "datei.php?var1="+var2

      (woher soll JavaScript wissen, dass du mit var2 in einem String eine bestimmte Variable meinst?)

      Nun erscheint zwar nicht mehr "var2", jetzt erscheint einfach ein leerer String. Es erscheint mir nur seltsam, weil das Formular ja eigentlich korrekt ausgelesen wird, denn das Popup erscheint tatsächlich nur, wenn die if-Abfrage false zurückgibt. Die Variable scheint aber hier leer zu sein. An was könnte das liegen?

      1. echo $begrüßung;

        Nun erscheint zwar nicht mehr "var2", jetzt erscheint einfach ein leerer String. Es erscheint mir nur seltsam, weil das Formular ja eigentlich korrekt ausgelesen wird,

        Womit überprüfst du deine Vermutung? Hast du dir den Wert von var2 und den Ausdruck aus dem er entstanden ist mal zur Kontrolle ausgeben lassen (z.B. mit alert())? Hast du auf die Fehlerkonsole geschaut, ob da alles bestens ist?

        denn das Popup erscheint tatsächlich nur, wenn die if-Abfrage false zurückgibt.

        Laut deinem Code sollte es genau beim Gegenteil der Fall sein.

        Die Variable scheint aber hier leer zu sein. An was könnte das liegen?

        Kontrollausgaben statt Spekulation!

        echo "$verabschiedung $name";

        1. Hallo

          echo $begrüßung;

          Nun erscheint zwar nicht mehr "var2", jetzt erscheint einfach ein leerer String. Es erscheint mir nur seltsam, weil das Formular ja eigentlich korrekt ausgelesen wird,

          Womit überprüfst du deine Vermutung? Hast du dir den Wert von var2 und den Ausdruck aus dem er entstanden ist mal zur Kontrolle ausgeben lassen (z.B. mit alert())? Hast du auf die Fehlerkonsole geschaut, ob da alles bestens ist?

          Habe ich mit alert() gemacht, es erscheint tatsächlich der Wert, den ich im Formular eingegeben habe. Und die Fehlerkonsole des Firefox ist wunschlos glücklich...

          denn das Popup erscheint tatsächlich nur, wenn die if-Abfrage false zurückgibt.

          Laut deinem Code sollte es genau beim Gegenteil der Fall sein.

          Sorry, habe ich eigentlich auch so gemeint, es erscheint natürlich wenn true zurückgegeben wird

          Die Variable scheint aber hier leer zu sein. An was könnte das liegen?

          Kontrollausgaben statt Spekulation!

          Wenn ich var1 ausgebe mit alert() erscheint "undefined". Und auch im popup erscheint nichts

          echo "$verabschiedung $name";

          Hat jemand noch weitere Ideen

          1. Wenn ich var1 ausgebe mit alert() erscheint "undefined".

            Das ist auch so. Im JavaScript gibt es nur einen String in dem var1 auftaucht. Wie das PHP-Script sowas interpretiert ist dem JavaScript völlig egal.

            Abfragen musst du also - und dies an mehreren Stellen deines JavaScripts - den Wert von var2, also alert(var2)

            1. Wenn ich var1 ausgebe mit alert() erscheint "undefined".

              Das ist auch so. Im JavaScript gibt es nur einen String in dem var1 auftaucht. Wie das PHP-Script sowas interpretiert ist dem JavaScript völlig egal.

              Das war mir eigentlich schon klar, danke trotzdem

              Abfragen musst du also - und dies an mehreren Stellen deines JavaScripts - den Wert von var2, also alert(var2)

              Das habe ich gemacht, gibt überall den richtigen Wert aus, solange alert() vor dem return-Statement aufgerufen wird. Wenn alert() nachher aufgerufen wird, passiert aber gar nichts mehr. Ich denke aber, das muss auch so sein, dass nichts mehr passiert, sobald etwas zurückgegeben wurde, oder? Da wird der Fehler wohl kaum liegen.

          2. echo $begrüßung;

            Kontrollausgaben statt Spekulation!
            Wenn ich var1 ausgebe mit alert() erscheint "undefined". Und auch im popup erscheint nichts

            Wo ist denn var1 definiert? In deinem Javascript-Code? Nein. Also kannst du es da auch nicht mit alert ausgeben. var1 ist innerhalb deines Javascript-Kontextes nur ein Teil einer Zeichenkette. var1 bekommt erst dann Bedeutung, wenn diese Zeichenkette von PHP ausgewertet wird, dann wird es zu einem Schlüssel im Array $_GET. Das solltest du dir zur Kontrolle erst einmal ausgeben lassen:

            echo '<pre>'; // Zeilenumbrüche der print_r-Ausgabe berücksichtigen
              print_r($_GET);

            Ist ein Element mit einem Schlüssel var1 vorhanden? Wenn icht, wie sieht die aufgerufene Adresse aus, die der Browser vom Server angefordert hat? (z.B. im Firefox mit "Seiteninformationen anzeigen")

            echo "Sie haben "."$_GET[var1]"." eingegeben!"

            Du verknüpfst drei Strings miteinander, um das Ergebnis dieser Operation ausgeben zu lassen. Dieser Zwischenschritt ist nicht notwendig. Du kannst die auszugebenden Werte auch mit Komma getrennt dem echo übergeben. Des weiteren verwendest du var1 als Schlüssel. Da dies ein String ist, ist var1 als solcher zu markieren, sprich in einfache oder doppelte Anführungszeichen zu setzen. PHP lässt diese Nachlässigkeit zwar ungesühnt, aber nicht immer kann eindeutig zwischen einer Zeichenkette und dem Namen einer Konstanten unterschieden werden. Setze das error_reporting auf E_ALL (und schalte display_errors ein), dann bekommst du eine Meldung über diese und andere Nachlässigkeiten. Auch Tippfehler bei Variablennamen lassen sich mit diesen Meldungen finden. Und zu guter Letzt ist es auch nicht sinnvoll, das PHP-Feature "im String nach Variablennamen suchen" zu verwenden, wenn der String nur den Variablennamen enthält. Zwei alternative Schreibweisen wären:

            echo 'Sie haben ', $_GET['var1'], ' eingegeben!';
              echo "Sie haben {$_GET['var1']} eingegeben!";

            echo "$verabschiedung $name";

            1. echo $begrüßung;

              Kontrollausgaben statt Spekulation!
              Wenn ich var1 ausgebe mit alert() erscheint "undefined". Und auch im popup erscheint nichts

              Wo ist denn var1 definiert? In deinem Javascript-Code? Nein. Also kannst du es da auch nicht mit alert ausgeben. var1 ist innerhalb deines Javascript-Kontextes nur ein Teil einer Zeichenkette. var1 bekommt erst dann Bedeutung, wenn diese Zeichenkette von PHP ausgewertet wird, dann wird es zu einem Schlüssel im Array $_GET. Das solltest du dir zur Kontrolle erst einmal ausgeben lassen:

              echo '<pre>'; // Zeilenumbrüche der print_r-Ausgabe berücksichtigen
                print_r($_GET);

              Das war der ultimative Tip, jetzt weiss ich wo der Fehler lag. Bei der Ausgabe der Variablenschlüssel habe ich gemerkt, dass ich, als ich eure ersten Tips ausprobiert habe, unbewusst einen Variablennamen verändert habe, äusserst peinlicher Anfängerfehler. Sorry für die Mühe, die ich euch bereitet habe und vielen Dank für die Hilfe, jetzt klappt es wunderbar.

              Ist ein Element mit einem Schlüssel var1 vorhanden? Wenn icht, wie sieht die aufgerufene Adresse aus, die der Browser vom Server angefordert hat? (z.B. im Firefox mit "Seiteninformationen anzeigen")

              echo "Sie haben "."$_GET[var1]"." eingegeben!"

              Du verknüpfst drei Strings miteinander, um das Ergebnis dieser Operation ausgeben zu lassen. Dieser Zwischenschritt ist nicht notwendig. Du kannst die auszugebenden Werte auch mit Komma getrennt dem echo übergeben. Des weiteren verwendest du var1 als Schlüssel. Da dies ein String ist, ist var1 als solcher zu markieren, sprich in einfache oder doppelte Anführungszeichen zu setzen. PHP lässt diese Nachlässigkeit zwar ungesühnt, aber nicht immer kann eindeutig zwischen einer Zeichenkette und dem Namen einer Konstanten unterschieden werden. Setze das error_reporting auf E_ALL (und schalte display_errors ein), dann bekommst du eine Meldung über diese und andere Nachlässigkeiten. Auch Tippfehler bei Variablennamen lassen sich mit diesen Meldungen finden. Und zu guter Letzt ist es auch nicht sinnvoll, das PHP-Feature "im String nach Variablennamen suchen" zu verwenden, wenn der String nur den Variablennamen enthält. Zwei alternative Schreibweisen wären:

              echo 'Sie haben ', $_GET['var1'], ' eingegeben!';
                echo "Sie haben {$_GET['var1']} eingegeben!";

              Vielen Dank für diese Profitips, werd ich befolgen!

              echo "$verabschiedung $name";

  2. Hi,

    nimm mal

    fenster=window.open("datei.php?var1="+var2,"name","width=400,height=300,resizable=yes");

    wenn du "datei.php?var1=var2" verwendest, übergibst du var2 als einfache  zeichenkette - die ausgabe, die du bis jetzt bekommst, ist also korrekt:-)

    grüße basti