PHP と DB2 9、そして Xajax を組み合わせ、Ajax を使う

Linux、UNIX、Windows 用の DB2 で Xajax を使う

PHP は Web アプリケーションの開発に一般的に使われるスクリプト言語です。また Ajax (Asynchronous JavaScript and XML) は、JavaScript とDOM (Document Object Model)、そして XMLHttpRequest 技術を組み合わせ、クライアントとサーバーとの間で動的な対話動作を行わせるための Web 技術です。PHP で Ajax を使うための PHP クラス・ライブラリーには、さまざまなものがあります。そのうちの 1 つが、オープンソースでオブジェクト指向の PHP クラス・ライブラリーである Xajax です。この記事では、PHP と Ajax、そして Xajax を実装し、Linux®、UNIX®、Windows® 用の IBM® DB2® 9 にアクセスする動的な Web アプリケーション・ソリューションを開発する方法について学びます。

Deepak Vohra, Web Developer

Deepak Vohra は Web 開発者であり、Sun 認定 Java プログラマーであり、Sun 認定 Web コンポーネント開発者です。彼は、XML Journal や WebLogic Developer's Journal、Java Developer's Journal、ONJava.com、Oracle Magazine などに記事を投稿しています。


developerWorks 貢献著者レベル

2007年 1月 25日

はじめに

今日の Web アプリケーションの 40% 以上が、PHP をスクリプト言語として使っています。また Ajax (Asynchronous JavaScript and XML) は、JavaScript とDOM (Document Object Model)、そして XMLHttpRequest 技術を組み合わせ、クライアントとサーバーとの間で動的な対話動作を行わせるための Web 技術です。PHP で Ajax を使うための PHP クラス・ライブラリーには、さまざまなものがあります。Xajax はオープンソースでオブジェクト指向の PHP クラス・ライブラリーであり、これを利用すると PHP で Ajax が使えるようになります。

例えば、あるユーザーが、Web サイトに登録するためにフォームに入力する場合を考えてみてください。フォームのデータが有効かどうかは、フォームが送信されるまでチェックされません。ところが Ajax の場合は、フォームに追加されたデータは、サーバー・アプリケーションにあるビジネス・ロジックを使って動的に検証されます。従って、完全なフォームをサーバーにポストしてフォームの中のデータの有効性をチェックする必要はありません。Ajax の A (asynchronous: 非同期) は、HTTP リクエストが完全でなくても、また HTTP リクエストを開始した HTML/JavaScript ページの処理が継続されていても、XMLHttpRequest オブジェクトの send() メソッドが即座に返されることを意味します。そのため開発者にとっては、XMLHttpRequest オブジェクトが非同期に HTTP レスポンスを処理している間も、XMLHttpRequest リクエストを開始した HTML/JavaScript ページの処理が継続されているように見えます。


Xajax の概要

Xajax は、PHP スクリプトで構成されるクライアント・アプリケーションとサーバー・サイド・アプリケーションとの間で非同期通信を行うために使われます。Xajax は、サーバー・サイドにある PHP 関数のための JavaScript ラッパー関数を生成し、この関数にクライアント・アプリケーションからアクセスすることができます。クライアント・アプリケーションがこのラッパー関数を呼び出すと、XMLHttpRequest オブジェクトが開始され、XMLHttpRequest HTTP リクエストがサーバーに送信されます。

一方サーバーでは、xajax オブジェクトは XMLHttpRequest を受信し、JavaScript ラッパー関数に対応する PHP 関数を呼び出します。Xajax によって登録される PHP 関数のデフォルトのリクエスト・タイプは POST です。PHP 関数は XML レスポンスを返し、このレスポンスは xajax オブジェクトによってクライアント・アプリケーションに返されます。Xajax の JavaScript メッセージ・ポンプは、XML レスポンスの中にある指示に基づいて、クライアントの入力ページのコンテンツを更新します。Xajax には、データが変更されたときだけデータを更新するように保証する機能があります。

