Avatar billede zac Nybegynder
11. januar 2006 - 02:06 Der er 14 kommentarer og
1 løsning

Form i xhtml transitional: Ikke td mellem <form> og </form>?

Jeg har et par forms, som virker upåklageligt, men vil gerne have (php)koden xhtml1 transitional valideret.

Den kan ikke li' fx:

echo "<tr>\n";
echo "<form action='artikel_vis.php?kapId=1&amp;artId=4' method='post'>\n";
echo "<input type='hidden' name='action' value='go' />\n";
echo "<td>Fornavn: </td>\n"
echo "<td>"\n";
echo "<input type='text' name='fornavn' size='33' />\n";
echo "</td>\n";
echo "<td>Efternavn: </td>\n"
echo "<td>"\n";
echo "<input type='text' name='efternavn' size='33' />\n";
echo "</td>\n";
echo "</tr>\n";
...
echo "<tr>\n";
echo "<td colspan='2'>\n";
echo "<br /><input type='reset' name='Reset' value='Forfra' />\n";
echo "<br /><input type='submit' name='Submit' value='Send' />\n";
echo "</form>\n";                   
echo "</td>\n";
echo "</tr>\n";

Der må tilsyneladende ikke være noget tr og td mellem <form> og </form> - kan det være rigtigt?
Og i givet fald, hvordan laver man så en pæn form?
Avatar billede pidgeot Nybegynder
11. januar 2006 - 04:07 #1
Som jeg umiddelbart kan se det har du to problemer med den kode:

1) Du afslutter dine tags i forkert rækkefølge: <tr><form>(...)</tr>(...)<tr><td></form></td></tr>

2) Du har placeret dit <form>-tag et ugyldigt sted - den skal enten sidde udenom din <table>, eller inde i en <td> (hvor i du jo så kan have en ekstra <table>).

Uden din kode er det nok ikke muligt at rette det hele, men hvis du nu kigger på denne grundlæggende struktur over dit nuværende resultat (med indryk), så kan du måske nemmere se problemet:

<html>
  <head>
    <title>Min formular</title>
  </head>
  <body>
    <table>
      <tr>
        <form>
          (...)
      </tr>
      (...)
      <tr>
        <td>
          </form>
        </td>
      </tr>
    </table>
  </body>
</html>

Du kan gøre det til korrekt XHTML hvis du bruger denne struktur i stedet:

<html>
  <head>
    <title>Min formular</title>
  </head>
  <body>
    <form>
      <table>
        <tr>
          (...)
        </tr>
        (...)
        <tr>
          <td>
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>

eller denne, om nødvendigt:

<html>
  <head>
    <title>Min formular</title>
  </head>
  <body>
    <form>
      <table>
        <tr>
          <td>
            <table>
              <tr>
                (...)
              </tr>
              (...)
              <tr>
                <td>
                </td>
              </tr>
            </table>
          </form>
        </td>
      </tr>
    </table>
  </body>
</html>
Avatar billede roenving Novice
11. januar 2006 - 14:16 #2
>>pidgeot

-- øh, den sidste er vist ikke så god ...
Avatar billede pidgeot Nybegynder
11. januar 2006 - 15:16 #3
Gah - det er det der sker når man laver for meget copy/paste >_<

Det skulle selvfølgelig være:

<html>
  <head>
    <title>Min formular</title>
  </head>
  <body>
    <table>
      <tr>
        <td>
          <form>
            <table>
              <tr>
                (...)
              </tr>
              (...)
              <tr>
                <td>
                </td>
              </tr>
            </table>
          </form>
        </td>
      </tr>
    </table>
  </body>
</html>
Avatar billede zac Nybegynder
11. januar 2006 - 16:04 #4
Du har ret - og det virker, tak!
Har kun prøvet den sidste, med form der omslutter table med formens indhold - er xhtml valid.
Avatar billede zac Nybegynder
11. januar 2006 - 16:08 #5
øh, kom til at svare, det var en kommentar :-)
dine points!

