Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

FileMakerとPHPによるWebアンケートフォームの作成(後編)

第9回 PHPによるFileMakerのカスタムWeb公開 - (3)

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/03/07 14:00

 この連載では、システム開発において採用が増えつつある「FileMaker」というデータベースソフトウェアについて、最前線で活躍するエンジニアがリレー形式でその魅力を紹介します。第9回は3部構成で、アンケートフォームを作成しながら、FileMaker Server 9より実装された「PHPによるカスタムWeb公開機能」を解説します。後編。

目次

はじめに

 前回は、アンケートフォームの表示部分の作り方について解説しました。今回は、アンケートフォームから送信されたデータをFileMakerに登録する処理、および回答データの集計画面の作り方を解説します。

 では、アンケートフォームから送信されたデータをFileMakerに登録して、登録完了と表示させる画面を記述していきましょう。

登録処理および登録完了画面の作成

 フォームデータを登録して、完了画面を表示する上での基本的な流れは次のようになります。

  1. フォームデータから、「氏名、年代、性別」の値を、回答見出しテーブルに登録する。
  2. 質問Noと回答を、ポータルレコード追加の方法で、回答明細テーブルに登録する。
  3. 登録完了画面を表示する。2でエラーが発生した場合はエラー画面を表示する。

 ファイル構成は、上の1、2を処理する「receive.php」、登録完了画面を表示する「receive_reply.php」、エラー画面を表示する「receive_error.php」となります。

 これでファイル構成はアンケートフォーム表示部分と合わせて次のようになります。

http://serverName/FileMaker/
                  FileMaker.php
                  index.php
                  enquete.php
                  enquete_error.php
                  receive.php
                  receive_reply.php
                  receive_error.php

POSTデータの登録処理(回答見出しテーブル)

 まずは、登録処理を行う「receive.php」から記述していきます。

ソース6 receive.php - (1)
<?php

//文字コード指定
header("Content-Type: text/html;charset=utf-8");

//APIのインクルード
include_once('FileMaker.php');

//FileMakerクラスを用いてFMに接続してフォームデータを登録。
$fm = new FileMaker();
$fm->setProperty('database', 'WEBアンケート');
$fm->setProperty('hostspec', 'http://localhost');
$fm->setProperty('username', 'web');
$fm->setProperty('password', 'enquete');
//レコード登録オブジェクトを参照。 ※1
$record =& $fm->createRecord('回答詳細');
//アンケートフォームからの値をセット。
//回答見出しテーブルのデータを登録。※2
$record->setField('アンケートNo',$_POST['アンケートNo']);
$record->setField('氏名',$_POST['氏名']);
$record->setField('年代',$_POST['年代']);
$record->setField('性別',$_POST['性別']);
//登録実行 ※3
$result = $record->commit();

 文字コードの指定、FileMakerクラスのインスタンスの作成までは、前回作成したレコードの検索と一緒です。

レコード登録の場合、このcreateRecord()関数を使うか、newAddCommand()関数を利用する方法があります。違いは、createRecord()関数は、レコードクラスのオブジェクトですが、newAddCommand()関数は、コマンドクラスのオブジェクトのインスタンスを作成します。登録に際しての記述はcreateRecord()の方が簡略です。登録と同時にFileMakerのスクリプトなどを実行させたい場合は、newAddCommand()関数を利用するとよいでしょう。レコードオブジェクトはスクリプトを実行させることができません。
  1. レコード登録用のオブジェクトをcreateRecord()関数を使って作成します。引数として、登録に利用するFileMakerのレイアウト名を渡します。
  2. レコードクラスの関数setField()を使って、フィールドにフォームからの値をセットします。
  3. レコードクラスの関数commit()を使って、フィールドにセットした値を登録します。

POSTデータの登録処理(回答明細テーブル)

 次は、レコード登録後の処理と、関連データの登録処理です。

ソース6 receive.php - (2)
//ソース6からの続き。
//登録実行
$result = $record->commit();

