Stephan: mehrere Formulare auf einer Seite

Hallo zusammen,

ich krieg hier schon den ganzen Morgen die Motten ....

Ich habe ein durch PHP generiertes HTML-Dokument, auf dem sich 1 bis n Formulare (form) befinden. Eine Aufteilung auf mehrere Forms war nötig, da bei zu vielen Datenbankeinträgen die zu übermittelnden Daten beim Submit nicht vom Browser verarbeitet werden konnten (zu Deutsch: nicht alle Formulardaten landen auf der Action-Seite).

Jedes meiner Formulare hat natürlich einen anderen Namen - das action-ziel ist jedoch gleich. Jedes der Formulare hat ein submit-input (aber auch mit Button getestet), mit unterschiedlichen Namen.

Mein Problem: IMMER werden alle Feldwerte ALLER Formulare abgeschickt, nicht nur des Formular, dessen Submit ich geklickt habe. Damit habe ich das selbe Problem, als hätte ich nur eine Form.

Habe es inzwischen mit <button form="form1" type="submit" ...> statt eines input versucht - klappt auch nicht.

Warum schickt der Browser (IE9) alle Feldwerte aller Formulare und wie verhindere ich das ???

P.S. Das Tagging ist einwandfrei, ich hab's geprüft. Jede Form schliesst sauber.