皆さん独自の Web アプリケーションを作成する手始めとして、製品をインストールし、データベースを作成するプロセスをたどってみましょう。そうすれば皆さんもアプリケーションの作成について掘り下げて見ていけるはずです。


Linux、UNIX、Windows 用の DB2 をインストールする

DB2 データベース用の PHP エクステンションは、Linux、UNIX、Windows 用の DB2 V8.2 以降で使うことができます。下記のインストール手順では、Windows 用の DB2 Enterprise 9 を使っています。

  1. DB2 9 データ・サーバー (「参考文献」を参照) をダウンロードします。(この例では DB2 Enterprise 9 を使いますが、他のバージョンの DB2 を使うこともできます。)
  2. db2_v9_ese_win_32.zip を、任意のディレクトリーに解凍します。
  3. DB2 をインストールするには、C:\DB2\ESE\image\setup.exe アプリケーションをダブル・クリックします。
  4. IBM DB2 Setup Launchpad で Install a Product をクリックします。
  5. DB2 Enterprise Server ヘッダーの Install New をクリックします。DB2 Setup Wizard が起動します。Next をクリックします。
  6. 使用許諾条件に同意し、Next をクリックします。
  7. Installation Type (Typical ) を選択し、Next をクリックします。
  8. インストール・ファイルとレスポンス・ファイルの作成 (デフォルト) を選択し、Next をクリックします。
  9. インストール・フォルダー (デフォルトは C:\Program Files\IBM\SQLLIB\) を選択し、Next をクリックします。
  10. ユーザー名 (db2) とパスワード (db2admin) を指定し、Next をクリックします。
  11. デフォルトの DB2 インスタンスとして、DB2 という DB2 インスタンスがリストされています。Configure ボタンをクリックすると、デフォルトの DB2 インスタンス用のサービス名とプロトコルを構成することができます。デフォルトのサービス名は db2c_DB2 であり、デフォルトのポートは 5000 です。Next をクリックします。
  12. Prepare the DB2 tools catalog フレームでデフォルト設定を選択し、Next をクリックします。
  13. 必要に応じて通知を設定し、Next をクリックします。
  14. Enable operating system security for DB2 objects のデフォルト設定を選択し、Next をクリックします。
  15. Finish ボタンをクリックしてデータベース・サーバーをインストールします。

今度はサンプル・データベースを作成します。前提条件として、DB2INSTANCE 環境変数を DB2 に設定します (System Properties > Advanced > Environment Variables > System Variables を選択します)。DB2INSTANCE 環境変数は、DB 2 のコマンド・ウィンドウで次のコマンドを使って設定することもできます。

set DB2INSTANCE=DB2

サンプル・データベースを作成するには、DB2 First Steps フレームで Database Creation を選択します。Create SAMPLE Database ボタンをクリックします。あるいは、次のコマンドを使ってサンプル・データベースを作成することもできます。

db2sampl

DB2 データベース SAMPLE を、次の DB2 コマンドを使って ODBC データソースとして登録します。

db2 catalog system odbc data source sample

PHP と Xajax をインストールする

Xajax は PHP のクラス・ライブラリーなので、まず PHP 5 をダウンロードしてインストールします。 PHP 5 は、いくつもの異なる Web サーバーにインストールすることもできます。この記事では、Windows 用の Apache Web サーバーを使って PHP 5 を構成する方法を説明します。

PHP をインストールして構成するための手順は下記のとおりです。

  1. PHP 5.2.0 (「参考文献」を参照) をダウンロードします。
  2. PHP の zip ファイルをインストール・ディレクトリー (例えば C:/PHP など) に解凍します。
  3. Apache HTTP Server 2.0 をダウンロードしてインストールします。
  4. PATH 環境システム変数に対して、PHP 5 がインストールされているディレクトリー (C:/PHP) を追加します。
  5. C:/PHP ディレクトリーにある php.init-recommended ファイルを php.ini に変更します。

この記事のサンプル・アプリケーションでは、DB2 データベースを使ってデータを保管し、フェッチします。DB2 データベースに接続するには、PHP PDO エクステンションを使います。

