Manejo de XForms

» XForms define una variante de los formularios web tradicionales que permite emplearla en una gran variedad de plataformas y navegadores o incluso en medios no tradicionales como los documentos PDF.

La primera diferencia principal en XForms es la forma de enviar el formulario al cliente. » XForms for HTML Authors contiene una descripción detallada de cómo crear XForms; para el propósito de este tutorial únicamente veremos un ejemplo simple.

Ejemplo #1 Un formulario simple de búsqueda con XForms

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Búsqueda</h:title>
 <model>
  <submission action="http://example.com/search"
              method="post" id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Buscar</label></input>
  <submit submission="s"><label>Ir</label></submit>
 </h:p>
</h:body>
</h:html>

El formulario anterior muestra una caja de entrada de texto (llamada q), y un botón de envío. Al presionar este botón, el formulario se envía a la página indicada por action.

Aquí es donde comienzan a verse las diferencias desde el punto de vista de la aplicación web. En un formulario normal de HTML, los datos serían enviados como application/x-www-form-urlencoded; en el mundo de XForms, esta información es enviada como datos formateados en XML.

Si se elige trabajar con XForms, sería conveniente que los datos se obtuvieran como XML. En tal caso, se puede examinar $HTTP_RAW_POST_DATA para encontrar el documento XML generado por el navegador, el cual se puede pasar al motor de XSLT o al analizador de documentos favorito.

Si no se está interesado en formatear los datos y solo se desea que se carguen en la variable $_POST tradicional, se puede instruir al navegador del cliente para enviarlos como application/x-www-form-urlencoded cambiando el atributo method a urlencoded-post.

Ejemplo #2 Empleo de un Xform para rellenar $_POST

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Búsqueda</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>Buscar</label></input>
  <submit submission="s"><label>Ir</label></submit>
 </h:p>
</h:body>
</h:html>

Nota: En el momento de escribir esto, muchos navegadores no admiten XForms. Compruebe la versión de su navegador si los ejemplos anteriores fallan.

add a note

User Contributed Notes 4 notes

up
24
contact at jimmajammalulu dot com
3 years ago
According to MDN XForms has long been obsolete.
up
24
lphuberdeau at phpquebec dot org
19 years ago
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 );
?>
up
8
OrionI
19 years ago
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/
up
-18
Darkener Daemon EX
18 years ago
"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");
?>
To Top