Form-Übergabe nach window.open funktioniert nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Form-Übergabe nach window.open funktioniert nicht

    Hallo,

    grüble hier über eine Fehlfunktion und komme nicht dahinter. Es wird ein Form dargestellt in dem der User 2 Datumswerte auswählen soll die dann an eine Seite in einem neuen Fenster übergeben werden sollen. Diese Seite liegt in einer Subdomain (vielleicht ist da der Hund begraben, wüsste aber nicht wieso). Hier der relevante Auszug aus dem Code:

    <td rowspan="5" background="../de/image_de/anfrage2.gif" style="padding:2px">
    <div align="center">
    <form action="https://booking.arnia.at/de/y2.php" method="post" enctype="multipart/form-data" name="form1">
    <fieldset class="anfrage">
    <legend>Ihr Anreisetag</legend>
    <select name="vond">
    <?php
    $ret = time();
    $ret = $ret + 86400;
    $tag = gmdate("j", $ret);
    $monat = gmdate("n", $ret);
    $jahr = gmdate("Y", $ret);
    for ($var = 1; $var <= 31; $var++) {
    if ($var != $tag) {
    echo "<option value=" . $var . ">" . $var . "</option>\n";
    } else {
    echo "<option value=" . $var . " selected>" . $var . "</option>\n";
    }
    }
    ?>
    </select>
    <select name="vonm">
    <?php
    for ($var = 1; $var <= 12; $var++) {
    if ($var != $monat) {
    echo "<option value=" . $var . ">" . $var . "</option>\n";
    } else {
    echo "<option value=" . $var . " selected>" . $var . "</option>\n";
    }
    }
    ?>
    </select>
    <select name="vony">
    <?php
    $ret = time();
    $jahr = gmdate("Y", $ret);
    $bisjahr = $jahr + 2;
    for ($var = $jahr; $var <= $bisjahr; $var++) {
    if ($var != $jahr) {
    echo "<option value=" . $var . ">" . $var . "</option>\n";
    } else {
    echo "<option value=" . $var . " selected>" . $var . "</option>\n";
    }
    }
    ?>
    </select>
    </fieldset>
    <fieldset class="anfrage">
    <legend>Ihr Abreisetag</legend>
    <select name="bisd">
    <?php
    $ret = time();
    $ret = $ret + 172800;
    $tag = gmdate("j", $ret);
    $monat = gmdate("n", $ret);
    $jahr = gmdate("Y", $ret);
    for ($var = 1; $var <= 31; $var++) {
    if ($var != $tag) {
    echo "<option value=" . $var . ">" . $var . "</option>\n";
    } else {
    echo "<option value=" . $var . " selected>" . $var . "</option>\n";
    }
    }
    ?>
    </select>
    <select name="bism">
    <?php
    for ($var = 1; $var <= 12; $var++) {
    if ($var != $monat) {
    echo "<option value=" . $var . ">" . $var . "</option>\n";
    } else {
    echo "<option value=" . $var . " selected>" . $var . "</option>\n";
    }
    }
    ?>
    </select>
    <select name="bisy">
    <?php
    $ret = time();
    $jahr = gmdate("Y", $ret);
    $bisjahr = $jahr + 2;
    for ($var = $jahr; $var <= $bisjahr; $var++) {
    if ($var != $jahr) {
    echo "<option value=" . $var . ">" . $var . "</option>\n";
    } else {
    echo "<option value=" . $var . " selected>" . $var . "</option>\n";
    }
    }
    ?>
    </select>
    </fieldset>
    <input name="button" type="submit" class="weiterbutton" id="button" value="Jetzt Anfragen" onclick="zianfrage(this.href); return false" />
    </form></div></td>


    Natürlich habe ich im head das Skript:
    <script type="text/javascript">
    function zianfrage (Adresse) {
    MeinFenster = window.open(Adresse, "Anfrageassistent", "width=700,height=600,left=200,top=100,location=no");
    MeinFenster.focus();
    }
    </script>


    Hat irgendwer eine Idee oder nen Tipp für mich?

    Danke
    Gruß
    Alexander

  • #2
    1. Regel lesen und befolgen: http://www.php-resource.de/forum/sho...threadid=50455 Danke.

    2. Der Button hat kein href-Attribut, also was soll denn das mit this.href als Übergabewert?

    3. So wie du das Popup öffnest, wird überhaupt keine Form-Element übergeben.

    Kommentar


    • #3
      ad 1)
      Auf gut deutsch ich setze die PHP Anfang und Endtags vor und am Ende des Codes auch wenn html Elemente enthalten sind?

      ad 2)
      Ja klar - hatte die Funktion schon in Verwendung mit a href und dann nur kopiert, kann somit hier nicht gehen, sollte aber so behoben sein:
      PHP-Code:
      <script type="text/javascript">
      function 
      zianfrage (Adresse) {
        
      MeinFenster window.open("https://booking.arnia.at/de/y2.php""Anfrageassistent""width=700,height=600,left=200,top=100,location=no");
        
      MeinFenster.focus();
      }
      </
      script
      ad 3)
      Aber wie soll ich das Fenster sonst öffnen wenn nicht mit window.open()?

      Gruß
      Alexander

      Kommentar


      • #4
        Original geschrieben von ah72103

        ad 3)
        Aber wie soll ich das Fenster sonst öffnen wenn nicht mit window.open()?
        Fenster zunächst ohne Ziel öffnen, anschließend das Formular mit target in das neue Fenster senden.

        Kommentar


        • #5
          Also ich glaub ich steh auf der Leitung:

          Wenn ich Dich recht verstehe dann sollte das JS-Skript dann so aussehen:

          PHP-Code:
          <script type="text/javascript">
          function 
          zianfrage (Adresse) {
            
          MeinFenster window.open("https://booking.arnia.at/de/y2.php""Anfrageassistent""width=700,height=600,left=200,top=100,location=no");
            
          MeinFenster.focus();
          }
          </
          script
          wobei der erste Parameter auch "" sein kann, richtig?

          und der Form Aufruf sollte so aussehen:
          PHP-Code:
          <form action="https://booking.arnia.at/de/y2.php" target="Anfrageassistent" method="post" enctype="multipart/form-data" name="form1"
          Wenn ich das so mache bekomme ich wunderbar das neue Fenster mit der richtigen URL aber dort habe ich keine $_POST Variablen zum Auswerten.

          Jetzt hätte ich in einem anderen Threat einen Hinweis gefunden im Form Aufruf noch ein onsubmit Event einzubinden (in meinem Fall onsubmit='submitForm(document.form1); return false;'), aber auch mit der Methode bekomme ich keine Daten übergeben.

          Gruß
          Alexander

          Kommentar


          • #6
            Weißt du denn überhaupt was return false; in:

            1. onsubmit der Form oder
            2. onclick des Buttons

            bewirkt? Richtig, es sendet nichts. Also, wenn du die Verarbeitung im Popup haben willst, musst du die Formelementinhalte per JS auslesen und per JS im Popup an dem Server senden.

            Kommentar


            • #7
              OK ich geb zu dafür reicht dann mein rudimentäres JS Wissen nicht wirklich aus.

              Ich war immer der Meinung dass return false "nur" bewirkt dass der Focus nicht zum "alten" Fenster dass den Aufruf startet zurückspringt.

              Ein Auslesen der Daten mit JS krieg ich nicht hin (man muss seine Grenzen kennen), also muss ich mir irgendeine andere Lösung einfallen lassen um die Sache mit php zu umschiffen.

              Gruß
              Alexander

              Kommentar


              • #8
                Mit Hilfe eines 7 Jahre alten Threads habe ich jetzt eine Lösung die auch sehr einfach ist. Für alle die irgendwann mal eine derartige Lösung suchen:

                Im Head die JS Funktion deklarieren:
                PHP-Code:
                <script language="javascript">
                function 
                zianfrage() {
                vond document.form1.vond.value;
                vonm document.form1.vonm.value;
                vony document.form1.vony.value;
                bisd document.form1.bisd.value;
                bism document.form1.bism.value;
                bisy document.form1.bisy.value;
                window.open('https://booking.arnia.at/de/y2b.php?vond='+escape(vond)+'&vonm='+escape(vonm)+'&vony='+escape(vony)+'&bisd='+escape(bisd)+'&bism='+escape(bism)+'&bisy='+escape(bisy),'Anfrageassistent','toolbar=no, location=no, directories=no, menubar=no, width=700, height=600, top=100, left=200');
                return 
                false; }
                </
                script
                form1 ist der Name meines Formulars im document; vonm, vond, etc. sind die 6 Variablen die ich über Select auswählen lasse (kann natürlich jeder Formularfeldtyp sein).

                Der Form-Tag lautet einfach nur:
                PHP-Code:
                <form name="form1"
                und der Submit sieht so aus:
                PHP-Code:
                <input name="button" type="submit" class="weiterbutton" value="Jetzt Anfragen" onClick="return zianfrage();" /> 
                Einziger Nachteil ist, dass die Daten mittels GET übergeben werden aber solange es nicht ewig lange Datenmengen sind und man halt die auswertende Seite entsprechend von $_POST auf $_GET umbaut geht das schon.

                Gruß
                Alexander

                Kommentar


                • #9
                  Öh, ging das nicht mit

                  window.open('...', Anfrageassistent' [...] )

                  <form action="..." target="Anfrageassistent"> ?

                  Kann mich aber auch täuschen...

                  Kommentar


                  • #10
                    Dachte ich auch, aber mehrere Versuche mit diesem Prinzip schlugen fehl. Es wurden nie die Daten aus dem Formular mit übergeben.

                    Nach Hinweis von asp2php dass ich jedenfalls die Daten im neuen Fenster mit JS verarbeiten muss habe ich mich auf die Suche gemacht, probiert und bin zu diesem Ergebnis gekommen.

                    Gruß
                    Alexander

                    Kommentar


                    • #11
                      Original geschrieben von ah72103
                      Dachte ich auch, aber mehrere Versuche mit diesem Prinzip schlugen fehl. Es wurden nie die Daten aus dem Formular mit übergeben.
                      Natürlich, weil du in einem gezeigten Versuch ja auch kein "leeres" Fenster geöffnet hast, sondern gleich das Script, welches die Formulardaten auswerten soll, als Inhaltsadresse für das neue Fenster angegeben hast - das wird dann erst mal per GET angefordert, und erhält deshalb keine POST-Daten.


                      window.open("about:blank", "fenstername", ...)

                      <form action="..." target="fenstername" method="post">

                      - das sollte so eigentlich funktionieren.

                      (Ggf. das Abschicken des Formulars noch an die "Rückkehr" des window.open-Aufrufes binden, bzw. mit einem kleinen Timeout versehen, damit der Browser auch Zeit hat, das Fensterobjekt erst mal zu generieren.)



                      Und das nächste Mal brichst du deinen Code bitte wirklich um, anstatt ihn einfach nur unlesbar klein, aber immer noch überbreit zu formatieren!
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar

                      Lädt...
                      X