php.ini 構成ファイルの中で、extension_dir = "./ext" を指定してエクステンション・ディレクトリーを設定する必要があります。PDO エクステンションを有効にするには、php.ini ファイルの中で、下記の行の前の「;」を削除する必要があります。

extension=php_pdo.dll

PDO ODBC ドライバーも有効にする必要があります。php.ini ファイルの中で、下記の行の前の「;」を削除します。

extension=php_pdo_odbc.dll

PHP 5 を Apache HTTP サーバーにインストールします。<Apache2>/conf/httpd.conf ファイルに対して下記を追加します。

# For PHP 5 
LoadModule php5_module "C:/PHP/php5apache2.dll"
AddType application/x-httpd-php .php

# configure the path to php.ini
PHPIniDir "C:/PHP/"

デフォルトで、<Apache2> ディレクトリーは、C:/Program Files/Apache Group/Apache2 です。ここでは Apache2 サーバーを C:/Apache2/Apache2 ディレクトリーにインストールしました。もし PHP 5 が C:/PHP 以外のディレクトリーにインストールされている場合には、C:/PHP を PHP 5 がインストールされているディレクトリーに置き換えます。httpd.conf ディレクトリーを変更したら Apache Web サーバーを再起動します。Apache Web サーバーで実行すべき PHP ファイルを C:/Apache2/Apache2/htdocs ディレクトリーにコピーします。

Xajax 0.2.4 をダウンロードします。C:/Apache2/Apache2/htdocs ディレクトリーに xajax ディレクトリーを作成します。xajax_0.2.4.zip ファイルを xajax ディレクトリーに解凍します。


DB2 データベース表を作成する

Xajax アプリケーションは、DB2 データベース表からデータを取得します。データベース表は PHP スクリプトを使って作成することができます。createTable.php という PHP スクリプトを作成します。ユーザーとパスワード用の変数を定義します。

$user = 'db2';
$password = 'db2admin';

PDO コンストラクターを使って DB2 SAMPLE データベースと接続します。

$connection = new PDO('odbc:SAMPLE', $user, $password);

デフォルトで、PDO コンストラクターは非持続的なデータベース接続を行います。接続が成功すると、PDO コンストラクターは DB2 データベース接続リソースを返します。接続が成功した場合の出力メッセージは「Connection succeeded」です。もしデータベース接続が失敗すると、接続エラー・メッセージが出力されます。下記の SQL 文を定義して表を作成します。

$createtable = "CREATE TABLE DB2.Catalog(CatalogId VARCHAR(25), 
Journal VARCHAR(25), Section Varchar(25), Edition 
VARCHAR(25), Title Varchar(45), Author Varchar(25))";

exec() 関数を使って SQL 文を実行します。

$connection->exec($createtable);

表の行を追加する SQL 文を次のように定義します。

$addrow = "INSERT INTO DB2.Catalog VALUES('catalog1', 'IBM developerWorks',  
'XML', 'July 2006', 'The Java XPath API', 'Elliotte Harold')";

exec() 関数を使って SQL 文を実行します。

$result=$connection->exec($addrow);

データベース表の行が追加されます。追加された行の数を示すメッセージを出力します。

print("Added $result rows.\n");

同様に、データベース表 Catalog に別の行を追加します。

$addrow = "INSERT INTO DB2.Catalog VALUES('catalog2', 'IBM developerWorks',  
'XML', 'October 2005', 'JAXP validation',  'Brett McLaughlin')";

$result=$connection->exec($addrow);

PHP スクリプト、createTable.php をリスト 1 に示します。createTable.php を C:/Apache2/Apache2/htdocs ディレクトリーにコピーします。まだ Apache Web サーバーが起動していなかったら、起動させます。ブラウザーで URL に http://localhost/createTable.php を入力し、この PHP スクリプトを実行します。データベース表、DB2.Catalog が生成され、データが表に追加されます。

リスト 1. createTable.php
<?php

