Jörg: Submit-Button in Tabellenzeile, wie macht man das valide?

Hallo,

ich habe eine Tabelle, die aus mysql Artikel mit Artikelnummer, Bezeichnung, Ek und VK auflistet.

Nun möchte ich, da diese Tabelle sehr viele Einträge hat, je Zeile einen Submitbutton machen und die o.g. vier Tabellenfelder in eigene Spalten verfrachten.

Wie mache ich das vom System her html-valide?

<table>
<tr>
<form>
<td>
<input type=text ...>
</td>
</tr>
</table>

Das war nun nicht valide!

Aber wie gehts valide?

Ciao, Jörg

  1. <table>
    <tr>
    <form>
    <td>
    <input type=text ...>
    </td>
    </tr>
    </table>

    Was sagt denn der Validator?

    Richtig: er sagt, dass form-Elemente in td-Elementen nicht vorkommen dürfen. tr-Elemente dürfen nur td- oder th-Elemente enthalten.

    1. Hallo,

      Was sagt denn der Validator?
      Richtig: er sagt, dass form-Elemente in td-Elementen nicht vorkommen dürfen.

      doch, dürfen sie wohl. Aber nicht direkt in tr-Elementen. ;-)

      Ciao,
       Martin

      --
      Computer funktionieren grundsätzlich nicht richtig.
      Wenn doch, hast du etwas falsch gemacht.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. ich habe eine Tabelle, die aus mysql Artikel mit Artikelnummer, Bezeichnung, Ek und VK auflistet.

    Nun möchte ich, da diese Tabelle sehr viele Einträge hat, je Zeile einen Submitbutton machen und die o.g. vier Tabellenfelder in eigene Spalten verfrachten.

    Wie mache ich das vom System her html-valide?

    Verzichte auf eine Tabelle.
    Verwende pro abzusendende Einheit ein form Element mit CSS display:table.
    Ein ul Element für display:table-row
    Verwende display:table-cell für die inneren li-Elemente.
    Formatiere die Zellbreiten via CSS.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Hallo Beat,

      ich habe eine Tabelle, die aus mysql Artikel mit Artikelnummer, Bezeichnung, Ek und VK auflistet.

      Nun möchte ich, da diese Tabelle sehr viele Einträge hat, je Zeile einen Submitbutton machen und die o.g. vier Tabellenfelder in eigene Spalten verfrachten.

      Verzichte auf eine Tabelle.

      warum sollte man bei tabellarischen Daten auf eine Tabelle verzichen? Ich halte in diesem Fall die Verwendung irgendeines anderen Elementes als einer Tabelle für einen schweren Fehler.

      Die einfache, sinnvolle und richtige Lösung dieses Problems hat Martin aufgezeigt.

      Freundliche Grüße

      Vinzenz

      1. Die einfache, sinnvolle und richtige Lösung dieses Problems hat Martin aufgezeigt.

        Welche? Einfach Pro Formular ein table Element zu erzeugen kann nicht der Sinn und Zweck sein, und alle Daten im gleichen Form-Element dem submit zu übergeben, ist auch nicht erwünscht.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
  3. Hi,

    <table>
    <tr>
    <form>
    <td>
    <input type=text ...>
    </td>
    </tr>
    </table>

    Das war nun nicht valide!

    nach welchem DOCTYPE hast du geprüft?
    XHTML? Dann ist sowohl das nicht geschlossene input-Element ein Fehler, als auch das Attribut, das nicht in Anführungszeichen steht.
    HTML? Dann ist das input-Element richtig notiert, und für die fehlenden Anführungszeichen dürftest du nur einen missbilligenden Blick kassieren (So etwa: "Na, schön ist das aber nicht!").

    Falsch ist aber in beiden Fällen, form als Kindelement von tr zu notieren, zumal das schließende Tag komplett fehlt. Das Formular muss entweder komplett innerhalb eines td stehen - das ist bei dir von der vorgegebenen Struktur her nicht möglich - oder die Tabelle vollständig umschließen.

    So long,
     Martin

    --
    Ich bin im Prüfungsstress, ich darf Scheiße sagen.
      (Hopsel)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Falsch ist aber in beiden Fällen, form als Kindelement von tr zu notieren, zumal das schließende Tag komplett fehlt. Das Formular muss entweder komplett innerhalb eines td stehen - das ist bei dir von der vorgegebenen Struktur her nicht möglich - oder die Tabelle vollständig umschließen.

      Hi Martin,

      erstmal vielen Dank für den Tip.

      Leider klappts noch nicht ganz. Das Formular wird anscheinend nicht abgesendet.

      Meine Struktur:

      <form>
      <table>
      <thead>
      </thead>
      <tbody>
      <tr>
      <td>
      <INPUT TYPE=HIDDEN ...>
      <INPUT TYPE=TEXT...>
      </td>
      </tr>
      </tbody>
      </table>
      </FORM>

      Ist da noch was falsch?

      Gruß, Jörg

      1. Leider klappts noch nicht ganz. Das Formular wird anscheinend nicht abgesendet.

        Nein, es wird abgesendet.

        Aber:

        Es wird nicht upgedatet.

        Zuvor hat das funktioniert. Da hatte ich von <form> bis </form> alles in einer Tabellenzelle <td></td>.

        Hast Du da noch einen Rat?

        Gruß, Jörg

        1. Hallo,

          Leider klappts noch nicht ganz. Das Formular wird anscheinend nicht abgesendet.
          Nein, es wird abgesendet.
          Aber:
          Es wird nicht upgedatet.

          ich verstehe deine Worte, aber nicht ihren Sinn.
          Mit anderen Worten: Häh?

          Zuvor hat das funktioniert. Da hatte ich von <form> bis </form> alles in einer Tabellenzelle <td></td>.

          Ein form-Element komplett in nur einer Tabellenzelle wäre ja auch valide. Das ist aber nicht das, was du in deinem Startposting vorgestellt hast.

          So long,
           Martin

          --
          Wieso heißen die Dinger eigentlich Anrufbeantworter? Eigentlich sind es doch nur Anrufanhörer.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. ich verstehe deine Worte, aber nicht ihren Sinn.
            Mit anderen Worten: Häh?

            Hi Martin,

            ich sende Dir mal die HTML-Ausgabe.

            Das Ergebnis ist jedenfalls, dass im $_POST Array immer nur der letzte aufgeführte Artikel der Tabelle steht, nicht aber der, dessen Absendebutton ich geklickt hatte.

              
            <FORM ACTION="?aktion=update" METHOD=POST>  
            <TABLE id="table_1" width=90% BORDER=0 CELLPADDING=2 cellspacing=1>  
            <thead>  
            <TR>  
              
            	<TD class="head"><B>Anzahl:</B></TD>  
            	<TD class="head"><B>Art.-Nummer:</B></TD>  
            	<TD class="head"><B>Art.-Bezeichnung:</B></TD>  
            	<TD class="head"><B>Ändern</B></TD>  
              
            </TR>  
            </thead>  
            <tbody>  
              
            <tr>  
            	<TD>1.0</TD>  
            	<TD>  
            	<INPUT TYPE=HIDDEN NAME=artikel_id VALUE="1892">  
            	<INPUT class='wareneingang' TYPE=TEXT Name="artikel_nr" SIZE=10 MAXLENGTH=30 VALUE="108052">  
            	</TD>  
            	<TD>  
            	<INPUT class='wareneingang' TYPE=TEXT Name="artikel_bez" SIZE=20 MAXLENGTH=50 VALUE="Thermostat">  
            	</TD>  
            	<TD>  
            	<div id='load'>Datentransfer</div><INPUT TYPE=SUBMIT ID='sende_button' VALUE="Ändern">  
            	</TD>  
            </TR>  
              
            <tr  BGCOLOR="#D2D2D7">  
              
            	<TD>10.0</TD>  
            	<TD>  
            	<INPUT TYPE=HIDDEN NAME=artikel_id VALUE="1917">  
            	<INPUT class='wareneingang' TYPE=TEXT Name="artikel_nr" SIZE=10 MAXLENGTH=30 VALUE="123456">  
              
            	</TD>  
            	<TD>  
            	<INPUT class='wareneingang' TYPE=TEXT Name="artikel_bez" SIZE=20 MAXLENGTH=50 VALUE="Testartikel123">  
            	</TD>  
            	<TD>  
            	<div id='load'>Datentransfer</div><INPUT TYPE=SUBMIT ID='sende_button' VALUE="Ändern">  
            	</TD>  
            </TR>  
              
            <tr>  
            	<TD>1.0</TD>  
            	<TD>  
            	<INPUT TYPE=HIDDEN NAME=artikel_id VALUE="1919">  
            	<INPUT class='wareneingang' TYPE=TEXT Name="artikel_nr" SIZE=10 MAXLENGTH=30 VALUE="0130027as">  
            	</TD>  
            	<TD>  
            	<INPUT class='wareneingang' TYPE=TEXT Name="artikel_bez" SIZE=20 MAXLENGTH=50 VALUE="Niveauschalteras">  
            	</TD>  
            	<TD>  
            	<div id='load'>Datentransfer</div><INPUT TYPE=SUBMIT ID='sende_button' VALUE="Ändern">  
            	</TD>  
            </TR>  
            <tr><td></td></tr></tbody></table></FORM>  
              
            
            

            Grüße, Jörg

            1. Moin,

              ich sende Dir mal die HTML-Ausgabe.

              dazu habe ich eine Bitte - für die Zukunft: Halte dich doch bitte an die allgemein übliche Konvention, dass HTML-Tags und Attribute klein geschrieben werden. Das macht den Code viel angenehmer lesbar.
              Außerdem möchtest du bitte, bitte konsequent Attributwerte in Anführungszeichen setzen.

              Beides ist übrigens in HTML "nur" eine gute Konvention, in XHTML dagegen sogar Pflicht.

              Das Ergebnis ist jedenfalls, dass im $_POST Array immer nur der letzte aufgeführte Artikel der Tabelle steht, nicht aber der, dessen Absendebutton ich geklickt hatte.

              Das kann auch gar nicht anders sein, wenn die Felder alle gleich heißen. Wenn du die Struktur mit der Tabelle beibehalten willst (sie scheint mir im Grunde vernünftig), fällt mir auf die Schnelle nur eine Lösung ein: Numeriere die Felder zeilenweise durch. Dann kann das PHP-Script abfragen, welcher Submit-Button gedrückt wurde, und dann die zugehörigen Artikeldaten berücksichtigen, und alle anderen ignorieren. - Warum haben deine Submit-Buttons eigentlich kein name-Attribut? Ohne das werden sie sowieso nicht übermittelt.

              <div id='load'>Datentransfer</div><INPUT TYPE=SUBMIT ID='sende_button' VALUE="Ändern">
              <div id='load'>Datentransfer</div><INPUT TYPE=SUBMIT ID='sende_button' VALUE="Ändern">
              <div id='load'>Datentransfer</div><INPUT TYPE=SUBMIT ID='sende_button' VALUE="Ändern">

              Das geht natürlich auch nicht: Eine ID kann nur einmal im Dokument vorkommen. Außerdem bezweifle ich, dass diese div-Elemente notwendig sind - und wenn, ob sie nicht einen sinnvolleren Elementtyp verdient hätten als ein div.

              So long,
               Martin

              --
              Idealismus wächst mit der Entfernung zum Problem.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Hi Martin,

                hab gerade nur ganz wenig Zeit, möchte aber auf jeden Fall schnell "Danke" sagen.

                Ich hab das so gemacht, wie vorgeschlagen. Sendebutton und alle Felder als Arrays übergeben.

                Key des Sendebutton ausgelesen und somit wußte ich, welcher Artikel upgedatet wird.

                Klappt einwandfrei und ist valide.

                Danke für Deine (und die der anderen) gute Hilfe.

                Gruß, Jörg

            2. Hi,

              <FORM ACTION="?aktion=update" METHOD=POST>

              Zur Großschreibung hat Martin sich ja schon geäußert ...

              <TABLE id="table_1" width=90% BORDER=0 CELLPADDING=2 cellspacing=1>

              Die ganzen, das Aussehen betreffenden Attribute gehören ins CSS ...

              <thead>
              <TR>

              <TD class="head"><B>Anzahl:</B></TD>
              <TD class="head"><B>Art.-Nummer:</B></TD>
              <TD class="head"><B>Art.-Bezeichnung:</B></TD>
              <TD class="head"><B>Ändern</B></TD>

              Die Klasse ist überflüssig. Daß es sich um head-Zellen handelt, ergibt sich schon daraus, daß sie im thead stehen.
              (könnten/sollten aber evtl. th sein statt td)

              <div id='load'>Datentransfer</div><INPUT TYPE=SUBMIT ID='sende_button' VALUE="Ändern">
              <div id='load'>Datentransfer</div><INPUT TYPE=SUBMIT ID='sende_button' VALUE="Ändern">
              <div id='load'>Datentransfer</div><INPUT TYPE=SUBMIT ID='sende_button' VALUE="Ändern">

              1. Du verwendest dieselbe id mehrfach, das ist nicht erlaubt.
              2. Deine Submit-Buttons haben alle dasselbe name-value-Pärchen. Damit kann serverseitig nicht mehr erkannt werden, welcher gedrückt wurde ...

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              O o ostern ...
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  4. hi,

    Nun möchte ich, da diese Tabelle sehr viele Einträge hat, je Zeile einen Submitbutton machen und die o.g. vier Tabellenfelder in eigene Spalten verfrachten.

    Verstehe ich nicht. Ich denke eher, Du suchst eine Möglichkeit zum 'Blättern'. Falls mysql, geht das prima mit der Limit-Klause. Das Menu zum Blättern ist dann eine Liste, die neben der Tabelle platziert werden kann.

    Hotti

    1. hi,

      Nun möchte ich, da diese Tabelle sehr viele Einträge hat, je Zeile einen Submitbutton machen und die o.g. vier Tabellenfelder in eigene Spalten verfrachten.

      Verstehe ich nicht. Ich denke eher, Du suchst eine Möglichkeit zum 'Blättern'. Falls mysql, geht das prima mit der Limit-Klause. Das Menu zum Blättern ist dann eine Liste, die neben der Tabelle platziert werden kann.

      Hi Hotti,

      wie meinen? :-))

      Nein, wenn ich das gewollt haben würde, hätte ichs doch auch geschrieben, oder? ;-)

      Also, es geht mir nur ums valide HTML bzgl. der ganzen Tags, die da vorhanden sind.

      Trotzdem war Dein Post ganz günstig, weil ich ans Blättern noch gar nicht dachte, es aber tun sollte :-)

      Schönen Dank, und ebensolchen Abend

      Jörg

      1. hi Jörg,

        Also, es geht mir nur ums valide HTML bzgl. der ganzen Tags, die da vorhanden sind.

        Ja, valide musses schon sein; wird aber nichts mit Buttons in Tabellen. Die hatte ich früher auch ;)
        Vielleicht tuts aber auch ein Link statt Button?

        Viele Grüße,
        Hotti