According to MDN XForms has long been obsolete.
» XForms define uma mudança com relação a formulários tradicionais que permite que sejam usados em uma variedade mais ampla de plataformas e browsers ou até mesmo em mídias não tradicionais tais como documentos PDF.
A primeira diferença chave nos XForms é como o formulário é enviado ao cliente. » XForms para autores de HTML contém uma descrição detalhada de como criar XForms. Para o propósito deste tutorial nós veremos apenas exemplos simples.
Exemplo #1 Um formulário XForms simples de busca
<h:html xmlns:h="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/2002/xforms"> <h:head> <h:title>Search</h:title> <model> <submission action="http://example.com/search" method="post" id="s"/> </model> </h:head> <h:body> <h:p> <input ref="q"><label>Find</label></input> <submit submission="s"><label>Go</label></submit> </h:p> </h:body> </h:html>
O formulário acima mostra uma caixa de entrada de texto (chamada q
),
e um botão de submit (envio). Quando o botão de submit é clicado, o formulário será
enviado para a página referenciada por action
.
Aqui é onde começa a parecer diferente do ponto de vista da sua aplicação
web. Em um formulário HTML normal, a informação seria enviada como
application/x-www-form-urlencoded
, no mundo dos XForms,
porém, essa informação é enviada no formato XML.
Se você está escolhendo trabalhar com XForms então você, provavelmente, quer aquela informação como XML. Nesse caso, procure em $HTTP_RAW_POST_DATA, onde você achará o documento XML gerado pelo navegador e que você pode passar para o seu engine XSLT ou parser favorito.
Se você não estiver interessado em formatação e só quer que sua informação seja carregada
na variável tradicional $_POST, você pode encarregar o
navegador do cliente para enviar como um application/x-www-form-urlencoded
mudando o atributo method
para
urlencoded-post.
Exemplo #2 Usando um XForm para popular o $_POST
<h:html xmlns:h="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/2002/xforms"> <h:head> <h:title>Search</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>Find</label></input> <submit submission="s"><label>Go</label></submit> </h:p> </h:body> </h:html>
Nota: Até o término dessa edição, muitos navegadores não suportam XForms. Verifique a versão do seu navegador se os exemplos acima falharem.
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");
?>