try {

$user = 'db2';
$password = 'db2admin';

$connection = new PDO('odbc:SAMPLE', $user, $password); 
echo "Connection succeeded\n";

$createtable = "CREATE TABLE DB2.Catalog(CatalogId VARCHAR(25), 
Journal VARCHAR(25), Section Varchar(25), Edition 
VARCHAR(25), Title Varchar(45), Author Varchar(25))";

$connection->exec($createtable);

$addrow = "INSERT INTO DB2.Catalog VALUES('catalog1', 'IBM developerWorks',  
'XML', 'July 2006', 'The Java XPath API',   
'Elliotte Harold')";

$result=$connection->exec($addrow);

print("Added $result rows.\n");

$addrow = "INSERT INTO DB2.Catalog VALUES('catalog2', 'IBM developerWorks',  
'XML', 'October 2005', 'JAXP validation',  
 'Brett McLaughlin')";

$result=$connection->exec($addrow);



} catch (PDOException $e) {

   $e->getMessage();
}


?>

リクエストを送信する

今度は、入力フォームで構成されるサンプル・アプリケーションを作成しましょう。入力フォームはデータを受け取り、データベース表 Catalog にカタログ項目を追加します。ユーザーが入力フィールド Catalog Id にデータの入力を始めると、XMLHttpRequest HTTP リクエストがサーバーに送信され、追加された Catalog Id の値が検証されます。その Catalog Id がまだデータベースに定義されていない場合には、メッセージ「Catalog Id is Valid」が表示されます。その Catalog Id が既にデータベースに定義されている場合には、メッセージ「Catalog Id is not Valid」が表示され、Create Catalog ボタンが無効になり、Catalog Id のフィールド値がフォームに追加されます。

xajax PHP オブジェクトは、クライアント・アプリケーションとサーバーとの間の仲介機能を果たします。まず、下記の xajax クラス・ライブラリーをインクルードします。

require('./xajax/xajax_0.2.4/xajax.inc.php');

次のように xajax オブジェクトを作成します。

$xajax = new xajax();

PHP 関数によってサーバー・サイド処理が行われます。PHP 関数 validateCatalogId($formValues) と updateCatalog($formValues) を作成します。どちらの関数も、下記のような $formValues パラメーターを使います。

function validateCatalogId($formValues){}
function updateCatalog($formValues){}

これらの PHP 関数を、registerFunction() メソッドを使って xajax オブジェクトに登録します。xajax オブジェクトはこれらの PHP 関数に対して、PHP スクリプトから呼び出される、あるいは入力フォーム・イベント・ハンドラーから呼び出されるラッパー関数を作成します。

$xajax->registerFunction("validateCatalogId");
$xajax->registerFunction("updateCatalog");

Xajax は、登録された PHP 関数に対して非同期ラッパー関数を生成します。ラッパー関数の名前は、xajax_phpfunction という形式です。変数 phpfunction はサーバー・サイドの PHP 関数であり、これに対してラッパー関数を定義します。Xajax は非同期フォーム処理を、getFormValues(string formId) メソッドで行います。getFormValues() メソッドを使うと、フォーム・フィールドの値の配列を xajax 非同期ラッパー関数の引数として送信することができます。フォーム全体ではなく、フォームの一部を送信することもできます (getFormValues(string formID ,boolean submitDisabledElements, string prefix)) 関数を使います)。prefix パラメーターは、この接頭辞で始まるフォーム要素のみを送信するように指定します。ブール・パラメーター submitDisabledElements は、無効になっている要素を送信するかどうかを指定します。PHP 関数 validateCatalogId と updateCatalog は、フォーム・フィールドの値の配列に対するパラメーターを定義します。XMLHttpRequest が開始される前に、processRequests() 関数でリクエストを処理する xajax オブジェクトを下記のように指定します。

$xajax->processRequests();

また、XML レスポンスがサーバーから返送された後、必要な JavaScript をxajax が生成する必要があることを、入力フォームの <head></head> タグの中で指定します。

<?php $xajax->printJavascript('./xajax/xajax_0.2.4');
?>

XMLHttpRequest はクライアント・アプリケーションによって開始されます。サンプル・アプリケーションでは、XMLHttpRequest は入力フィールド catalogId の中の onkeyup イベント・ハンドラーによって起動されています。

<tr><td>Catalog Id:</td><td><input    type="text"
            size="20"  
              id="catalogId"
            name="catalogId"
    autocomplete="off"
         onkeyup="xajax_validateCatalogId(xajax.getFormValues
           ('validationForm'));"></td>
         <td><div id="validationMessage"></div></td>
</tr>

入力フィールドは、フォーム・フィールドの値の配列をパラメーターとして、ラッパー関数 xajax_validateCatalogId を呼び出します。このラッパー関数は XMLHttpRequest をサーバーに送信します。xajax オブジェクトは XMLHttpRequest を受信し、これに対応する PHP 関数 validateCatalogId($formValues) を呼び出します。


リクエストを処理する

Xajax には、クライアント・アプリケーションにレスポンスを送信するための xajaxResponse クラスが用意されています。validateCatalogId 関数の中で xajaxResponse を作成します。

$objResponse = new xajaxResponse();

validateCatalogId 関数は、入力フォームに追加された Catalog Id の値を検証します。$formValues 配列から、catalogId フィールドの値を取得します。

$catalogId=trim($formValues['catalogId']);

次に、PHP の PDO エクステンションを使って DB2 データベースと接続し、Catalog 表の行が入力フォームのカタログ ID の値の入力に対して定義されているかどうかを判断します。

ユーザーとパスワードに対する変数を定義します。

$user = 'db2';
$password = 'db2admin';

PDO コンストラクターを使って DB2 データベースと接続します。

$connection = new PDO('odbc:SAMPLE', $user, $password);

PDO コンストラクターは、接続が成功すると DB2 データベース接続リソースを返します。フォームのカタログ ID の値の入力に対するデータ行を選択するための、準備済み SQL 文を準備します。準備済み文を、prepare ( string statement [, array driver_options] ) 関数を使ってコンパイルします。

$stmt = $connection->prepare("SELECT * from DB2.CATALOG WHERE CATALOGID=?");

PDO::ATTR_CURSOR 属性を使って、カーソルをスクロール可能カーソルに設定します。

$stmt ->setAttribute(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL);

CatalogId パラメーターを、bindParam() メソッドを使ってバインドします。

$stmt->bindParam(1, $catalogId);

準備済み文の中の SQL クエリーを、execute ( [array input_parameters] ) 関数を使って実行します。

$stmt->execute();

結果セット行を、fetch ( [int fetch_style [, int cursor_orientation [, int cursor_offset]]] ) 関数を使ってフェッチします。

$row = $stmt->fetch();

fetch() 関数は、要求された行が存在する場合には TRUE を返し、存在しなければ FALSE を返します。fetch() が FALSE を返した場合は結果セットは空であり、カタログ ID の値に対する Catalog 表の行はデータベース表の中に定義されません。従って、フォームに追加された Catalog Id フィールドの値は有効です。次に、クライアント・アプリケーションに返されるレスポンスを生成しましょう。レスポンスには、1 つまたは複数のコマンド・メッセージが含まれています。一般的に使われるコマンド・メッセージのいくつかを表 1 に示します。

表 1. xajaxResponse コマンド・メッセージ
コマンド・メッセージ説明
Assign入力ページ中の要素の指定された属性を、メソッド addAssign(string elementId, string attribute, string data) を使って設定します。
Append入力ページ中の要素の指定された属性に、メソッド addAppend(string elementId, string attribute, string data) を使ってデータを連結します。
Prepend入力ページ中の要素の指定された属性の前に、メソッド addPrepend(string elementId, string attribute, string data) を使ってデータを付加します。
Replace入力ページ中の要素の指定された属性のデータを、メソッド addReplace(string elementId, string attribute, string replace, string data) を使って置き換えます。
Script指定された JavaScript コードを、メソッド addScript(string javascript) を使って実行します。
Alert指定されたメッセージのアラート・ボックスを、メソッド addAlert(string message) を使って表示します。

fetch() メソッドが FALSE を返すと、「Catalog Id is Valid」というメッセージが validationMessage divに表示されます。addAssign メソッドは、次のように validationMessage div の innerHTML を設定します。

$objResponse->addAssign("validationMessage","innerHTML","Catalog Id is Valid");

fetch() 関数が TRUE を返す場合は、カタログ ID の値が Catalog 表の中に定義されています。従って、入力フォームに追加されたカタログ ID の値は有効ではありません。もし fetch() メソッドが行を返したら、validationMessage div の innerHTML を「Catalog Id is not Valid」に設定します。

$objResponse->addAssign("validationMessage","innerHTML","Catalog Id is not Valid");

次に、結果セット行から値をフェッチし、入力フォーム・フィールドに値を設定します。fetch() 関数は、結果セットのポインターを次の行に設定します。

フィールド値を、$row[mixed column] 関数を使って結果セット行から取得します。column パラメーターを、列索引 (基数は0)、あるいは列名として指定することができます。例えば journal 列の値を、次のリストの PHP コードで取得することができます。

$journal=$row['JOURNAL'];

入力フォーム・フィールド要素の value 属性を addAssign メソッドで設定します。例えば、journal 要素の value 属性を下記のように設定します。

$objResponse->addAssign("journal","value",$journal);

また、送信ボタンを無効にします。

$objResponse->addAssign("submitForm","disabled",true);

$objResponse オブジェクトを、validateCatalogId 関数から XML ストリングとして返します。

return $objResponse->getXML();

この XML レスポンスは xajax プロセッサーに送られ、そこからさらに xajax の JavaScript メッセージ・ポンプに送られます。メッセージ・ポンプは XML 命令を構文解析し、入力ページの各要素を設定します。このようにして、addAssign メソッドを使って $xmlResponse オブジェクトの中に指定されたデータが入力フォームに設定されます。

updateCatalog($formValues) 関数を使ってデータベース表 Catalog を入力フォームで更新します。Catalog Id フィールドの値が有効な場合は、フォームの他のフィールドに値を追加することで、新しいカタログ項目を作成します。Create Catalog ボタンをクリックしてフォームを送信します。onsubmit イベント・ハンドラーがラッパー関数 xajax_updateCatalog を呼び出し、このラッパー関数が XMLHttpRequest をサーバーに送信します。

onsubmit="xajax_updateCatalog(xajax.getFormValues('validationForm'));"

xajax オブジェクトは XMLHttpRequest を受信し、それに対応する PHP 関数 updateCatalog($formValues) を呼び出します。この updateCatalog 関数の中で、フォーム・フィールドの値を取得し、データベース表 Catalog に行を追加する SQL 文を作成します。データベースに接続し、この SQL 文を実行します。input.php スクリプトをリスト 2 に示します。

リスト 2. input.php
<?php require('./xajax/xajax_0.2.4/xajax.inc.php');
$xajax = new xajax();
$xajax->cleanBufferOn();  

$xajax->registerFunction("validateCatalogId");
$xajax->registerFunction("updateCatalog");


function validateCatalogId($formValues){
$objResponse = new xajaxResponse();


$catalogId=trim($formValues['catalogId']);


$user = 'db2';
$password = 'db2admin';


$connection = new PDO('odbc:SAMPLE', $user, $password);

$stmt = $connection->prepare("SELECT * from DB2.CATALOG WHERE CATALOGID=?");
$stmt ->setAttribute(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL);
$stmt->bindParam(1, $catalogId);
$stmt->execute();
$row = $stmt->fetch();

if(!$row){
$objResponse->addAssign("validationMessage","innerHTML","Catalog Id is Valid");
$objResponse->addAssign("submitForm","disabled",false);

$objResponse->addAssign("journal","value","");
$objResponse->addAssign("section","value","");

$objResponse->addAssign("edition","value","");
$objResponse->addAssign("title","value","");
$objResponse->addAssign("author","value","");

}

if($row){
$objResponse->addAssign("validationMessage","innerHTML",
"Catalog Id is not Valid");

$catalogId=$row['CATALOGID'];
$journal=$row['JOURNAL'];
$section=$row['SECTION'];
$edition=$row['EDITION'];
$title=$row['TITLE'];
$author=$row['AUTHOR'];

$objResponse->addAssign("journal","value",$journal);
$objResponse->addAssign("section","value",$section);

$objResponse->addAssign("edition","value",$edition);
$objResponse->addAssign("title","value",$title);
$objResponse->addAssign("author","value",$author);
$objResponse->addAssign("submitForm","disabled",true);

}

return $objResponse->getXML(); 

}

function updateCatalog($formValues){

$catalogId=trim($formValues['catalogId']);
$journal=trim($formValues['journal']);
$section=trim($formValues['section']);
$edition=trim($formValues['edition']);
$title=trim($formValues['title']);
$author=trim($formValues['author']);


$user = 'db2';
$password = 'db2admin';


$connection = new PDO('odbc:SAMPLE', $user, $password);


$sql = "INSERT INTO DB2.Catalog  
VALUES('".$catalogId."','".$journal."','".$section."','".$edition."','".
$title."','".$author."')";

$r=$connection->exec($sql);

$connection->commit();

echo "Added $r rows.\n";

}
$xajax->processRequests();

?>
<head>
<?php $xajax->printJavascript('./xajax/xajax_0.2.4');
?>
</head>
<body>
<h1>Form to Create a Catalog Entry</h1>
<form id="validationForm"  name="validationForm" onsubmit=
"xajax_updateCatalog(xajax.getFormValues('validationForm'));">
<table>
<tr><td>Catalog Id:</td><td><input    type="text"
            size="20"  
              id="catalogId"
            name="catalogId"
   autocomplete="off"
     onkeyup="xajax_validateCatalogId(xajax.getFormValues('validationForm'));"></td>
        <td><div id="validationMessage"></div></td>
</tr>


<tr><td>Journal:</td><td><input    type="text"
            size="20"  
              id="journal"
            name="journal"></td>
</tr>

<tr><td>Section:</td><td><input    type="text"
            size="20"  
              id="section"
            name="section"></td>
</tr>

<tr><td>Edition:</td><td><input    type="text"
            size="20"  
              id="edition"
            name="edition"></td>
</tr>
<tr><td>Title:</td><td><input    type="text"
            size="20"  
              id="title"
            name="title"></td>
</tr>

<tr><td>Author:</td><td><input    type="text"
            size="20"  
              id="author"
            name="author"></td>
</tr>

<tr><td><input    type="submit"
            value="Create Catalog"  
              id="submitForm"
            name="submitForm"></td>
</tr>
</table>

</form>
</body>
</html>

次に、Apache Web サーバーで input.php スクリプトを実行します。input.php を C:\Apache2\Apache2\htdocs にコピーします。URL を http://localhost/input.php にして PHP スクリプトを実行します。図 1 に示す入力フォームが表示されます。

図 1. 入力フォーム
入力フォーム

Catalog Id フィールドに値を追加してみます。Catalog Id フィールドの値が有効かどうかを検証するメッセージが表示されます (図 2)。

図 2. 入力フィールドを検証する
入力フィールドを検証する

入力フィールドが変更される度に、XMLHttpRequest HTTP リクエストが送信されます。

図 3. 有効な値を入力フィールドに追加する
有効な値を入力フィールドに追加する

既に Catalog 表に定義されている値が指定されると、メッセージ「Catalog Id is not Valid」が表示されます (図 4)。例えば Catalog Id フィールドに「catalog1」を追加すると、「catalog1」は既に定義されているため、メッセージ「Catalog Id is not Valid」が表示されます。

図 4. 有効ではない値を入力フィールドに追加する
有効ではない値を入力フィールドに追加する

新しいカタログ項目を作成するには、有効な Catalog Id フィールドを指定し、他のフォーム・フィールドに値を追加します。Create Catalog ボタンをクリックしてカタログ項目を作成します (図 5)。

図 5. カタログ項目を作成する
カタログ項目を作成する

もしその Catalog Id フィールドを使って既にカタログ項目が作成されている場合には (この例での「catalog3」など)、「Catalog Id is not Valid」が表示されます (図 6)。

図 6. 既にカタログ項目が作成されている CatalogId を追加する
既にカタログ項目が作成されている CatalogId を追加する

まとめ

この記事では、Ajax が提供する、クライアントからサーバーへの非同期 XMLHttpRequest リクエストを PHP スクリプトと組み合わせ、動的な Web アプリケーションを作成する方法を説明しました。こうした例を活用して皆さん自身の動的 Web アプリケーションを作成し、DB2 データにアクセスしてみてください。

参考文献

学ぶために

  • developerWorks resource page for DB2 for Linux, UNIX, and Windows にある記事やチュートリアルを読み、また他のリソースへのリンクを利用して、DB2 のスキルを磨いてください。
  • DB2 コミュニティーのための、DB2 Express Edition の無料版、 DB2 Express-C について学んでください。
  • Ajax resource center で Ajax について学んでください。
  • PHP project resources で PHP 開発者のためのプロジェクト情報を見つけてください。
  • 「Using Ajax with PHP and Sajax」(developerWorks、2005年10月) を利用して PHP での Ajax の使い方を学び、またサーバー・サイド PHP とそれを動作させる JavaScript を統合する、PHP で書かれたツール Sajax (Simple Ajax Toolkit) の使い方を学んでください。
  • 「Developing PHP the Ajax way, Part 1: Getting started」(developerWorks、2006年5月) を読んでください。単純な写真アルバムを、PHP と Sajax (Simple Ajax Toolkit) を使ってオンライン Web アプリケーションとして作成する方法について説明しています。
  • 「Developing PHP Applications for IBM Data Servers」(IBM Redbook) は、IBM Data Servers で PHP を使うための入門です。PHP アプリケーション用に IBM データ・サーバーと Apache Web アプリケーション・サーバーを設定するためのインストールや構成の詳細が解説されています。
  • 「Connecting PHP applications to IBM DB2 Universal Database」(developerWorks、2006年5月) は、PHP と IBM DB2 Universal Database との組み合わせによる Web アプリケーションの作成について解説しています。
  • 「Connect PHP to DB2 and Cloudscape with PDO」(developerWorks、2005年3月) では、PDO を入手し、インストールし、使用して DB2 と Cloudscape データベースに接続する方法について、またデータを挿入し、取得する方法と、より高度な機能 (準備済み文やバインド・パラメーター、スクロール可能カーソル、位置指定更新、LOB など) について解説しています。
  • developerWorks Information Management ゾーンで DB2 について学んでください。技術資料やハウツー記事、教育資料、ダウンロード、製品情報など豊富な資料が用意されています。
  • Technology bookstore には、この記事や他の技術的な話題に関する本が豊富に取り揃えられています。

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

  • Xajax PHP クラス・ライブラリー、xajax_0.2.4.zip をダウンロードしてください。
  • PHP バイナリー、php-5.2.0-Win32.zip をダウンロードしてください。
  • 無料の試用版、DB2 Enterprise 9 をダウンロードしてください。
  • DB2 が無料で使えるようになりました。DB2 コミュニティーのための DB2 Express Edition の無料版、 DB2 Express-C をダウンロードしてください。DB2 Express Edition と同じコア・データ機能を持っており、アプリケーションを構築、デプロイするための堅固なベースとなります。
  • IBM 製品の試用版をダウンロードし、DB2® や Lotus®、Rational®、Tivoli®、WebSphere® などのアプリケーション開発ツールやミドルウェア製品を実際に試してみてください。

議論するために

コメント

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=Information Management, Open source
ArticleID=273803
ArticleTitle=PHP と DB2 9、そして Xajax を組み合わせ、Ajax を使う
publish-date=01252007