
このチュートリアルでは、FileMaker API for PHP の主要な機能を紹介します。チュートリアルの全 6 レッスンで、API を使用して FileMaker Pro データベースを PHP Web アプリケーションに統合する方法を学習します。各レッスンでは、コードの記述方法やその動作について説明しながら、API の特定の機能を紹介します。
チュートリアルデータベースは FileMaker アンケートシステム (questionnaire.fmp12) です。各アンケートレコードには、複数の関連する質問を含めることができます。各質問には、複数の関連する返答を含めることができます。アクティブアンケートとして選択できるのは 1 つのアンケートのみです。アクティブアンケートとは、ユーザが PHP Web アプリケーションの使用時に回答を求められるアンケートです。ユーザがオンラインアンケートを完了すると、システムによってユーザの回答レコードが追加され、ユーザの回答が関連レコードとして追加されます。
このチュートリアルでは、次のように前のレッスンの内容を踏まえながら、徐々に PHP Web アプリケーションを完了していきます。
このチュートリアルでは、すべての API については説明しませんが、これらのレッスンを終了するころには基礎が身についているでしょう。API の詳細については、FileMaker API for PHP のマニュアルを参照してください。
FileMaker API for PHP のマニュアルを表示するには、[FileMaker Server Admin Console 開始ページ] に移動し、Web 公開リソースの [FileMaker API for PHP マニュアル] をクリックします。このチュートリアルの間は、マニュアルをリファレンスとして使用してください。このリファレンスは、FileMaker API for PHP の詳しい使用法を調べるのに役立ちます。
また、questionnaire.fmp12 データベースを十分に理解する必要があります。複数の回答がある質問を作成して、その動作と構築方法を学習してください。questionnaire.fmp12 の設計に関する知識は、チュートリアル PHP アプリケーションで API を使用する方法を理解するうえで不可欠です。
FileMaker Server がインストールされていて、questionnaire.fmp12 データベースをホストしている必要があります。チュートリアルフォルダが、FileMaker Server 展開の一部である Web サーバーマシンでホストされている必要があります。
FileMaker Server のインストールおよび展開の詳細については、『FileMaker Server 入門ガイド』を参照してください。FileMaker API for PHP の詳細については、『FileMaker Server カスタム Web 公開 with PHP』を参照してください。
HTML プログラミングを十分に理解してください。これには、HTML の宣言、ヘッダ、および要素タグが含まれます。HTML を使用した Web ページのプログラミングの詳細については、「W3Schools の XHTML」を参照してください。
PHP プログラミングを十分に理解してください。これには、標準の出力、変数、配列、条件分岐、オブジェクト、メソッド、および関数が含まれます。PHP を使用したプログラミングの詳細については、「W3Schools の PHP チュートリアル」を参照してください。
HTML および PHP でテキストエディタを問題なく使用できる必要があります。このチュートリアルでは、HTML および PHP コードを表示および変更するのに、テキストエディタを使用する必要があります。
FileMaker Pro データベース設計の経験が必要です。これには、フィールド、リレーションシップ、レイアウト、およびオブジェクトが含まれます。FileMaker Pro を使用したデータベース設計の詳細については、FileMaker Pro のマニュアルを参照してください。
FileMaker Pro でレコードを編集する場合は、変更を有効にするために、必ずレコードを終了または確定してください。レコードを終了しなければ、データベースに入力された変更は Web ページに反映されません。
各レッスンの PHP ページを Web ブラウザで表示するには、PHP コードを実行するために完全修飾 URL を入力する必要があります。たとえば、ファイルがローカルマシンでホストされている場合は、"http://localhost/..." で始まる URL をブラウザで参照します。"file:///Volumes/..." で始まるローカルファイルパスは使用しないでください。"file://" URL を使用すると、PHP コードが実行されるのではなく、PHP コードが表示されます。URL は必ず "http" で始めるか、Web サーバーで SSL を設定してある場合は "https" で始めてください。
レッスン 1 では、home.php および dbaccess.php の 2 つの PHP ファイルを使用して、FileMaker API for PHP の使用法の基本について詳しく説明します。home.php ファイルは Web ブラウザの起点として機能します。dbaccess.php ファイルはデータベースを表す FileMaker オブジェクトを設定します。これらのページは、FileMaker データベースオブジェクトをインスタンス化し、そのキープロパティを設定し、questionnaire.fmp12 データベースで検索を実行する基本的な手順を示します。
チュートリアルの例を表示するには、「Lesson 1」フォルダにある home.php を Web ブラウザで参照します。このページでは、FileMaker アンケートシステムの Welcome 画面が表示されます。ページがロードされると、画面の背後で PHP と Web 公開エンジンの間の接続が確立され、questionnaire.fmp12 データベースからレコードが検索されます。
テキストエディタを使用して、「Lesson 1」フォルダにあるファイル home.php を開きます。body タグの直後にある次のコードを探します。
<?php include ("dbaccess.php"); ?>
この PHP ステートメントにより、dbaccess.php ファイルがインクルード (ロード) されます。dbaccess.php ファイルには、FileMaker データベースオブジェクトを設定し、データベース操作のために準備を行う関数が含まれています。そのため、その関数がなければ home.php 内の API メソッドは動作しません。dbaccess.php 内のメソッドは home.php ファイル内に記述することもできますが、デバッグおよび保守を容易にするために分けられています。
dbaccess.php ファイルには、FileMaker データベースオブジェクトを設定するためのコードが含まれています。これはアンケートアプリケーションを構築するうえで基本的な役割を果たします。FileMaker オブジェクトを設定するには、次の手順に従います。
テキストエディタを使用して、「Lesson 1」フォルダにあるファイル dbaccess.php を開き、次の各手順の説明に従います。
FileMaker API を使用するには、まずそれを PHP メモリにロードする必要があります。それには require ステートメントを使用します。
require_once ('FileMaker.php');
ロードされたら、それらを Web アプリケーション内のデータベース接続に使用して、FileMaker データベースクラスのインスタンスを作成することができます。API をロードせずに使用しようとすると、エラーが返されます。
FileMaker データベースクラスのインスタンスを使用するには、まずそれを作成する必要があります。また、コード内で参照するために、変数に割り当てる必要があります。
$fm = new FileMaker();
上のコードで、FileMaker データベースオブジェクトのインスタンスが作成されます。これは変数 $fm として参照されます。
FileMaker データベースオブジェクトには一連のプロパティがあり、いつでも設定することができます。ただし、一部のプロパティは、データベース操作を行う前に設定しておく必要があります。次のコードは、このチュートリアルで必要なプロパティを設定します。
$fm->setProperty('database', 'questionnaire');
$fm->setProperty('username', 'web');
$fm->setProperty('password', 'web');
注意 - パラメータ内でデータベース名 questionnaire に fmp12 拡張子を追加する必要はありません。
注意 - FileMaker データベースクラスのプロパティとその説明の一覧については、FileMaker API for PHP のマニュアルを参照してください。
dbaccess.php ファイルにはわずかなコードしか含まれていませんが、FileMaker オブジェクトを使用するために効果的に準備を行います。ファイルがロードされると、FileMaker オブジェクトが変数 $fm として使用可能になり、キープロパティが必要な値に設定されます。dbaccess.php ファイルにより、home.php ファイルは questionnaire.fmp12 データベースと通信できるようになります。
home.php ファイルは 2 つのデータベース操作を実行します。すべてを検索 (全レコードを表示) と検索です。これらの操作を行うコードを表示するには、テキストエディタで home.php ファイルを開きます。これらの操作を行うデータベースを表示するには、FileMaker Server でホストしている questionnaire.fmp12 ファイルを開きます。
questionnaire.fmp12 データベースには、Active Questionnaire レイアウトが含まれています。このレイアウトはインターフェースとして機能し、テーブル内にレコードが 1 つだけ含まれます。ユーザはこのレイアウトで、どのアンケートをアクティブアンケートにするか選択します。Web アプリケーションはこのアクティブアンケートの ID を取得する必要があります。
アクティブアンケートの ID を取得するには、Active Questionnaire レイアウトですべてを検索 (全レコードを表示) を実行します。この操作では、コマンドオブジェクト FileMaker_Command_FindAll を使用します。
注意 - コマンドオブジェクトとそのメソッドの一覧については、FileMaker API for PHP のマニュアルを参照してください。
$fm (FileMaker データベースインスタンス) でその newFindAllCommand() メソッドを実行し、Active Questionnaire レイアウトの名前をカッコで囲んで指定すると、FileMaker_Command_FindAll オブジェクトのインスタンスが作成されます。レイアウトによって、どのテーブル名を使用するか (コンテキスト)、およびどのフィールドが返されるか (結果) が決まります。
次の例に示すように、FileMaker_Command_FindAll インスタンスを変数に割り当てる必要があります。
$findCommand = $fm->newFindAllCommand('Active Questionnaire');
上のコードは、新しい FileMaker_Command_FindAll オブジェクトを変数 $findCommand に割り当てます。execute() メソッドですべてを検索コマンドが実行されます。結果の検索を変数に割り当てる必要があります。
$result = $findCommand->execute();
コマンドの実行後にエラーが発生することがあります。エラーが発生する (一致するレコードが見つからない) 場合は、$result 変数に FileMaker_Error object が割り当てられます。次のコードを使用して、FileMaker_Error オブジェクトをチェックします。getMessage() メソッドを使用すると、エラーメッセージが表示されます。
if (FileMaker::isError($result)) {
echo "<p>Error:" . $result->getMessage() ."</p>";
exit;
}
エラーが発生しなかった場合は、変数 $result に、対象レコードごとに FileMaker_Record オブジェクトの配列が含まれます。$result 変数を使用して、すべてを検索の結果内の先頭のレコードを取得します。PHP 配列にはデフォルトで数値の索引が設定されているので、次のコードを使用して先頭のレコードを取得することができます。
$record = $records[0];
このコードは、対象レコードの先頭のレコードを含む FileMaker_Record オブジェクトを、変数 $record に割り当てます。getField() メソッドを使用すると、このレコードから questionnaire_id のコンテンツを取得できます。getField() メソッドの結果を変数に割り当てる必要があります。
$active_questionnaire_id = $record->getField('questionnaire_id');
これでこの変数にアクティブアンケートの ID が含まれます。次の手順では、この変数を次の検索でパラメータとして使用します。
注意 - オブジェクトとそのメソッドの一覧については、FileMaker API for PHP のマニュアルを参照してください。
アクティブアンケートの ID を取得したので、それを使用してアンケートレコードを検索します。この操作を実行するためのコードは、home.php ファイルの後半にあります。この操作では、コマンドオブジェクト FileMaker_Command_Find を使用します。
$fm (FileMaker データベースインスタンス) でその newFindCommand() メソッドを実行し、Active Questionnaire レイアウトの名前をカッコで囲んで指定すると、FileMaker_Command_Find のインスタンスが作成されます。レイアウトによって、検索でどのテーブル名を使用するか、およびどのフィールドが結果に返されるかが決まります。
次の例に示すように、FileMaker_Command_Find インスタンスを変数に割り当てる必要があります。
$findCommand =& $fm->newFindCommand('questionnaire');
検索に条件を追加するには、addFindCriterion() メソッドを使用します。addFindCriterion() メソッドは、fieldName と searchParameter の 2 つのパラメータを受け取ります。「Questionnaire ID」フィールド名 (FileMaker Pro で定義されています) と変数 $active_questionnaire_id をパラメータとして渡します。
$findCommand->addFindCriterion('Questionnaire ID', $active_questionnaire_id);
注意 - addFindCriterion() メソッドは何度も呼び出して、FileMaker Pro で単一の検索要求に複数の検索条件を入力するときに発生する論理 AND をシミュレートすることができます。
検索条件を追加した後、execute() メソッドを使用して検索が実行されます。execute() メソッドの結果を変数に割り当てる必要があります。
$result = $findCommand->execute();
これで、$result 変数に FileMaker_Record オブジェクトの配列が含まれます。検索は questionnaire レイアウトで実行されたので、$result 内の各レコードには、questionnaire レイアウト上のすべてのフィールドの値が含まれます。
このページの最後のコードでは、PHP echo ステートメントおよび getField() メソッドを使用して、home.php ページ上の [アンケート名] および [説明] フィールドに出力します。
レッスン 2 では、FileMaker Pro オブジェクトイメージを Web 上に表示するのに必要なコードについて説明します。Web 互換イメージを FileMaker Pro データベース内に保存すると、FileMaker API for PHP を使用してそれらのイメージを取得して、Web サイト上に表示することができます。
FileMaker API チュートリアルデータベース questionnaire.fmp12 を開き、アクティブアンケートのオブジェクトフィールドに Web 互換イメージが含まれていることを確認します。次に、「Lesson 2」フォルダの home.php ファイルを Web ブラウザで開いて、PHP チュートリアルの例を表示します。ページにアクティブアンケートのイメージが表示されている点に注意してください。FileMaker データベース内のオブジェクトイメージを変更してみてください。終わったら必ずレコードを終了します。ブラウザを更新して、Web サイトが新しいイメージに更新されたことを確認します。
この操作での API の使用方法を確認するには、「Lesson 2」フォルダにあるファイル home.php を開きます。ファイル内の末尾の PHP ステートメントを表示します。特に <img> (イメージ) タグとその src (ソース) 属性に注意します。
この方法では、次の点に注意してください。
echo '<img src="ContainerBridge.php?path=' . urlencode($record->getField('Graphic')) . '">';
HTML <img> (イメージ) タグにはその src (ソース) 属性としてファイル パスを指定する必要があるので、このレッスンでは別のファイルを使用して実際にイメージを取得します。オブジェクトイメージを取得するファイルは ContainerBridge.php で、そのファイル名は <img> (イメージ) タグの src (ソース) 属性内に表示されます。
ContainerBridge.php ファイルには、どのイメージを表示するかが指定されていません。イメージを指定するには、src (ソース) URL の末尾に Graphic フィールドの値を追加する必要があります。HTML では、これは GET メソッドと呼ばれます。
name/value の組を使用し、先頭に疑問符を付けて、目的の文字列を連結します。name は「パス」に設定され、value は getField() メソッドの結果に設定され、オブジェクトフィールドの名前 (Graphic) がカッコで囲んで渡されます。
注意 - getField() の結果は、特殊文字が URL 用に正しくエンコードされるように、PHP urlencode() 関数に渡されます。
テキストエディタを使用して、「Lesson 2」フォルダにあるファイル ContainerBridge.php を開きます。この簡単なスクリプトでは、getContainerData() FileMaker_Record メソッドを使用して、実際のイメージを取得します。
getContainerData() を機能させるには、オブジェクトフィールドの getField() からのフィールド結果をカッコで囲んで getContainerData() メソッドに渡す必要があります。home.php では、Graphic フィールドに対する getField() からの結果が URL を介して渡されました。ContainerBridge.php では、$_GET 配列の path 要素を介して URL から結果が取得され、getContainerData() メソッドに渡されます。
echo $fm->getContainerData($_GET['path']);
ContainerBridge.php ファイルは、指定されたイメージのパスを FileMaker Pro データベースから単に取得します。これにより home.php ファイルは、<img> タグ内でそのパスを使用して、Web ブラウザでイメージを表示することができます。
注意 - FileMaker_Record オブジェクトメソッドの一覧については、FileMaker API for PHP のマニュアルを参照してください。
レッスン 3 では、FileMaker レイアウトオブジェクトを使用して動的 Web フォームを作成するのに必要なコードについて説明します。また、Web フォームの送信から新しい FileMaker レコードを追加するのに必要なコードについても説明します。このレッスンでは、さらにRespondent.php と handle_form.php の 2 つのファイルを使用します。Repondent.php ファイルは Web フォームを動的に生成します。handle_form.php ファイルは、フォームエントリを検証し、それらを新しいレコードとして questionnaire.fmp12 データベースに入力するのに使用します。
「Lesson 3」フォルダにある home.php ファイルをブラウザで参照して、アンケート Web サイトを開きます。このバージョンのページには、アンケートアプリケーションを開始するための [続行] ボタンが表示されます。[続行] ボタンをクリックすると、Respondent.php ファイルにリダイレクトされます。Web フォームに情報を入力し、[Submit] をクリックします。入力した情報が不足していた場合は、もう一度実行します。フォームが検証されると、Thank you メッセージが表示され、入力した情報が新しいレコードとして questionnaire.fmp12 データベースに追加されます。
このアプリケーションの動作を確認するには、テキストエディタで Respondent.php ページを開きます。dbaccess.php ファイルが前半にインクルードされている点に注意してください。レッスン 1 で説明したとおり、この include ステートメントによって FileMaker データベースクラスのインスタンスが作成され、そのインスタンスを変数 $fm として使用することができます。
Respondent.php のラジオボタンフォーム要素は「prefix」という名前です。この要素は、同じ名前の値一覧を使用して、FileMaker Pro データベース questionnaire.fmp12 からその値を抽出します。この方法を使用すると、FileMaker データベースで定義されている値一覧に基づいて、動的なフォーム要素を構築することができます。この方法では、データベース内の値一覧が変更されるたびに、PHP コードを更新する必要はありません。この方法は、次の手順に従って実装します。
$layout =& $fm->getLayout('Respondent');
$values = $layout->getValueList('prefixes');
foreach($values as $value){
echo '<input type= "radio" name= "prefix" value= "'.$value .'">'. $value . ' ';
}
注意 - FileMaker_Layout オブジェクトメソッドの一覧については、FileMaker API for PHP のマニュアルを参照してください。
注意 - Respondent.php 内のフォームにも、非表示のフォーム要素がいくつか含まれています。「active_questionnaire_id」という名前の要素には、home.php からのアンケート ID が含まれます。このフォームは、ID をレッスン 4 で使用される handle_form.php に渡します。
Respondent.php フォームからデータが送信されると、POST メソッドを介して処理ページ handle_form.php に値が渡されます。テキストエディタを使用して、「Lesson 3」フォルダにあるファイル handle_form.php を開きます。
ユーザによって送信されたデータは配列に組み立てられ、変数 $respondent_data に割り当てられます。この関連する配列で、各要素のキーとなるのは、データの送信先となる FileMaker フィールドの正確な名前です。各要素の値は、$_POST 配列内の HTML フォーム要素から送信された値に対応しています。この $respondent_data 配列は、データベースレコードの作成時に FileMaker オブジェクトによって使用されます。
データ配列の組み立て後、PHP コードはいくつかの簡単な検証を実行します。これらの検証メソッドでは PHP コードを明示的に使用します。この操作中に、FileMaker Server は検証を実行しません。
ユーザデータが検証を通過したら、次の 2 つの簡単な手順で新しいレコードを作成できます。
$newRequest =& $fm->newAddCommand('Respondent', $respondent_data);
$result = $newRequest->execute();
新しい FileMaker_Command_Add オブジェクトを作成する場合は、レイアウトの名前を指定する必要があります。レイアウト名によって、どのテーブル名を使用するか (コンテキスト)、およびどのフィールドが返されるか (結果) が決まります。レイアウト上に、データの入力に使用されるフィールドが必要です。
レッスン 4 では、handle_form.php ページを拡張して、追加されたレコードを使用し、最初の質問を表示します。
レッスン 4 では、FileMaker レコードをその ID を使用して取得し、ポータルから関連レコードを取得するのに必要なコードについて説明します。ポータルとは、FileMaker Pro ソリューションで使用される強力なコントロールです。FileMaker API for PHP には、ポータルデータと連携するように設計された特別なメソッドが用意されています。このレッスンでは、その機能の一部を紹介します。
FileMaker Server でホストされている FileMaker Pro questionnaire.fmp12 データベースを開きます。[アンケート編集] ボタンをクリックし、アクティブアンケートに Question ポータル内の少なくとも 1 つのレコードが含まれていることを確認します。次に、レッスン 4 の home.php ファイルを Web ブラウザで開きます。[続行] ボタンを選択し、回答情報を入力します。
次に、アクティブアンケートの最初の質問が表示されます。FileMaker Pro questionnaire.fmp12 データベースをもう一度開きます。アクティブアンケートの最初の質問を捜します。最初の質問の種類を変更してみてください。[回答編集] ボタンをクリックし、可能な回答を追加します。Web ブラウザを更新して、更新された質問を表示します。
このレッスンでは、実行できる新しい 2 つのタスクを紹介します。レコードをその ID を使用して取得するタスクと、一連の関連レコードをポータルから取得するタスクです。
テキストエディタを使用して、「Lesson 4」フォルダにある handle_form.php ファイルを開きます。handle_form.php ファイル内を 3 分の 1 ほど下方向にスクロールして、レッスン 3 の終了位置に移動します。このレッスンでは、新しい回答レコードのレコードオブジェクトを要求するコードを追加します。FileMaker Pro の [入力値の自動化] の [シリアル番号] オプションで [Respondent ID] フィールドが定義されており、[入力値の自動化] の数値を取得する必要があるので、この要求が必要です。
レッスン 1 の 検索関数と同様に、getRecord() および getField() メソッドを使用して新しいレコードを取得できます。
$records = $result->getRecords();
$record = $records[0];
$respondent_recid = $record->getField('Respondent ID');
次に、アクティブアンケートの名前を取得します。それには、FileMaker インスタンス ($fm) の getRecordById() メソッドを使用します。
getRecordById() を使用する場合は、内部 FileMaker レコード ID およびレイアウト名を渡します。レイアウトによって、どのテーブル名 (コンテキスト) を使用するか、およびどのフィールド値 (結果) が返されるかが決まります。このページ内のコードは、Respondent.php の回答フォームからこのファイルに送信された $_POST 配列の active_questionnaire_id を渡します。
$active_questionnaire_id = $_POST['active_questionnaire_id'];
$active_questionnaire = $fm->getRecordById('questionnaire',$active_questionnaire_id);
$questionnaire_name = $active_questionnaire->getField('Questionnaire Name');
注意 - API 操作から返されたすべてのレコードオブジェクトに、getRecordId() メソッドで取得できる内部 FileMaker レコード ID が含まれています。
次に、アンケートレコードを取得し、最初の質問を表示します。アクティブアンケート ID と一致するすべての質問を検索します。この検索は、Questions レイアウトに対して実行されます。
$findCommand =& $fm->newFindCommand('Questions');
$findCommand->addFindCriterion('Questionnaire ID', $active_questionnaire_id);
$result = $findCommand->execute();
$records = $result->getRecords();
$question = $records[0];
アンケートデータベースは、各質問が特定の種類 (テキスト、ラジオ、チェックボックスなど) になるように設計されています。複数の選択肢から回答する種類の場合は、各質問に複数の回答の選択肢を含めることができます。Questions レイアウトには、可能な回答を表示するポータルが含まれています。質問に 1 つまたは複数の回答がある場合、次のコードを実行すると、指定された「種類」を使用して回答の選択肢が表示されます。
このコードの説明では、質問の種類がラジオであることを前提とします。handle_form.php ドキュメントを下方向にスクロールして、質問の種類がラジオか順位かをチェックする else if 条件を表示します。
else if ($question_type =="ラジオ" || $question_type =="順位")
条件が true の場合、次のコードは関連する回答の選択肢を取得し、それらをラジオボタンフォーム要素として表示します。ポータルからの回答レコードは、FileMaker_Record オブジェクトの getRelatedSet() メソッドを使用して取得できます。
getRelatedSet() メソッドを呼び出す場合は、関連テーブルの名前をカッコで囲んで渡す必要があります。また、$question レコードを取得するときに、このリレーションシップで定義されたポータルがレイアウト上にある必要があります。
$relatedSet = $question->getRelatedSet('question_answers');
変数 $relatedSet に、関連ポータルからのレコードオブジェクトの配列が含まれます。配列をループ処理し、検索された各レコードのフィールド値を出力します。
foreach ($relatedSet as $relatedRow)
{
$possible_answer = $relatedRow->getField('question_answers::answer');
echo '<input type= "radio" name= "radio_answer" value= "'.$possible_answer .'">'. $possible_answer .'<br/>';
}
検索を実行して関連レコードを取得することもできますが、すでに関連セットが含まれているポータルを使用して getRelatedSet() を使用する方が簡単です。
レッスン 5 では、関連レコードを追加するのに必要なコードについて説明します。関連レコードを作成できるレイアウト上でポータルを定義してある場合は、FileMaker API for PHP を使用して Web から関連レコードを追加することができます。
「Lesson 5」ディレクトリでホストされている home.php ページを Web ブラウザで開きます。[続行] ボタンをクリックし、オンラインアンケートを完了します。FileMaker Server でホストされている FileMaker questionnaire.fmp12 データベースを開きます。アクティブアンケートから [回答確認] ボタンを選択し、テーブル内の最後のレコードに移動します。このレコードには、入力した回答情報が含まれています。各回答は、Responses ポータルにレコードとして保存されます。
FileMaker API for PHP では、次の 4 つの手順でポータル行を追加することができます。
テキストエディタを使用して、「Lesson 5」チュートリアルフォルダにある handle_form.php ファイルを開きます。下方向にスクロールし、回答レコードを取得するコードを探します。
$respondent_rec = getRespondentRecordFromRespondentID($respondent_recid);
このコードでは、dbaccess.php ファイルに追加された関数を使用します。テキストエディタで dbaccess.php を開くと、ファイルの後半にこの関数の定義が表示されます。関数の定義内で、newFindCommand() メソッドがそのコンテキストに Respondent レイアウトを使用します。
$find = $fm->newFindCommand('Respondent');
この関数は、回答レコードオブジェクトを $respondent_rec 変数に割り当てます。Respondent レイアウトが検索コマンドのコンテキストだったので、そのレイアウトに対して変数が参照されます。したがって、$respondent_rec 変数で使用されるメソッドは、Respondent レイアウトのコンテキストから開始します。
handle_form.php ファイルに戻ります。コードの次の行で、新しい関連レコードの作成を開始します。
$new_response = $respondent_rec->newRelatedRecord('Responses');
この行を実行すると、変数 $new_response が空のレコードオブジェクトに割り当てられます (新しいレコードは FileMaker データベース内にまだ作成されていません)。
この操作のコンテキストを理解することが重要です。このコードは、呼び出し元のレコードオブジェクト (Responses) のレイアウトから始まっており、そのレイアウト上のポータルのリレーションシップを指定しました。次にコードは、関連テーブル名を newRelatedRecord() メソッドに渡します。
新しい空のレコードを作成し、レコードがどのポータルコンテキストに属するのかを確認したら、setField() メソッドを使用してデータの入力を開始できます。このメソッドは、field name と field value の 2 つのパラメータを受け取ります。これは関連レコードなので、フィールド名をリレーションシップ名で表し、フィールド名をコロンで区切る必要があります。
$new_response->setField('Responses::Question ID', $cur_question);
$new_response->setField('Responses::Response', $translatedAnswer);
新しい関連レコードを作成し、適切なフィールドにデータを追加したら、エントリを確定できます。
注意 - 新しい空のレコードを確定する前に、フィールドデータを設定する必要はありません。
新しいレコードオブジェクトは、確定するまで FileMaker データベース内に作成されません。commit() メソッドは、questionnaire.fmp12 FileMaker データベースに FileMaker_Record オブジェクトを挿入します。
$result = $new_response->commit();
$result 変数が新しいレコードの FileMaker_Record オブジェクトに割り当てられ、FileMaker データベース内に新しいレコードが作成されます。エラーが発生すると、変数 $result に FileMaker_Error オブジェクトが含まれます。commit() メソッドを実行した後で、エラーをチェックすることをお勧めします。
レッスン 6 では、ポータルから関連フィールドを表示するのに必要なコードについて説明します。また、CSS (Cascading Style Sheets) を使用して Web アプリケーションの外観を変更する基本的な手順を紹介します。
「Lesson 6」ディレクトリでホストされている home.php ページを Web ブラウザで開きます。サイトの外観が新しくなっていることがわかります。この書式は別の CSS ページからのものです。CSS スタイルを使用すると、Web アプリケーションで使用されている HTML コードを書式設定することができます。これについては、このレッスンで後述します。
[続行] ボタンをクリックし、オンラインアンケートを完了します。thankyou.php ページに、回答した質問の概要が表示されます。これらの質問および回答は、questionnaire.fmp12 データベース内の Respondent レイアウト上のポータルからのものです。FileMaker レイアウトにポータルデータが含まれている場合は、FileMaker API for PHP を使用してそのデータを Web 上に表示することができます。
テキストエディタを使用して、「Lesson 6」ディレクトリにある thankyou.php ページを開きます。ファイルの末尾までスクロールし、最後の HTML テーブルを探します。
テーブルの上に、回答レコードを取得するコードがあります。
$respondent_record = getRespondentRecordFromRespondentID($respondent_recid);
getRespondentRecordFromRespondentID() 関数が dbaccess.php ページ内で定義されています。そのコンテキストは、questionnaire.fmp12 データベース内の Respondent レイアウトです。
HTML テーブル内を見てみると、関連レコードのセットを取得するのに $respondent_record 変数が使用されています。それには getRelatedSet() メソッドを使用します。getRelatedSet() メソッドを使用するには、目的のポータルの関連テーブル名を指定する必要があります。また、目的のポータルが Respondent レイアウト上にある必要があります。
$response_related_set = $respondent_record->getRelatedSet('Responses');
上のコードは、ポータル Responses からのレコードを含む配列を、変数 $response_related_set に割り当てます。各回答は FileMaker_Record オブジェクトです。このコードでは、FileMaker_Record オブジェクトの getField() メソッドを使用して、HTML テーブル内にポータル行を出力します。関連フィールドを出力する際は、必ず関連テーブルの完全な名前を使用し、フィールド名を 2 つのコロンで区切ってください。
次のループは、HTML 内に関連セットを表示します。
foreach ($response_related_set as $response_related_row)
{
$question = $response_related_row->getField('Questions 2::question');
$answer = $response_related_row->getField('Responses::Response');
//converts any line returns in the answer to commas
$answer = str_replace("\n",", ",$answer);
echo '<tr><td>' .$question .'</td>';
echo '<td>' .$answer .'</td></tr>';
}
CSS (Cascading Style Sheets) を使用して Web アプリケーションを書式設定することができます。テキストエディタで「Lesson 6」フォルダにある style.css ファイルを開き、一部の HTML タグに対して定義されているスタイルを確認してください。CSS スタイルは任意の HTML タグに適用することができ、複数のページ上の複数の項目を単一の定義から書式設定することができます。
特定の HTML タグに書式設定を適用するには、タグ名を宣言する必要があります。タグ名に続けて、スタイル属性を中カッコで囲んで記述します。PHP 内と同様に、各ステートメントの末尾にはセミコロンを付けます。
body {
background-color:#333333;
padding:20px;
color:#ffffff;
font-family:Verdana, Arial, Helvetica, sans-serif;
}
CSS ファイルを作成したら、それを HTML または PHP ドキュメントに適用します。外部スタイルを適用するには、スタイルシートをドキュメントにインクルードまたはリンクする必要があります。HTML 出力のヘッダで <link> (リンク) タグを使用します。
テキストエディタを使用して、「Lesson 6」フォルダにある thankyou.php ファイルを開きます。ヘッダタグ内に、style.css の書式設定を適用するよう Web ブラウザに命令する <link> (リンク) タグが含まれています。<link> タグを使用する際は、必ず CSS ページへの正しいパスまたは href を指定してください。
<link rel="stylesheet" type="text/css" href="style.css" />
スタイルシートは複数のアプリケーションで使用することができます。また、各アプリケーションで複数のスタイルシートを使用することができます。CSS のスタイルとその属性の詳細については、「W3Schools の CSS リファレンス」を参照してください。