Ved nogen, hvor der står noget om, at det er sådan, dvs. at formens tags skal omslutte tabellen eller være inde i td (fx ved at lade form igen omslutte tabel)?
Avatar billede roenving Novice
11. januar 2006 - 16:13 #6
Prøv f.eks. at gå ind i dtd'en, der står hvilke elementer, der må forekomme inde i ethvert element !-)
Avatar billede pidgeot Nybegynder
11. januar 2006 - 16:26 #7
Lige præcist - DTD'en er en yderst værdifuld resource til den slags, når man lige har lært at læse den - hvilket i øvrigt ikke er ret svært.
Avatar billede zac Nybegynder
11. januar 2006 - 18:56 #8
Ca. trekvart nede af denne her side: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd står der om forms..

Men der står ikke noget om tables her under forms - eller om forms under tables!

Er det slet ikke i nævnte link, der står (mest? "officielt"?) om DTD?

Eller: Når der ikke står noget, og altså heller noget om, at det ene element (form) må forekomme i det andet (table) eller omvendt, betyder det så, at de ikke må forekomme eller må forekomme frit? Ingen af delene er tilfældet!?
Avatar billede roenving Novice
11. januar 2006 - 19:05 #9
Jeps, der står: <!ELEMENT form %form.content;>

-- med %-tegnet foran form.content er det en variabel, som er defineret ca. 1/3 nede af siden:

<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*">

-- tilsvarende kan du så finde %block, %inline of %misc defineret:

<!ENTITY % block "p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table">

-- og deri:
<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
<!ENTITY % lists "ul | ol | dl | menu | dir">
<!ENTITY % blocktext "pre | hr | blockquote | address | center | noframes">


-- osv. !-)
Avatar billede zac Nybegynder
13. januar 2006 - 00:39 #10
S¨å forstår jeg det! I hvert fald lidt bedre :-)
Og det er så efter, hvad du skrev lidt tidligere en udtømmende liste?!

Men lidt svært at læse...
Elementet table - <!ELEMENT table ... uden % - er således ikke en variabel (rigtigt forstået?) og har (derfor?) ingen udtømmende angivelse af, hvad den må indeholde?

Er der ikke et eller andet klogt hoved, som har lavet en mere visuel oversigt over disse indbyrdes sammenhænge?

Tak for udlægningen af teksten, kan godt se, jeg skal se nærmere på DTD.
Avatar billede roenving Novice
13. januar 2006 - 15:41 #11
Når definitionen af et element skrives, bruges <!ELEMENT>-tagget:

<!ELEMENT table
    (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>

-- og i ovenstående er indholdet af parantesen en udtømmende liste, som oversat betyder:

En tabel må indeholde et caption-element, 0 eller flere af enten col- eller colgroup-elementer, evt. et thead- og/eller et tfoot-element og _skal_ indeholde en eller flere tbody- eller tr-elementer !o]

-- det kan så tilføjes, at browsere (dem, jeg har nærstuderet på området !-) selv indsætter et tbody-element rundt om alle tr-elementer, hvis det ikke findes i html-kden ...

-- hvilket kan være rasende irriterende, hvis man skal skrive noget dom-kode til at fjerne eller indsætte elementer, hvis ikke browseren selv kompenserer ...
Avatar billede zac Nybegynder
13. januar 2006 - 22:00 #12
Så det er således (+?):
det, der angives mellem kommaerne: "må"
+ efter tbody og tr: angiver "skal" (her pga. | mindst en af dem)
*: en af mulighederne
Avatar billede roenving Novice
13. januar 2006 - 23:31 #13
? betyder det samme som i en regexp, altså nul eller een
* ditto, altså 0 eller flere
+ 1 eller flere !-)
Avatar billede zac Nybegynder
14. januar 2006 - 20:37 #14
regexp var det forløsende ord, det har jeg en fornemmelse af - synes bare, det er mærkeligt, at http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ikke selv giver et vink om, hvad det er for tegn man bruger...
Avatar billede roenving Novice
15. januar 2006 - 04:19 #15
dtd-filen er jo ikke den, der selv definerer standarderne for skrivning af sig selv, men er man nogenlunde bekendt med web-teknologierne er der en rimelig chance for at forstå den ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester