本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

XForms のヒント: PHP で XForms データを受け付ける

Nicholas Chase (nicholas@nicholaschase.com), President, Chase and Chase, Inc.
Nicholas Chase は、Lucent Technologies や Sun Microsystems、Oracle、the Tampa Bay Buccaneers などの会社で Web 開発に携わってきました。彼は高校の物理の先生であり、低レベル放射性廃棄物施設の管理者であり、オンライン SF 雑誌の編集者であり、マルチメディアのエンジニアであり、Oracle インストラクターであり、あるインタラクティブ・コミュニケーション会社の最高技術責任者でもあります。『XML Primer Plus』(Sams 刊) を含めて、何冊かの著作があります。

概要: XForms フォームは、ある面では HTMLフォームとまったく同じです。適当なエンコーディングを行えば、データを受信するサーバー・サイド・スクリプトは両者の違いをまったく判別できません。しかし色々な意味でのXForms フォームの強力さは、データを直接 XMLとして送信できる点にあります。もちろん、スクリプトがそうしたデータを受信するように準備ができていなければ、この機能は何の役にも立ちません。今回のヒントでは、XFormsフォームで送信される XML データを受信し、処理する PHP スクリプト作成方法について説明します。

日付:  2006年 9月 26日
レベル:  中級 この記事の原文:  英語
アクティビティー: 3129 ビュー
お気軽にご意見・ご感想をお寄せください: 


はじめに: このヒントについて

このヒントは、XForms に関する特定のタスクについてのヒントです。XFroms についての背景となる情報については、3 回シリーズの「XForms 入門」を参照してください。

このヒントで説明する XForms のサンプルは、(XForms エクステンションをインストールした) Firefox 1.5 と、Formsplayer コントロールをインストールした Microsoft® Internet Explorer 6 でテストされ、動作しています。ダウンロードには、Firefox 用の XHTML ファイルと IE 用の HTML ファイルが含まれています。


インスタンス文書

まず、インスタンス文書から始めましょう。作業の対象として、少し深みを持ったインスタンスを作ります (リスト 1)。


リスト 1. インスタンス文書
                
<?xml version="1.0" encoding="UTF-8"?>
<inventory>
   <book>
      <author>Nick Chase</author>
      <title>XML Primer Plus</title>
      <publisher>Sams</publisher>
   </book>
   <book>
      <author>Earth</author>
      <title>David Brin</title>
      <publisher>Spectra</publisher>
   </book>
   <movie>
      <director>Steven Spielberg</director>
      <title>Raiders of the Lost Ark</title>
      <actor>Harrison Ford</actor>
      <actor>Karen Allen</actor>
   </movie>
   <movie>
      <director>Rob Reiner</director>
      <title>The American President</title>
      <actor>Michael Douglas</actor>
      <actor>Annette Bening</actor>
      <actor>Martin Sheen</actor>
   </movie>
</inventory>

このデータを扱うフォームは、ごく単純です (リスト 2)。


リスト 2. データを扱う
                
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ev="http://www.w3.org/2001/xml-events"
 xmlns:xforms="http://www.w3.org/2002/xforms">
  <head>
    <title>Instance Data-To-XHTML/XForms Example</title>
    <xforms:model id="model_inventory">
      <xforms:instance id="instance_model_inventory" src="inventory.xml"/>
      <xforms:submission id="submit_model_inventory"
 action="http://localhost/xforms.php"
          method="post"/>
    </xforms:model>
  </head>
  <body>
    <xforms:submit submission="submit_model_inventory">
      <xforms:label>Submit</xforms:label>
    </xforms:submit>
  </body>
</html>

このフォームは、インスタンス文書を、そのままの形で単純に送信します (図 1)。


図 1. フォーム
フォーム

今度は実際の PHP を扱う番です。XForms フォーム・データは、POST リクエストの内容としてサーバーに送信されます。そのため、PHP を使ってそのデータにアクセスするには、$HTTP_RAW_POST_DATA 変数の内容にアクセスする必要があります (リスト 3)。


