Pit: Form in Form / Nested Forms

Hallo,

ich habe eine Funktion mit einem eigenen Submit-Button, die ich an einigen Stellen einsetze. Nun ist es an genau einer Stelle aber so, dass das Einsetzen dieser Funktion zu einer Form in Form Kostellation kommt.

Das ist nicht nur nicht valide, es funktioniert auch der zur äußeren Form gehörige Absendebutton nicht mehr. Der zur inneren Form gehörige Button verrichtet klaglos sein Arbeit.

Nun überlege ich mir, wie ich es anstellen soll, diese Form in Form Kostellation "aufzulösen".

Das innere Formular wird mitsamt Button geliefert und dadurch, dass es an einigen Stellen verwendet wird, kennt es der User auch so und ich würde es gerne unverändert lassen. Dieses Formular wird per php "hidden" mitgeladen und per JS ggf. sichtbar gemacht.

Das äußere Formular wird für den Rest der Usereingaben genutzt, auch hier kennt der User den am Ende des Formulars befindlichen Submit-Button.

Wäre es valide und würde funktionieren, würde ich den äußeren Submit-Button wahlweise per JS ausblenden und gut wärs.

Aber erstens funktioniert es nicht, zweitens ist es nicht valide.

Wie kann ich alternativ vorgehen, um trotzdem diesen gewünschten Effekt zu erzielen?

Pit

  1. Hello,

    wandele dein "Form in Form" durch serverseitige Verwaltung in einen Pagestack um.

    Da kann dann zwar jede Seite noch beliebig viele parallele Forms enthalten, aber wenn die hierarchich abhängig sind (-> Expertensystem) dann baue die besser in einen Pagestack ein, der serverseitig geführt wird. Durch eine Breadcrumb-Navigation kannst Du immer den Rückweg zu einer höhere Ebene anbieten. Dort kannst Du dann entscheiden, ob die Unterebene wieder mit den letzten Werten erscheinen soll (Pfad bis zur tiefsten Schicht wurde gespeichert) oder mit Defaults erscheint.

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
  2. Einfache Antwort:

    Nur ein großes Forularfeld. Unterscheide je nach betätigtem Submit-Button welche Daten dann auf dem Server ausgewertet werden.

  3. Wie kann ich alternativ vorgehen, um trotzdem diesen gewünschten Effekt zu erzielen?

    Welchen Effekt würdest Du denn als Anwender erwarten?

    MfG

  4. Lieber Pit,

    Form in Form Kostellation

    wusstest Du schon, dass ein <button> ein name-Attribut haben kann, und dass das serverseitig ausgewertet werden kann?

    <form method="post">
      <label>Quark: <input name="quark"></label>
      <button name="new">anlegen</button>
      <button name="del">löschen</button>
    </form>
    

    Beide Buttons werden das Formular absenden, können aber auf der Serverseite unterschieden werden.

    Ich bin mir sicher, dass Du Deine beiden Formulare nun in ein gemeinsames überführen kannst, um anhand des jeweiligen Buttons unterschiedliche Aktionen auszuführen.

    Liebe Grüße,

    Felix Riesterer.

    1. @Felix Riesterer

      Form in Form Kostellation

      wusstest Du schon, dass ein <button> ein name-Attribut haben kann, und dass das serverseitig ausgewertet werden kann?

      <form method="post">
        <label>Quark: <input name="quark"></label>
        <button name="new">anlegen</button>
        <button name="del">löschen</button>
      </form>
      

      Beide Buttons werden das Formular absenden, können aber auf der Serverseite unterschieden werden.

      Das aber nur wenn sie außer einem namen auch einen value haben. Ansonsten werden sie gar nicht erst gesendet! Zumindest nicht wenn das Form mit jquery serialisiert wird.

      MfG

      1. Tach!

        Beide Buttons werden das Formular absenden, können aber auf der Serverseite unterschieden werden.

        Das aber nur wenn sie außer einem namen auch einen value haben. Ansonsten werden sie gar nicht erst gesendet!

        Kann ich nicht nachvollziehen. In meinem Firefox und Chrome werden sie problemlos gesendet, natürlich ohne Wert, was dann serverseitig zu einem Leerstring ausgewertet wird.

        dedlfix.

        1. Hi,

          Buttons sollten immer einen name+value haben wenn sie in serverseitigen Kontrollstrukturen eine Rolle spielen!

          Gerade auch hinsichtlich Debugging!

          MfG

          1. Hallo pl,

            Buttons sollten immer einen name+value haben wenn sie in serverseitigen Kontrollstrukturen eine Rolle spielen!

            Gerade auch hinsichtlich Debugging!

            Warum ist der Name nicht ausreichend?

            Bis demnächst
            Matthias

            --
            Pantoffeltierchen haben keine Hobbys.
            1. Zeig mal Deine serverseitige Kontrollstruktur!

              1. Tach!

                Zeig mal Deine serverseitige Kontrollstruktur!

                Ich weiß nicht, was du darunter verstehst, aber das Abfragen geht sehr einfach mit isset($_GET['new']) für den Fall des new-Buttons des Beispielcodes.

                dedlfix.

                1. Tach!

                  Zeig mal Deine serverseitige Kontrollstruktur!

                  Ich weiß nicht, was du darunter verstehst,

                  if/else ..

                  aber das Abfragen geht sehr einfach mit isset($_GET['new']) für den Fall des new-Buttons des Beispielcodes.

                  Stimmt, in PHP geht das. Ich hatte übersehen, daß es hier nur um PHP geht.

                  MfG

                  1. Tach!

                    Zeig mal Deine serverseitige Kontrollstruktur!

                    Ich weiß nicht, was du darunter verstehst,

                    if/else ..

                    aber das Abfragen geht sehr einfach mit isset($_GET['new']) für den Fall des new-Buttons des Beispielcodes.

                    Stimmt, in PHP geht das. Ich hatte übersehen, daß es hier nur um PHP geht.

                    Da ich grad einen Parser für c entwickle: Der bekommt gleich mehrere Funktionen:

                    1. readParam() => parst den Request und gibt die Anzahl der Parameter zurück
                    2. ifParam(name) => prüft ob ein bestimmter Parameter im Request ist
                    3. valParam(name) => liefert den Wert zum Parameter

                    Die 4. Funktion wird das Array liefern, falls der Parameter mehrere Werte mitbringt.

                    Komfortabler gehts kaum 😉

                2. Lieber dedlfix,

                  isset($_GET['new'])

                  oder array_key_exists('new', $_GET).

                  Liebe Grüße,

                  Felix Riesterer.