Enrico: Formular per POST senden und zusätzliche Parameter übergeben

Hallo,

so, jetzt komme ich endlich wieder dazu, mich meiner Seite praktisch zu widmen.

Ich hatte mich in meinem letzten Beitrag ja dazu entschlossen, ganz von JavaScript wegzugehen und alles über PHP zu realisieren.

Damit verbunden war es notwendig, auch meine Menüs umzuschreiben.

Ich habe jetzt pro Menüpunkt einen einzelnen submit-Button.

Das zugehörige Formular erhält weitere Werte, wie Artikelbezeichnung, Artikelbeschreibung, Farbe,... beim Aufbauen der Seite und wird per POST übermittelt.

Wie kann ich nun dem Formular den Haupt- und ggfs. auch Untermenüpunkt zusätzlich zum eigentlichen Formular beim Absenden übergeben, ohne auf GET wechseln zu müssen?

Vielen Dank und Gruß,
Enrico

  1. Hi,

    Wie kann ich nun dem Formular den Haupt- und ggfs. auch Untermenüpunkt zusätzlich zum eigentlichen Formular beim Absenden übergeben, ohne auf GET wechseln zu müssen?

    ich finde das Konzept nicht gut - POST verwendet man normalerweise dann, wenn der Hauptzweck des Requests das Übermitteln von Daten _zum_ Server ist und die _vom_ Server gelieferte Antwort nur von untergeordneter Bedeutung ist. Typische Beispiele sind etwa das Absenden einer Bestellung oder eines Gästebucheintrags.
    Als Faustregel wird gern gesagt: Verwende POST, wenn der Request den Datenbestand auf dem Server verändert (bzw. verändern könnte); verwende GET, wenn derselbe Request mehrmals hintereinander auch dieselbe Antwort erzeugen soll und sich dadurch kein serverseitiger Zustand ändert.

    Davon abgesehen: Du suchst möglicherweise  nach <input type="hidden">.

    Ciao,
     Martin

    --
    Ordnung schaffen heißt, das Eigelb vom Dotter zu trennen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. hi,

    mit einem Formular

    <form action="{{url}}?state=post" method="POST">

    wird bei einem POST auch der Parameter state=post gesendet. Worin liegt denn Dein Problem eigentlich?

    Hotti

    1. Hallo Hotti,
      Hallo Martin,

      danke für eure Antworten.

      OK, dann habe ich mich möglicherweise doch nicht ganz schlüssig ausgedrückt.

      Prinzipielle Abfolge:

      1. Menü wird beim ersten Seitenaufruf initial aufgebaut

      2. Besucher klickt im Hauptmenü beispielsweise "Rüstzeug" an
         2.1 Senden des Formulars über POST
         2.2 Seite wird neu aufgerufen und das Menü angepasst (Hauptmenüpunkt hervorgehoben und Untermenü angezeigt)

      3. Besucher klickt im Untermenü beispielsweise "Für den Kopf" an
         3.1 Erneutes Senden des Formulars über POST
         3.2 Seite wird neu aufgerufen und das Menü angepasst (Haupt- und Untermenüpunkt werden hervorgehoben)
         3.3 Sortimentsdatei wird eingelesen
         3.4 Die der Auswahl zugehörigen Artikel werden angezeigt
         3.5 Details zu den Artikeln werden versteckten Textfeldern übergeben

      Das Absenden hatte bislang mittels JavaScript einwandfrei funktioniert, da ich die Menüpunkte als einzelne divs mit onmouseover und onclick definiert hatte.

      Bei onmouseover über die Menüs wurden die Werte an versteckte Textfelder übergeben, bei onclick das Formular über JavaScript abgesendet.

      Mein Problem ist nun, dass ich, da ich jetzt ja kein JavaScript mehr einsetze(n will), den einzelnen submit-Buttons mitteilen muss, das Formular UND zusätzlich noch die Werte für Haupt- und ggfs. Untermenü zu senden.

      @Martin:
      Das Verstecken der Felder ist kein Problem

      Gruß
      Enrico

      1. Hi,

        Prinzipielle Abfolge:

        1. Menü wird beim ersten Seitenaufruf initial aufgebaut

        2. Besucher klickt im Hauptmenü beispielsweise "Rüstzeug" an
             2.1 Senden des Formulars über POST
             2.2 Seite wird neu aufgerufen und das Menü angepasst (Hauptmenüpunkt hervorgehoben und Untermenü angezeigt)

        Warum POST?
        Was, wenn ich jemandem einen Direktlink zu einer Unterseite schicken/bookmarken möchte?

        Mein Problem ist nun, dass ich, da ich jetzt ja kein JavaScript mehr einsetze(n will), den einzelnen submit-Buttons mitteilen muss, das Formular UND zusätzlich noch die Werte für Haupt- und ggfs. Untermenü zu senden.

        Warum?
        Warum navigierst du nicht über den üblichen Weg – GET?

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hallo ChrisB,

          das hatte ich mir auch überlegt, ist aber meiner Meinung nach eher weniger für mein Vorhaben geeignet, da ich zu einem späteren Zeitpunkt umfangreichere Informationen (Artikelbeschreibung, gewählte Farbe, Größe, Preis,...) übergeben werde.

          Folgendes ist mir aber gerade aufgrund Deines Vorschlags eingefallen:

          Navigation über normale Links und GET, Übergabe weiterer Informationen an Session-Variablen.

          Was würdest Du davon halten?

          Gruß
          Enrico

          1. das hatte ich mir auch überlegt, ist aber meiner Meinung nach eher weniger für mein Vorhaben geeignet, da ich zu einem späteren Zeitpunkt umfangreichere Informationen (Artikelbeschreibung, gewählte Farbe, Größe, Preis,...) übergeben werde.

            Artikelbeschreibung, gewählte Farbe, Größe sind in der Artikelnummer enthalten. Schicke die per GET. Falls die nicht in der Artikelnummer enthalten sind generiere Dir eine spezielle "Shopnummer" mit codierten Farben und Größenangaben.

            Der Preis wird immer auf dem Server ermittelt. Grund: Sonst können die Käufer auch mit geringem Sachverstand womöglich für Dich sehr ungünstige Verträge schließen.

            Ich will Dir nicht meine Aufassung vorenthalten, dass jemand auf dem Stand Deines Wissens nicht an einem Webshop herumpfuschen sollte.

            Derlei geht regelmäßig gründlich daneben und dann wird es RICHTIG TEUER.

            Jörg Reinholz

            1. Hallo Jörg,

              ok, dann werde ich den Shop dahin gehend umstellen.

              Manipulationen, zumindest was das Enschleusen bösartigen Codes anbelangt, sollten, das hoffe ich zumindest, nicht möglich sein, da ich jeden Querystring mittels regulärer Ausdrücke auf korrekten Aufbau hin prüfe, die Preisermittlungen stelle ich auch um.

              Gruß
              Enrico

      2. Om nah hoo pez nyeetz, Enrico!

        Du brauchst kein Formular. Bestimme anhand der URL, was angezeigt wird.

        Matthias

        --
        1/z ist kein Blatt Papier.

        1. Hallo Matthias,

          Bestimme anhand der URL, was angezeigt wird

          Aber ich muss der URL ja erst mitteilen, was und in welchem Umfang angezeigt werden soll oder habe ich Dich hier jetzt völlig missverstanden?

          Gruß
          Enrico

      3. Om nah hoo pez nyeetz, Enrico!

        1. Besucher klickt im Hauptmenü beispielsweise "Rüstzeug" an
             2.1 Senden des Formulars über POST
             2.2 Seite wird neu aufgerufen und das Menü angepasst (Hauptmenüpunkt hervorgehoben und Untermenü angezeigt)

        An dieser Stelle soll die Seite rüstzeug.php oder index.php?kat=rüstzeug geöffnet werden. Es besteht keinerlei Notwendigkeit, hier $_POST zu verwenden. Für die Hervorhebung des aktuellen Menüpunktes hilft das PHP-Manual also if ($_SERVER['...'])...

        1. Besucher klickt im Untermenü beispielsweise "Für den Kopf" an
             3.1 Erneutes Senden des Formulars über POST
             3.2 Seite wird neu aufgerufen und das Menü angepasst (Haupt- und Untermenüpunkt werden hervorgehoben)

        s.o.

        3.3 Sortimentsdatei wird eingelesen
           3.4 Die der Auswahl zugehörigen Artikel werden angezeigt

        s.o

        3.5 Details zu den Artikeln werden versteckten Textfeldern übergeben

        Das verstehe ich nicht.

        Grundsätzlich solltest du solche Sachen nicht auf dem Client regeln sondern auf dem Server, weil du Manipulationen auf dem Client relativ hilflos ausgeliefert bist.

        Matthias

        --
        1/z ist kein Blatt Papier.

        1. Hallo Matthias,

          die Darstellung der Menüs funktioniert ja auch reibungslos (wird alles über PHP umgesetzt).

          Ich habe derzeit eine Kombination aus GET und Sessionvariablen.

          Dies funktioniert auch, POST wäre mir halt lieber, da in der Adressleiste dann nichts angezeigt wird.

          Mir ging es darum, die zu schickenden Daten vor den Augen unserer zukünftigen Besucher zu verstecken und bei POST wird in der Adressleiste ja bekanntlich nichts angezeigt.

          Folgendes ist mir gerade in den Sinn gekommen, aber macht das Sinn?

          Definition der einzelnen Menüpunkte als jeweils eigene Form mit Haupt- und ggfs. Untermenüpunktnummer in versteckten Eingabefeldern und Link in Form eines eigenen Submitbuttons:

          1. Aufbau Hauptmenü:

          <form action="Index.php" method="post">
             <input name="Hauptmenue" value="0" type="hidden">
             <input type="submit" value="Startseite">
          </form>
          <form action="Index.php" method="post">
             <input name="Hauptmenue" value="1" type="hidden">
             <input type="submit" value="Wir über uns">
          </form>
          <form action="Index.php" method="post">
             <input name="Hauptmenue" value="2" type="hidden">
             <input type="submit" value="Rüstzeug">
          </form>
          ...

          2. Aufbau Untermenü (Beispiel zu gewähltem Punkt "Rüstzeug"):

          <form action="Index.php" method="post">
             <input name="Hauptmenue" value="1" type="hidden">
             <input name="Untermenue" value="0" type="hidden">
             <input type="submit" value="Wir über uns">
          </form>
          <form action="Index.php" method="post">
             <input name="Hauptmenue" value="1" type="hidden">
             <input name="Untermenue" value="1" type="hidden">
             <input type="submit" value="Termine">
          </form>
          <form action="Index.php" method="post">
             <input name="Hauptmenue" value="1" type="hidden">
             <input name="Untermenue" value="2" type="hidden">
             <input type="submit" value="Fotos">
          </form>
          ...

          Gruß
          Enrico

          1. Hallo,

            POST wäre mir halt lieber, da in der Adressleiste dann nichts angezeigt wird.

            gerade das wäre aber ein schwerwiegender Nachteil, wie ChrisB schon andeutete.

            Ciao,
             Martin

            --
            Kennst du ein eisenhaltiges Abführmittel mit zwölf Buchstaben? - Handschellen.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          2. Mir ging es darum, die zu schickenden Daten vor den Augen unserer zukünftigen Besucher zu verstecken und bei POST wird in der Adressleiste ja bekanntlich nichts angezeigt.

            Du erkaufst Dir etwas, was KEINERLEI Vorteile bringt damit, dass Du SCHWERWIEGENDE NACHTEILE in Kauf nimmst! Hier lautet der SCHWERWIEGENDE NACHTEIL, dass die Kunden NICHTS oder SEHR VIEL WENIGER kaufen, weil beim Stöbern im Shop aller Sekunden diese besch... Rückfrage auftaucht, ob die Daten nochmals gesendet werden sollen. Da KOTZEN die KUNDEN und suchen sich entnervt einen anderen Shop. Hast Du ein Staatsmonopol oder WARUM meinst Du die KUNDEN so grob und WEGEN NICHTS VERÄRGERN zu können?

            Mann Gottes! Warum (in des Teufels Name!) soll in der Adresszeile nicht angezeigt werden, was auf dem Bildschirm ohnehin zu sehen ist?

            Jörg Reinholz

            1. Ok, ok, alles klar, bin überzeugt...

              Dann belasse ich es bei GET und hole die Preise etc allesamt übern Server.

              Hast recht.

              Gruß
              Enrico

          3. Om nah hoo pez nyeetz, Enrico!

            Definition der einzelnen Menüpunkte als jeweils eigene Form

            Ein Menü sollte kein Formular sein.

            Matthias

            --
            1/z ist kein Blatt Papier.

  3. Das zugehörige Formular erhält weitere Werte, wie Artikelbezeichnung, Artikelbeschreibung, Farbe,... beim Aufbauen der Seite und wird per POST übermittelt.

    Woran du vielleicht auch nicht gedacht hast:
    Allgemein ist POST eine sehr nervige Sache, wenn du wirklich bei jedem Seitenwechsel via POST Daten übergibst. Wenn man bei Firefox (und ich denk mal bei den anderen Browsern wird es gelich/ähnlich sein) die "normale" Vor- und Zurückfunktion verwendet, wird jedes mal ein Dialog geöffnet im dem gefragt wird, ob die Daten erneut übertragen werden sollen. Ich für meinen Teil bekomm ja schon halb die Kriese, wenn ich 4x auf Zurück klicke und das einmal kommt, wenn das auf aber mit jeder Seite der Fall wäre, würde ich wohl in Zukunft einen riesigen Bogen um den Onlineshop machen.

    MfG
    bubble

    1. Hallo,

      Allgemein ist POST eine sehr nervige Sache, wenn du wirklich bei jedem Seitenwechsel via POST Daten übergibst. Wenn man bei Firefox (und ich denk mal bei den anderen Browsern wird es gelich/ähnlich sein) die "normale" Vor- und Zurückfunktion verwendet, wird jedes mal ein Dialog geöffnet im dem gefragt wird, ob die Daten erneut übertragen werden sollen.

      abgesehen davon, dass ich diesem Einwand grundsätzlich zustimme - warum aktivierst du in so einem Fall nicht eines der vorher aktiven Tabs? Ich weiß nicht, wann ich die "Zurück"-Funktion zuletzt benutzt habe, aber das dürfte Jahre her sein.

      wenn ich 4x auf Zurück klicke ...

      ... wäre das aus meiner Sicht ein Zeichen ultimativer Verzweiflung.

      Ciao,
       Martin

      --
      Die letzten Worte des Privatdetektivs:
      Jetzt wird es mir klar: SIE sind der Mörder!
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. abgesehen davon, dass ich diesem Einwand grundsätzlich zustimme - warum aktivierst du in so einem Fall nicht eines der vorher aktiven Tabs? Ich weiß nicht, wann ich die "Zurück"-Funktion zuletzt benutzt habe, aber das dürfte Jahre her sein.

        z.B. wenn ich in einer Dokumentation etwas bestimmtes suche, das nach einigen Verweisen erst finde und dann noch eine Unklarheit auftritt, ich aber weiß, dass ich da auf vor ein paar Verweisen war, aber nich genau vor wie vielen, dann passiert das schonmal. Ich höffne nicht für jeden Verweis einen neuen Tab, ich hab so meist schon zu viel Kram permament offen (aktuell sind es z.B. 5 Fenster mit je rund 10 Tabs)

        Und wenn ich so auf die ältere Generation im meinem Umfeld blicke, seh ich da teilweise recht wenig Erfahrung, was das Bedienen von Browsern angeht und Tabs werfen jene dann komplett aus dem Konzept. Und je nach dem, was in dem Onlineshop angeboten wird, könnte diese ja auch eine Zielgruppe darstellen. Und die werden dann schon eher mit vor und zurück hantieren als unsereins.

        MfG
        bubble

        1. Hi,

          warum aktivierst du in so einem Fall nicht eines der vorher aktiven Tabs? Ich weiß nicht, wann ich die "Zurück"-Funktion zuletzt benutzt habe, aber das dürfte Jahre her sein.
          [...] Ich höffne nicht für jeden Verweis einen neuen Tab

          ich schon, außer ich bin mir _ganz_ sicher, dass die Seite erledigt und abgehakt ist.

          Und wenn ich so auf die ältere Generation im meinem Umfeld blicke, seh ich da teilweise recht wenig Erfahrung, was das Bedienen von Browsern angeht und Tabs werfen jene dann komplett aus dem Konzept.

          Das ist nicht unbedingt eine Altersfrage. Gewohnheiten, die die Handhabung eigentlich unnötig verkomplizieren, ziehen sich von Jung bis Alt quer durch. Ab und zu versuche ich dann, diesen Menschen eine Alternative vorzuschlagen, und manchmal kommt dann eine Reaktion, die irgendwie in das Schema "Ach, wie praktisch!" passt. ;-)

          So long,
           Martin

          --
          Niemand lebt allein von seinen Träumen.
          Aber wer träumt, lebt noch.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Hi,

            warum aktivierst du in so einem Fall nicht eines der vorher aktiven Tabs? Ich weiß nicht, wann ich die "Zurück"-Funktion zuletzt benutzt habe, aber das dürfte Jahre her sein.
            [...] Ich höffne nicht für jeden Verweis einen neuen Tab

            ich schon, außer ich bin mir _ganz_ sicher, dass die Seite erledigt und abgehakt ist.

            Bis ich auf der Seite bin, bin ich mir dabei (meist) auch relativ sicher, dass ich nicht wieder zurück muss, es kommt ja auch nicht oft vor, aber es kommt vor.

            Und wenn ich so auf die ältere Generation im meinem Umfeld blicke, seh ich da teilweise recht wenig Erfahrung, was das Bedienen von Browsern angeht und Tabs werfen jene dann komplett aus dem Konzept.

            Das ist nicht unbedingt eine Altersfrage. Gewohnheiten, die die Handhabung eigentlich unnötig verkomplizieren, ziehen sich von Jung bis Alt quer durch. Ab und zu versuche ich dann, diesen Menschen eine Alternative vorzuschlagen, und manchmal kommt dann eine Reaktion, die irgendwie in das Schema "Ach, wie praktisch!" passt. ;-)

            Deswegen meinte ich ja in meinem Umfeld hier lokal auf dem Dorf, mittem im Sumpf >.< Gerade auch auf Arbeit, wenn dann ein älterer Kollege um Hilfe fragt, weil der Drucker nicht druckt, man hin geht, den Stromstecker in die Steckdose steckt, den Drucker anschaltet und dann den Druckauftrag nochmal los schickt. Und das alle zwei bis drei Wochen mal wieder. (Sicher ist ein extremes Beispiel, aber meiner Meinung nach ist die Wahrscheinlichkeit bei der älteren Generation höher, dass eine gewisse "Verzweiflung" beim Bedienen der gängigen Programme besteht, zB. dem Browser, Ausnahmen gibts allerdings wohl auch zu Hauf)

            MfG
            bubble