リスト 3. 基本的な PHP
                
<?php
if (!isset($HTTP_RAW_POST_DATA))
   $HTTP_RAW_POST_DATA = file_get_contents("php://input");

   header("Content-type: text/plain");
   echo $HTTP_RAW_POST_DATA;
?>

$HTTP_RAW_POST_DATA 変数は、多くの PHP インストールではデフォルトで設定されず、特定の設定変更が必要です。幸い、入力ストリームからデータを読み取る file_get_contents() 関数を使って、手動でデータを追加することができます。

XML を表現するストリングが用意できたら、レスポンスの Content-type を text/plain に設定し、変数の内容をエコーすることで、そのストリングをプレーン・テキストとしてブラウザーに出力することができます。インスタンス文書は、フォームを送信した時とまったく同じに見えるはずです (図 2)。


図 2. インスタンス文書
インスタンス文書

これは素晴らしいことですが、では実際のデータの扱いに関してはどうでしょう。幸い PHP では、XML でフォーマットされたテキストのストリングから容易に DOM ドキュメントを作成できるのです (リスト 4)。


リスト 4. データを扱う
                
<?php
if (!isset($HTTP_RAW_POST_DATA))
   $HTTP_RAW_POST_DATA = file_get_contents("php://input");

   $doc = new DOMDocument();
q   $doc->loadXML($HTTP_RAW_POST_DATA);

   $allBooks = $doc->getElementsByTagName('book');
   $numBooks = $allBooks->length;

   $allMovies = $doc->getElementsByTagName('movie');
   $numMovies = $allMovies->length;

   echo "There are ".$numBooks." books and ".$numMovies." movies.";
?>

この場合では、新しい DOM ドキュメントを作成し、次に loadXML() 関数を使ってデータをロードすることができます。これ以降は、まるでファイルや他のソースからデータをロードしたかのように、好きなように DOM ドキュメントを操作することができます。この場合、結果は図 3 のようになるはずです。


図 3. 最終的な結果
最終的な結果

まとめ

XForms は、XML データを HTTP POST リクエストの内容として送信します。そのため、XML データをアプリケーションの中で使うためには、単純に $HTTP_RAW_POST_DATA 変数の内容を読み取ればよいのです。



ダウンロード

内容ファイル名サイズダウンロード形式
PHP XForms sample codephpdatafiles.zip3KBHTTP

ダウンロード形式について


参考文献

学ぶために

  • このシリーズは、XForms を使い始めるためのガイドとして最適です。

  • 3 回シリーズのチュートリアル、「Learning PHP」は、PHP を理解するための出発点になるでしょう。

  • developerWorks のXML ゾーンには、XForms や他の XML技術に関する皆さんのスキルを向上するために役立つ資料が豊富に用意されています。

  • developerWorks のOpen Source ゾーンには、皆さんの PHP スキルを向上するために役立つ資料が豊富に用意されています。

  • technology bookstoreには、この記事や他の技術的な話題に関する本が豊富に取り揃えられています。

製品や技術を入手するために

  • IE で XForms を表示するためのオープン・ソース・コントロールであるMozzIEを入手してください。

議論するために

著者について

Nicholas Chase

Nicholas Chase は、Lucent Technologies や Sun Microsystems、Oracle、the Tampa Bay Buccaneers などの会社で Web 開発に携わってきました。彼は高校の物理の先生であり、低レベル放射性廃棄物施設の管理者であり、オンライン SF 雑誌の編集者であり、マルチメディアのエンジニアであり、Oracle インストラクターであり、あるインタラクティブ・コミュニケーション会社の最高技術責任者でもあります。『XML Primer Plus』(Sams 刊) を含めて、何冊かの著作があります。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML
ArticleID=243241
ArticleTitle=XForms のヒント: PHP で XForms データを受け付ける
publish-date=09262006
author1-email=nicholas@nicholaschase.com
author1-email-cc=dwxed@us.ibm.com

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。