Zufällig bin ich im XHTML-Forum über etwas gestolpert, das die Mail-Seiten von oesterchat.com endlich XHTML1.0-valide macht!

Das Problem ist bei den Mail-Formularen nämlich, dass Sessions benutzt werden und diese Sessions werden im Formular (genauer: im FORM-Element) mit einem INPUT-Element hinterlegt. Das sieht dann so aus:

<input type="hidden" name="PHPSESSID" value="12ab2345cd78901ef2gh34ij5ke6l78mn" />

Das INPUT-Element ist aber leider ein Inline-Element, das heißt, es muss innerhalb eines Block-Elements stehen (P, FIELDSET, …). Da das INPUT-Element mit der Session-ID automatisch eingefügt wird, ohne dass man das kontrollieren kann, steht es in nicht XHTML valider Weise genau hinter dem einleitenden <form>-Tag und noch vor dem <fieldset>-Tag anstatt dahinter.

<form action="formmail.cgi" method="post" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="PHPSESSID" value="12ab2345cd78901ef2gh34ij5ke6l78mn" />
<fieldset>
<!-- Formularfelder -->

Durch folgenden Eintrag in die Datei knapp vor dem Formular, wird das INPUT-Element nicht mehr hinter das <form>-Tag, sondern richtigerweise hinter das <fieldset>-Tag gesetzt:

/* Damit das INPUT-Element mit der Session-ID nicht hinter FORM, sondern hinter FIELDSET steht und valider XHTML-Quellcode möglich wird:

url_rewriter.tags bestimmt, wenn Unterstützung für transparente SID aktiviert ist, welche HTML-Tags so umgeschrieben werden, dass sie die Session-ID beinhalten.
Grundeinstellung a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=

Anmerkung: Wenn Sie XHTML-konform sein wollen, müssen Sie den form-Eintrag entfernen und Ihre Formularfelder zwischen <fieldset>-Tags setzen. 

Quelle: http://www.php-center.de/de-html-manual/ref.session.html */

ini_set("url_rewriter.tags","a=href,area=href,frame=src,input=src,fieldset=");

Das sieht dann folgendermaßen aus:

<form action="formmail.cgi" method="post" enctype="application/x-www-form-urlencoded">
<fieldset>
<input type="hidden" name="PHPSESSID" value="12ab2345cd78901ef2gh34ij5ke6l78mn" />
<!-- Formularfelder -->

Wundervoll! :-)

4 Kommentare

  • 1. Wie bekomme ich ein Formu&hellip schrieb am 5th Juli 2007 um 12:17 :

    […] Wie bekomme ich ein Formular XHTML-strict konform? Hallo zusammen Wie mir vorhin auffiel scheint das doch ein recht kniffliges Problem zu sein und ich hoffe jemand hier weiß Rat. Ein XHTML-strict konformes Formular zu erstellen ist kein Problem – solange man nicht mit einer Session arbeiten muß. Was passiert ist nämlich, daß PHP automatisch ein hidden-Field zwischen die Form-Tags setzt um die SID zu transportieren. Dummerweise macht PHP das genau zwischen dem Form-Tag und dem Fieldset-Tag, wodurch das Formular bei der Validierung durchfällt. Ich hab‘ mir schon einen abgegoogelt (<- neue Wortkreation ) und dabei festgestellt, daß dieses Problem durchgängig zurück verfolgt werden kann bis Anno Tobak. Eine funktionierende Lösung gefunden habe ich allerdings nicht Der einzige Link den ich gefunden habe der das Problem etwas anschaulicher beschreibt, und eine vermeintliche Lösung anbietet, findet man hier. Allerdings bringt bei mir das dort als Lösung angegebene ini_set rein gar nichts. Das kann doch nicht sein das man kein XHTML-strict Formular valide hinbekommt, wenn man mit Sessions arbeitet. Sooo selten ist das nun auch wieder nicht, oder?! __________________ Gruß Andreas ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Errare Humanum Est […]

  • 2. Lutz-Ulrich Ringel schrieb am 30th Juli 2007 um 09:39 :

    Danke für diesen Tip.

    Ist wirklich wundervoll

  • 3. Markus schrieb am 1st September 2008 um 23:03 :

    Juchu, Danke

  • 4. Bibendum schrieb am 9th Dezember 2008 um 21:00 :

    Wieder so ein Fehler über den man zwangläüfig stolpert wenn man saubere Arbeit machen will. *LOL*

    Und Gott sein Dank bin ich hier gelandet
    (man findet ja sonst selten gleich die Lösung)
    *freu*

    Gruss Bibendum

Hinterlasse einen Kommentar

XHTML: Du kannst folgende Tags nutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <em> <strong>