Themm: 2 GET-Variabeln durch 2 Formulare übergeben: funktioniert nicht

Hi euch allen,
ich hab ein mittelschweres Problem: Ich habe 3 Formulare die aufeinanderaufbauen / verschachtelt sind. Das erste Formular soll die Variabel per GET weitergeben - das zweite auch. Das dritte per POST. Nun sollte die URL so aussehen: http://meineswebsite.de/Verzeichnis/?var1=bla1;var2=bla2 bzw. http://meineswebsite.de/Verzeichnis/?var1=bla1&var2=bla2 .
Das Problem ist nur, dass die zweite GET-Variable die erste GET-Variable überschreibt: http://meinewebsite.de/Verzeichnis/?var2=bla2 . Leider kann man ein & oder ; nicht einfach in den Namen von form ´rein schreiben - auch wenn Unicode aktiviert ist. Wie schaffe ich es also, beide Variabeln per GET weiterzugeben??
Bitte helft mir!

  1. Hello,

    Ich habe 3 Formulare die aufeinanderaufbauen /

    also nacheinander auf je einen Request des Clients vom Server als Response im HTML-Dokument geliefert werden?

    verschachtelt sind.

    Das ist nicht zulässig. HTML-Formulare dürfen nicht geschachtelt werden

    Das erste Formular soll die Variable per GET weitergeben -

    Du meinst also, einen Requestparameter an den Server per GET übertragen?

    das zweite auch.

    Wenn das zweite Formular einen GET-Parameter aus dem ersten Formular ebenfalls wieder als GET-Parameter an die URL anhängen soll, so liefere den Parameter einfach als versteckten Input-Value (<input type="hidden" name="erster_param" value="so einfach ist das?">) mit.

    Das dritte per POST.

    Dagegeb ist nichts einzuwenden.

    Nun sollte die URL so aussehen:

    http://meineswebsite.de/Verzeichnis/?var1=bla1;var2=bla2
    bzw.
        http://meineswebsite.de/Verzeichnis/?var1=bla1&var2=bla2 .

    Das ist möglich, wenn diese URi genau so als Action-Attribut in der Response, die das dritte Formular an den Client ausgeliefert hat, dringestanden hat.

    Das Problem ist nur, dass die zweite GET-Variable die erste GET-Variable überschreibt:

    Jede Absendung eines Requests aus dem Browser per GET-Methode löscht die in der URi enthaltenen Parameter und hängst stattdessen die neuen gülitgen Requestparameter an. Wie man ältere aus vorhergegangenen Formularen eines Vorganges erhalten kann -> siehe oben!

    Aber warum willst Du beim dritten Schritt überhaupt noch Parameter per GET übertragen, wenn Du dich doch sowieso schon für die Methode POST entschieden hast? Dann kannst Du doch alle Requestparameter beim dritten Mal per POST üertragen.

    Aber es ist - wie schon erwähnt - durchaus möglich, eine URL mit angehängten GET-Parametern als Action-Attribut des Formulars zu verwenden und trotzdem die Methode POST zu benutzen, um _zusätzliche_ Parameter per Post zu übertragen.

    Es gilt eine ungeschriebene Regel: übertrage per GET, was in Suchmaschinen landen soll, übertrage per POST, was nur den User und seine privaten Vorgänge betrifft, also _nicht_ in Suchmaschinen gespeichert werden soll.

    Darüberhinaus gibt es selbstverständlich noch andere gute Gründe für die Entscheidung zwischen GET und POST.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Danke für die schnelle Antwort, werde ich gleich ausprobieren. Nur eine Frage: Kann ein verstecktes Formular durch onchange="submit()" übertragen werden?

      1. Hello,

        Danke für die schnelle Antwort, werde ich gleich ausprobieren. Nur eine Frage: Kann ein verstecktes Formular durch onchange="submit()" übertragen werden?

        Du sollst keine Formulare verstecken! Welchen Nutzen hätten die dann?
        Und von JavaScript war bisher auch keine Rede :-|

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Du sollst keine Formulare verstecken! Welchen Nutzen hätten die dann?
          Und von JavaScript war bisher auch keine Rede :-|

          Ich meinte eig. mitsenden ;) . Hat auch funktioniert. :D

          1. 1.Warum keine Sitzung für Passwörter?
            2.Danke für den Array Trick!!
            3. Es funktioniert mit Toms Lösung.
            :-)

  2. hi,

    da du ja eh mit php arbeitest, würde ich dir zu $_SESSION raten.
    Erstens kann man das Formular dann nicht in der mitte anfangen und die Daten nicht durcheinander bringen/verfälschen.

    So musst du auch nicht dauernd aufs neue prüfen, ob die Variablen noch gut sind. Immerhin kann sie mit POST und GET jeder ändern.

    Für das & im form solltest du eher &amp; nehmen, dann motzt auch der validator nicht mehr.

    Gruß Niklas

    --
    Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.
    1. da du ja eh mit php arbeitest, würde ich dir zu $_SESSION raten.
      Erstens kann man das Formular dann nicht in der mitte anfangen und die Daten nicht durcheinander bringen/verfälschen.

      $_SESSION habe ich mir eig. für Passwörter vorbehalten ;) .

      So musst du auch nicht dauernd aufs neue prüfen, ob die Variablen noch gut sind. Immerhin kann sie mit POST und GET jeder ändern.

      Was meinst Du mit gut?

      Für das & im form solltest du eher &amp; nehmen, dann motzt auch der validator nicht mehr.

      Meine URL sieht jetzt so aus: http://meinewebsite.de/Verzeichnis/?var2=bla2 .
      Die erste Variabel wird immernoch überschrieben, aber es funktioniert. Ein Semikolion ist deshalb nicht notwendig.
      PS: Google arbeitet auch mit Unds ;) - ist also nicht so schwerwiegend ;) .

      1. Hallo

        da du ja eh mit php arbeitest, würde ich dir zu $_SESSION raten.
        Erstens kann man das Formular dann nicht in der mitte anfangen und die Daten nicht durcheinander bringen/verfälschen.
        $_SESSION habe ich mir eig. für Passwörter vorbehalten ;) .

        Sessions sind auch für das Zwischenspeichern von Daten, die den Benutzer, dem die Session zugeordnet ist, betreffen.

        So musst du auch nicht dauernd aufs neue prüfen, ob die Variablen noch gut sind. Immerhin kann sie mit POST und GET jeder ändern.
        Was meinst Du mit gut?

        Daten, die (hin und her) gesendet werden, sind manipulierbar. Du prüfst doch hoffentlich die erhaltenen Daten? Prüfst du die, die du schon erhalten hattest, auch im nächsten Level erneut?

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
        Veranstaltungsdatenbank Vdb 0.3
      2. Hello,

        $_SESSION habe ich mir eig. für Passwörter vorbehalten ;) .

        Passwörter sollte man aber nicht in $_SESSION ablegen. Es ist leider immer mal wieder möglich, dass eine Session-Datei "entführt" wird. Da hängt ganz davon ab, wie sicher der Provider die Einrichtung vorgenommen hat.

        Der Session-Key ist schon Unsicherheit genug. Aber der gilt immer nu eine gewisse Zeit.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  3. Tach!

    Nun sollte die URL so aussehen: http://meineswebsite.de/Verzeichnis/?var1=bla1;var2=bla2 bzw. http://meineswebsite.de/Verzeichnis/?var1=bla1&var2=bla2 .
    Das Problem ist nur, dass die zweite GET-Variable die erste GET-Variable überschreibt: http://meinewebsite.de/Verzeichnis/?var2=bla2 .

    Überschreibt? Meinst du, dass die Parameter nicht var1 und var2 sondern beide var heißen, à la var=foo;var=bar? Dann schreibt PHP den ersten Wert in $_GET['var'] und den zweiten Wert auch wieder in $_GET['var'], woraufhin der erste verloren geht. Das bekommt man nur gelöst, indem man var[] mit []-Klammern nimmt, dann erzeigt PHP ein Array: $_GET['var'][] = 'foo'; $_GET['var'][] = 'bar';

    Oder meinst du, dass vom zweiten Formular der Eintrag in action-Attribut bereits einen Querystring aus dem vorhergehenden Vorgang enthält, also action="example.php?var1=foo;var2=bar"? Dann ignoriert der Browser den Querystring und ersetzt ihn durch die neuen Formularparameter. Du bekommst dann die alten Parameter nur dann auch noch angehängt, wenn sie Bestandteil des Formulars sind, also zum Beispiel als die bereits erwähnten Hidden-Elemente. Oder eben die Session, dann geht das Zeug nicht noch zweimal auf die Reise zum Browser.

    Leider kann man ein & oder ; nicht einfach in den Namen von form ´rein schreiben - auch wenn Unicode aktiviert ist.

    Der Name von form? Du meinst das name-Attribut des form-Elements? Was willst du darin mit & oder ; und wie dachtest du soll das dein Problem lösen? Oder meintest du etwas anderes?

    dedlfix.