According to MDN XForms has long been obsolete.
» XForms definieren eine Variation traditioneller Webformulare, welche den Einsatz auf einer größeren Anzahl von Plattformen und Browsern oder sogar in untraditionellen Medien wie PDF Dokumenten erlauben.
Der erste große Unterschied von XForms besteht darin, wie das Formular zum Client gesendet wird. » XForms for HTML Authors enthält eine detaillierte Beschreibung davon, wie man XForms erzeugt. Für den Zweck dieser Einführung beschränken wir uns auf ein einfaches Beispiel.
Beispiel #1 Ein einfaches XForms-Suchformular
<h:html xmlns:h="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/2002/xforms"> <h:head> <h:title>Suche</h:title> <model> <submission action="http://example.com/search" method="post" xml:id="s"/> </model> </h:head> <h:body> <h:p> <input ref="q"><label>Finde</label></input> <submit submission="s"><label>Suche</label></submit> </h:p> </h:body> </h:html>
Das oben angegebene Formular zeigt ein Texteingabefeld (genannt
q
), sowie einen Absendeknopf. Wenn der Absendeknopf
geklickt wird, wird das Formular an die unter action
angegebene Seite gesendet.
Hier beginnt es aus der Sicht der Webapplikation anders auszusehen. In
einem normalen HTML Formular würden die Daten
application/x-www-form-urlencoded
gesendet, in der Welt
von XForms werden diese Informationen als XML
formatierte Daten gesendet.
Wenn Sie sich für die Arbeit mit XForms entscheiden, dann wollen Sie die Daten wahrscheinlich als XML; in diesem Fall schauen Sie in $HTTP_RAW_POST_DATA, wo Sie das vom Browser erzeugte XML XML-Dokument finden werden, das Sie an Ihre bevorzugte XSLT-Engine oder Dokumentenparser weiterreichen können.
Wenn Sie nicht an der Formatierung interessiert sind und Ihre Daten in die
traditionelle $_POST Variable geladen haben möchten, können
Sie den Browser anweisen, die Daten als
application/x-www-form-urlencoded
zu senden, indem Sie das
method
Attribut auf urlencoded-post
abändern.
Beispiel #2 XForm verwenden, um $_POST zu bestücken
<h:html xmlns:h="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/2002/xforms"> <h:head> <h:title>Suche</h:title> <model> <submission action="http://example.com/search" method="urlencoded-post" xml:id="s"/> </model> </h:head> <h:body> <h:p> <input ref="q"><label>Finde</label></input> <submit submission="s"><label>Suche</label></submit> </h:p> </h:body> </h:html>
Hinweis: Zum Zeitpunkt des Schreibens beherrschen viele Browser XForms nicht. Prüfen Sie Ihre Browserversion, wenn obiges Beispiel scheitert.
Since HTTP_RAW_POST_DATA requires a configuration to be generated and is not enabled as a default value, you will probably have to use the PHP STDIN stream to get the raw data. It's probably better to use this method as the raw data will not be generated every time, even when not needed.
<?php
$fp = fopen( "php://stdin", "r" );
$data = '';
while( !feof( $fp ) )
$data .= fgets( $fp );
fclose( $fp );
?>
FireFox has an XForms plugin that works with the latest nightly builds. Check out http://www.mozilla.org/projects/xforms/ for more info. For IE support, there's an ActiveX control from Novell (http://developer.novell.com/xforms/) and one from x-port.net (http://www.formsplayer.com/).
There's also a JavaScript-based one coming out called FormFaces which looks very promising, especially since there are no plugins required and it works in IE, FF, and Opera: http://www.formfaces.com/
"php://stdin" doesn't exist in my PHP version. I use the following code block instead :
<?php
if (!isset($HTTP_RAW_POST_DATA))
$HTTP_RAW_POST_DATA = file_get_contents("php://input");
?>