Danke für Eure Hilfe Stephan

  1. Tach,

    Warum schickt der Browser (IE9) alle Feldwerte aller Formulare und wie verhindere ich das ???

    ohne den HTML-Quelltext werden wir den Fehler vermutlich leider nicht finden können.

    mfg
    Woodfighter

    1. Hallo,

      der Originalcode ist much too long, daher mal die entscheidenden Passagen aus PHP und dem generierten HTML - da ist mir nämlich was SEHR Merkwürdiges aufgefallen :

        <?php
        for($i=1;$i<=$reiter;$i++) {
          echo '
          <form name="massen'.$i.'" method="post" action="buchen_view_tabbed.php?"'.$i.'>
            <input type="hidden" name="expand'.$i.'" value="" />
            (usw.)
            <div class="liknotabs_body" style="display: none;">
              <table width=100%>
                <tr style="text-align:left">
                  <th>AufNr.</th><th>BS</th><th>HB</th><th>'.$tabcoltxt.'</th><th>Std.</th><th>Mat. €</th><th>MatText</th><th>erl.</th><th>&#160;</th>
                </tr>
                  '.$td[$i].'
                <tr><td colspan="9">&#160;</td></tr>
                <tr>
                  <td>&#160;</td>
                  <td colspan="8" class="buttonleiste">
                    <input type="submit" name="massensave'.$i.'" value="Speichern">
                    <input type="reset" value="Felder leeren" />
                    <input type="button" value="Abbrechen" onClick="window.location.href=\'index.php\'">
                  </td>
                </tr>
              </table>
            </div>
      
          </form>
          ';
        }
        ?>
      

      Das angehängte "?$i" im action-attribut ist nur zwecks Fehlersuche.

      Folgendes HTML wird generiert (aus nur die wichtigen Passagen) :

          <form name="massen1" method="post" action="buchen_view_tabbed.php?1">
            <input type="hidden" name="expand1" value="" />
            (usw.)
            <div class="liknotabs_body" style="display: none;">
              <table width=100%>
              (Ausgabe der Tabelle spar ich mir)
                <tr>
                  <td>&#160;</td>
                  <td colspan="8" class="buttonleiste">
                    <button form="massen1" type="submit" name="massensave1">Speichern</button>
                    <input type="reset" value="Felder leeren" />
                    <input type="button" value="Abbrechen" onClick="window.location.href='index.php'">
                  </td>
                </tr>
              </table>
            </div>
      
          </form>
          
          <form name="massen2" method="post" action="buchen_view_tabbed.php?2">
           (usw.)
      

      Mir fällt auf, dass das generierte Form-Tag immer korrekt ist, also hinter dem action-attribut immer die korrekte Form-Nummerierung steht. Mouse-Over ich aber den Button (wie gesagt, auch wahlweise ein input-submit) zeigt mir die Statusleiste als Ziel IMMER die Zahl der letzten Tabelle (bei mir 7) und tatsächlich wird grundsätzlich das action-doc ?7 geöffnet ...

      Habe nochmals Tidy-Validate-HTML laufen lassen - der meckert nicht !

      1. Tach!

        Habe nochmals Tidy-Validate-HTML laufen lassen - der meckert nicht !

        Dann schau dir mal an, was der Browser als DOM generiert und ob das wunschgemäß verschachtelt ist. (Irgendwo ein Rechtsklick und „Element untersuchen“ wählen.)

        dedlfix.

        1. Dann schau dir mal an, was der Browser als DOM generiert und ob das wunschgemäß verschachtelt ist. (Irgendwo ein Rechtsklick und „Element untersuchen“ wählen.)

          dedlfix.

          ... und aus meinem Kopf weicht das Blut !!

          Danke für den Tip - tatsächlich sieht das DOM komplett anders aus als der Browsercode. Sämtliche Forms-Felder innerhalb der beiden DIVs wurden aus dem Content gelöst und ans Ende des DOM gesetzt - und landen damit alle auf Form Nr. 7

          OK - Ursache ist also das Script, dass mir meine ach-so-schönen Tabellenreiter generiert. (Sowas passiert, wenn man fremde Scripte nutzt)

          Besten Dank nochmals für den Tip (auf den ich eigentlich auch selber hätte kommen müssen)

          Stephan

      2. Hallo

        Folgendes HTML wird generiert (aus nur die wichtigen Passagen) :

            <form name="massen1" method="post" action="buchen_view_tabbed.php?1">
              <input type="hidden" name="expand1" value="" />
              (usw.)
              <div class="liknotabs_body" style="display: none;">
                <table width=100%>
                (Ausgabe der Tabelle spar ich mir)
                  <tr>
                    <td>&#160;</td>
                    <td colspan="8" class="buttonleiste">
                      <button form="massen1" type="submit" name="massensave1">Speichern</button>
                      <input type="reset" value="Felder leeren" />
                      <input type="button" value="Abbrechen" onClick="window.location.href='index.php'">
                    </td>
                  </tr>
                </table>
              </div>
        
            </form>
            
            <form name="massen2" method="post" action="buchen_view_tabbed.php?2">
             (usw.)
        

        Mir fällt auf, dass das generierte Form-Tag immer korrekt ist, also hinter dem action-attribut immer die korrekte Form-Nummerierung steht. Mouse-Over ich aber den Button (wie gesagt, auch wahlweise ein input-submit) zeigt mir die Statusleiste als Ziel IMMER die Zahl der letzten Tabelle (bei mir 7) und tatsächlich wird grundsätzlich das action-doc ?7 geöffnet ...

        Ich habe nicht ausprobiert, ob dieser Umstand mit deinem Problem zusammenhängt, möchte aber dennoch Folgendes anmerken. Wenn du einem button das Attribut „form“ verpasst, zeigt dies laut der Doku auf die ID des Formulars. Du hast jenen jedoch keine solchen gegeben.

        Tschö, Auge

        --
        Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
        Terry Pratchett, „Gevatter Tod“
        1. Hallo Auge,

          Ich habe nicht ausprobiert, ob dieser Umstand mit deinem Problem zusammenhängt, möchte aber dennoch Folgendes anmerken. Wenn du einem button das Attribut „form“ verpasst, zeigt dies laut der Doku auf die ID des Formulars. Du hast jenen jedoch keine solchen gegeben.

          Zum einen dies und zum anderen lässt sich der Dokumentation ebenfalls entnehmen, dass der IE bis einschließlich Version 11 das form-Attribut nicht unterstützt. Auch Edge kann das nicht.

          Bleibt nur, per JavaScript allen Elementen, die nicht übermittelt werden sollen/brauchen das name-Attribut wegzunehmen.

          Bis demnächst
          Matthias

          --
          Signaturen sind bloed (Steel) und Markdown ist mächtig.
          1. Hallo

            Ich habe nicht ausprobiert, ob dieser Umstand mit deinem Problem zusammenhängt, möchte aber dennoch Folgendes anmerken. Wenn du einem button das Attribut „form“ verpasst, zeigt dies laut der Doku auf die ID des Formulars. Du hast jenen jedoch keine solchen gegeben.

            Zum einen dies und zum anderen lässt sich der Dokumentation ebenfalls entnehmen, dass der IE bis einschließlich Version 11 das form-Attribut nicht unterstützt. Auch Edge kann das nicht.

            … und zum dritten ist das „form“-Attribut dazu da, Formularelemente, die außerhalb eines Formulars notiert sind, mit dem Formular zu verknüpfen. Stephan notiert die Buttons aber innerhalb der Formulare. Die Buttons sollten also auch ohne die Angabe des „form“-Attributs funktionieren.

            Tschö, Auge

            --
            Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
            Terry Pratchett, „Gevatter Tod“
        2. Ich habe nicht ausprobiert, ob dieser Umstand mit deinem Problem zusammenhängt, möchte aber dennoch Folgendes anmerken. Wenn du einem button das Attribut „form“ verpasst, zeigt dies laut der Doku auf die ID des Formulars. Du hast jenen jedoch keine solchen gegeben.

          Tschö, Auge

          Ich benutze "<button form= ..>" aus reiner Verzweiflung - wie beschrieben arbeite ich lieber mit "<input type=...>" - aber das funktionierte ja nicht.

          Fehler inzwischen gefunden. Siehe meine Antwort an dedlfix

          1. Hallo

            Ich habe nicht ausprobiert, ob dieser Umstand mit deinem Problem zusammenhängt, möchte aber dennoch Folgendes anmerken. Wenn du einem button das Attribut „form“ verpasst, zeigt dies laut der Doku auf die ID des Formulars. Du hast jenen jedoch keine solchen gegeben.

            Ich benutze "<button form= ..>" aus reiner Verzweiflung - wie beschrieben arbeite ich lieber mit "<input type=...>" - aber das funktionierte ja nicht.

            Verschiebe deine Präferenzen mal vorsichtig gen button. Beide Lösungen funktionieren, bei Buttons hast du aber den Vorteil, dass sie Inhalt (Text) und HTML-Elemente (z.B. auch img, em oder strong) enthalten können. Der Umstieg lohnt sich – je nach Szenario – durchaus.

            [edit]Den angesprochenen (und unnötigen) Fehler solltest du dennoch beheben.[/edit]

            Fehler inzwischen gefunden. Siehe meine Antwort an dedlfix

            Hab' ich schon gesehen. Frohes debuggen. ;-)

            Tschö, Auge

            --
            Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
            Terry Pratchett, „Gevatter Tod“
          2. @@Stephan

            Ich benutze "<button form= ..>" aus reiner Verzweiflung

            Du solltest nicht verzweifelt sein, <button> zu benutzen, sondern das aus den richtigen Gründen tun: weil button das richtige Element für Buttons ist, nicht input.

            wie beschrieben arbeite ich lieber mit "<input type=...>"

            Es ist an der Zeit, deine Vorlieben zu überdenken und abzuändern.

            LLAP 🖖

            --
            „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)