According to MDN XForms has long been obsolete.
» XForms являются альтернативой традиционным веб-формам, и позволяют использовать их на множестве платформ и браузеров, а также реализовывать нестандартные представления форм, например, в виде PDF-документа.
Первое существенное отличие XForms заключается в том, как форма отсылается клиенту. Руководство » XForms for HTML Authors содержит детальное описание создания XForms. Для того, чтобы очертить основную идею руководства, приведём несколько простых примеров.
Пример #1 Простая поисковая форма XForms
<h:html xmlns:h="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/2002/xforms"> <h:head> <h:title>Поиск</h:title> <model> <submission action="http://example.com/search" method="post" id="s"/> </model> </h:head> <h:body> <h:p> <input ref="q"><label>Что искать?</label></input> <submit submission="s"><label>Найти</label></submit> </h:p> </h:body> </h:html>
Приведённая выше форма отображает текстовое поле для ввода
(названное q
) и кнопку для отправки формы,
при нажатии на которую все введённые данные будут отправлены
скрипту, указанному в поле action
.
Тут мы подошли к ещё одному существенному различию с точки зрения
вашего веб-приложения. Стандартная HTML-форма отправляет данные
как application/x-www-form-urlencoded
, а XForms
для передачи данных использует разметку XML.
Если вы решили работать с XForms, скорее всего вы захотите получить отправленные пользователем данные в формате XML. В таком случае обратите внимание на переменную $HTTP_RAW_POST_DATA, в ней содержится XML-документ, сгенерированный браузером, который в дальнейшем можно обработать предпочитаемым вами движком XSLT или парсером документа.
Если разметка вас не интересует, и вы хотите, чтобы передаваемые
данные были помещены в стандартный массив $_POST,
вы можете указать клиентскому браузеру на необходимость
отправлять данные в формате application/x-www-form-urlencoded
.
Для этого установите атрибут method
значением
urlencoded-post.
Пример #2 Использование XForm совместно с массивом $_POST
<h:html xmlns:h="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/2002/xforms"> <h:head> <h:title>Поиск</h:title> <model> <submission action="http://example.com/search" method="urlencoded-post" id="s"/> </model> </h:head> <h:body> <h:p> <input ref="q"><label>Что искать?</label></input> <submit submission="s"><label>Найти</label></submit> </h:p> </h:body> </h:html>
Замечание: В дополнение к вышесказанному следует заметить, что большое количество браузеров не поддерживают XForms. Если приведённые примеры потерпели неудачу, проверьте версию используемого вами браузера.
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");
?>