//登録後の処理
if(FileMaker::isError($result)){
//エラー発生時の処理

    //エラーメッセージとエラーNoを取得。
    $error_mes = $result->getMessage();
    
    //エラー画面を表示。
    include_once('receive_error.php');

}else{
//登録処理成功時の処理
    
    //質問への回答データをポータルへ件数分、新規登録する。※4
    foreach($_POST['質問回答'] as $value){
        //ポータル登録オブジェクトの参照。
        $newPortalRec = $record->newRelatedRecord('回答明細'); //※5
        //ポータルのフィールドへの回答データのセット。※6
        $newPortalRec->setField('回答明細::明細No',$value['no']);
        $newPortalRec->setField('回答明細::回答',$value['value']);
        //登録処理実行 ※7
        $newPortalRec->commit();
    }
    
    //アンケート登録処理完了画面の表示。※8
    include_once('receive_reply.php');

}

?>

 isError関数で、エラー処理を行います。ここは「index.php」の記述を考え方は同じです。登録に失敗した場合は、「receive_error.php」を表示するようにしています。

Array
(
    [質問回答] => Array
        (
            [1] => Array
                (
                    [no] => 1
                    [value] => PHP(API for PHP)
                )
            [2] => Array
                (
                    [no] => 2
                    [value] => ローカルとのハイブリッド構築
                )
            [3] => Array
                (
                    [no] => 3
                    [value] => HTMLエディタ
                )
            [4] => Array
                (
                    [no] => 4
                    [value] => WEBサイト
                )
            [5] => Array
                (
                    [no] => 5
                    [value] => サポート体制
                )
    )
)
  1. 質問の回答データは配列として送信されていますので、foreach関数を利用して、送信された質問や回答を取り出して登録処理を行います。送信された質問回答の配列の形式は例えば次のような形になっています。
  2. 関連データの登録はレコードクラスのnewRelatedRecord()関数を利用します。用法はcreateRecord()関数と同じです。引数に関連テーブルの名称を渡します。
  3. 回答明細テーブルの明細Noフィールドと回答フィールドに配列から展開した値をセットします。
  4. 登録内容を保存します。
  5. 登録が完了したら、アンケート登録完了画面を表示させます。

登録完了画面の表示

 次に、完了画面とエラー画面のソースです。

ソース7 receive_reply.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?=$record->getField('アンケート見出し::WEBタイトル')?></title>
</head>

<body>
<h1><?=$record->getField('アンケート見出し::WEBタイトル')?></h1>
<p>アンケートを受け付けました。<br />
ご協力ありがとうございました。
</p>
<a href="index.php">アンケートフォームに戻る</a>
</body>
</html>

 ここでは簡単に、登録したレコードのタイトルと、登録完了のメッセージを表示させています。

図23 登録完了画面
図23 登録完了画面

登録エラー画面の作成

 PHPファイルの最後は、登録に失敗したときのエラー画面です。

ソース7 receive_error.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>WEBアンケート</title>
</head>

<body>
<h1>登録エラー</h1>
<p>登録時にエラーが発生しました。再度登録をお願いいたします。
(<?=$error_mes?>)</p>
<a href="index.php">アンケートフォームに戻る</a>
</body>
</html>

 エラーメッセージと発生したエラーの内容を表示しています。

図24 アンケート登録エラー画面
図24 アンケート登録エラー画面

 以上でWebページのコーディングは終了です。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 堀 直樹(ホリ ナオキ)

    大学卒業後入社の企業にて、趣味のFileMaker使いからなりゆきで社内のシステム担当となり社内システムの開発に孤軍奮闘する。その後ソフトハウスに転職してFileMakerによるシステム開発に従事し、現在は株式会社キクミミにて数々の企業のシステムを開発する。PHPによるカスタムWebでのシステム構築...

バックナンバー

連載:FileMaker Pro 実践チュートリアル

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5