Windows Server 2008 を弊社にもインストールしてみました。対象サーバ機は Dell PowerEdge SC440 です。
インストール自体はものの 30 分もあればできたのですが、最初の Administrator パスワード指定でちょっと手こずりました。Windows Server 2008 では、ローカルセキュリティポリシーの「パスワードは複雑さの要件を満たす必要がある」が有効に設定されているため、以下の条件を満たすようにパスワードを決定する必要があります。そしてようやくログインに成功。
ユーザーのアカウント名またはフルネームに含まれる 3 文字以上連続する文字列を使用しない。
長さは 6 文字以上にする。
以下の 4 つのうち 3 つの条件を満たす必要あり。
英大文字(A ~ Z)
英小文字(a ~ z)
10進数の数字(0~9)
アルファベット以外の文字(!、$、#、%など)
次にリモートデスクトップ接続を有効にするための機能を設定しました。ターミナルサーバーのインストールですが、サーバマネージャの「役割」というメニュー項目から追加します。
今回はターミナルサーバー、TS ライセンス、TS Web アクセスをインストールしました。
さて設定ですが、ちょっと勉強が必要になってしまいました。
RDP --- Terminal Service もしくはリモートデスクトップ接続を従来のように使えるようにするが、セキュリティレベルは落ちる。
ネゴシエート --- クライアント側で SSL が有効になっている場合は SSL を使って接続するが、有効になっていない場合には RDP を使う。
SSL(TLS 1.0) --- 常に SSL を使って接続する。
ネゴシエートにしておけば、従来の TS/リモートデスクトップ接続と Windows Server 2008/Vista 対応の TS/リモートデスクトップ共有を混在させることができる模様です。ただ、SSL に特化すればおそらくセキュリティが一番高くなるのでこれができることに越したことはないと思います。
SSL を使えるようにするには、TS/リモートデスクトップ接続のクライアント側がリモートデスクトッププロトコル 6.1 をサポートしている必要があります。この条件を満たすクライアントは次のとおりです。
Windows Server 2008
Windows Vista with Service Pack 1
Windows XP with Service Pack 3
ただし、XP with Service Pack 3 の場合は、ネットワークレベル認証がサポートされていないため、ターミナルサーバ構成で「ネットワークレベル認証でリモートデスクトップを実行しているコンピュータからのみ接続を許可する」のチェックを外しておく必要があります。
2008-07-28
2008-07-18
カラーレーザープリンタの奇怪
かれこれ5、6年前に約2万円で購入し、八面六臂の活躍をしたBJ S600 がそろそろポシャりそうなので、価格に手頃感がでてきたカラーレーザープリンタを購入しようかなと思い、調べて見ました。 すると、なんか奇奇怪怪な世界。
というのは、Brother MFC-9420cnという機種の本体(カラー3色と黒1色の計4本のトナー付、以下、トナー4本、と言う)の価格が、トナー4本より安い。 よくよく説明を見ると、購入時付属のトナーはスターターうんたらという減量されたものらしい。 「これじゃ、客はわかんないよ」と思いつつ、他のメーカーの低価格機も価格.comで調べてみると、トナー4本(6000枚程度印刷)で本体の半分~全額ちょっと欠ける位の価格になってしまう。 さらに、トナー以外の消耗品として、ドラムとか感光体うんたらとか、メンテナンスキットとか、うんたらベルトとか、メーカー毎に異なる様々なものがあり、しかも耐久期間もまちまち。 確かに公称のページ当たりの印刷コスト項目はあるのだけれども、これにドラムやらその他の消耗品の価格が反映されているのだろうかと不安になってくる。 で、当初どれが一番お買い得なのか?と思って作ったプリンタ比較表も、なんかあまり役に立ちそうもないような気がしてくる(この表に興味のある方は→これ)。 本体に対してトナーの価格が高く、奇怪な消耗品が数々あると迷路に入り込んだ気分。 トナーだけ買い換えて、ドラムやその他の高い消耗品の購入を迫られる段になったら、(エコは差し置いて)新機種に買い換えるのが一番経済的なような気もしてくる。 そもそも「レーザープリンタはインクジェットよりランニングコストが低い」と巷に言われる大前提も疑わしく思えて…
どうしようかなぁ?と迷っているところに、目に飛び込んできたのが、HP Officejet Pro K8600dn というインクジェット機。 Web記事によると、A4カラー1枚の印刷コストが6.3円、カラー印刷時35枚/分の高速、その他のスペックを比較してみても、レーザープリンタに勝るとも劣らない。 レーザープリンタと違って、よくわからない消耗品もない、少なくとも書いてはいない。
HP Officejet Pro K8600dn
ということで、K8600dnを購入することになりました。 吉と出るか、凶と出るかお楽しみ。
(土屋)
というのは、Brother MFC-9420cnという機種の本体(カラー3色と黒1色の計4本のトナー付、以下、トナー4本、と言う)の価格が、トナー4本より安い。 よくよく説明を見ると、購入時付属のトナーはスターターうんたらという減量されたものらしい。 「これじゃ、客はわかんないよ」と思いつつ、他のメーカーの低価格機も価格.comで調べてみると、トナー4本(6000枚程度印刷)で本体の半分~全額ちょっと欠ける位の価格になってしまう。 さらに、トナー以外の消耗品として、ドラムとか感光体うんたらとか、メンテナンスキットとか、うんたらベルトとか、メーカー毎に異なる様々なものがあり、しかも耐久期間もまちまち。 確かに公称のページ当たりの印刷コスト項目はあるのだけれども、これにドラムやらその他の消耗品の価格が反映されているのだろうかと不安になってくる。 で、当初どれが一番お買い得なのか?と思って作ったプリンタ比較表も、なんかあまり役に立ちそうもないような気がしてくる(この表に興味のある方は→これ)。 本体に対してトナーの価格が高く、奇怪な消耗品が数々あると迷路に入り込んだ気分。 トナーだけ買い換えて、ドラムやその他の高い消耗品の購入を迫られる段になったら、(エコは差し置いて)新機種に買い換えるのが一番経済的なような気もしてくる。 そもそも「レーザープリンタはインクジェットよりランニングコストが低い」と巷に言われる大前提も疑わしく思えて…
どうしようかなぁ?と迷っているところに、目に飛び込んできたのが、HP Officejet Pro K8600dn というインクジェット機。 Web記事によると、A4カラー1枚の印刷コストが6.3円、カラー印刷時35枚/分の高速、その他のスペックを比較してみても、レーザープリンタに勝るとも劣らない。 レーザープリンタと違って、よくわからない消耗品もない、少なくとも書いてはいない。
HP Officejet Pro K8600dn
ということで、K8600dnを購入することになりました。 吉と出るか、凶と出るかお楽しみ。
(土屋)
2008-07-11
【応用その4】FX.php を使ってアンケートフォームを MySQL 対応にしてみる
サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)
*FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。
FX.php は MySQL データベースへの接続にも対応しているため、アンケートフォーム作成の延長として、今回は既存のコードに MySQL データベースへのデータ書込機能を実装してみることにします。
* 操作にあたっては、MySQL Server がインストールされていることが前提となりますので、予め MySQL Server のインストールと、文字化け対策のためにデフォルト文字セット(utf8)が有効になるように設定しておいてください。
まずは、データベースを準備します。付属の create_table.php の $rootPass に MySQL の root パスワードを設定して同スクリプトを保存し、local の web サーバで実行してみてください。Comment データベース、cgi テーブル、webuser とそのパスワードが生成されます。作成するテーブル列は、create_table.php を参照してください。
以下、次の順に Comment.php へコードを追加していきます。
1.使用するデータベース種別を MySQL にします。
2.接続先の MySQL サーバポート番号を指定します。デフォルトは 3306 です。
3. あとは既存の FX.php 接続とほぼ同じですが、最後のデータ書き込みのところで、FMNew() の代わりに PerformSQLQuery() 関数を使います。引数は第一パラメータに SQL クエリ文を指定し、残りはデフォルト値を指定します。
PerformSQLQuery($query,true,false,'object');
この部分をコードで表したものが次のとおりです。(列名)と値を使って $query SQL クエリ文をセットし、次の PerformSQLQuery で指定して実行します。
FX.php & MySQL の組み合わせで実行可能になっているコードを Comment_mysql.php に用意してありますので、併せて確認してみてください。
参考リンク:
MySQL オフィシャルサイト
*FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。
FX.php は MySQL データベースへの接続にも対応しているため、アンケートフォーム作成の延長として、今回は既存のコードに MySQL データベースへのデータ書込機能を実装してみることにします。
* 操作にあたっては、MySQL Server がインストールされていることが前提となりますので、予め MySQL Server のインストールと、文字化け対策のためにデフォルト文字セット(utf8)が有効になるように設定しておいてください。
まずは、データベースを準備します。付属の create_table.php の $rootPass に MySQL の root パスワードを設定して同スクリプトを保存し、local の web サーバで実行してみてください。Comment データベース、cgi テーブル、webuser とそのパスワードが生成されます。作成するテーブル列は、create_table.php を参照してください。
以下、次の順に Comment.php へコードを追加していきます。
1.使用するデータベース種別を MySQL にします。
2.接続先の MySQL サーバポート番号を指定します。デフォルトは 3306 です。
3. あとは既存の FX.php 接続とほぼ同じですが、最後のデータ書き込みのところで、FMNew() の代わりに PerformSQLQuery() 関数を使います。引数は第一パラメータに SQL クエリ文を指定し、残りはデフォルト値を指定します。
PerformSQLQuery($query,true,false,'object');
この部分をコードで表したものが次のとおりです。(列名)と値を使って $query SQL クエリ文をセットし、次の PerformSQLQuery で指定して実行します。
FX.php & MySQL の組み合わせで実行可能になっているコードを Comment_mysql.php に用意してありますので、併せて確認してみてください。
参考リンク:
MySQL オフィシャルサイト
2008-07-09
【応用その3】アンケートフォームにセッションを追加してみる(リロード対策)
サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)
*FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。
PHP 経由で FileMaker データベースにデータ書込を行う手法として、簡易アンケートフォームの作り方をベースに説明を進めてきました。
すでにお気付きの方もいらっしゃるとは思いますが、実はこのままでは実際の運用には不向きな部分があります。
それは、最後のお礼ページです。
このページが表示される直前に FileMaker データベースへのデータ書込とメール送信を同時に行うわけですが、Web ブラウザのリロードボタンを押してページをロードするたびに同処理が実行されてしまうため、ゴミデータとゴミメールが増えてしまう可能性があります。
実際問題として、お礼のページをリロードしてしまうユーザも結構多かったりするので、リロード操作が行われてもデータ送信、メール送信は一回だけ実行するような仕組みが必要となります。
これを効率よく処理する方法として、PHP のセッションをここで組み込んでみることにします。
PHP のセッションはスーパーグローバル配列と呼ばれ、読み込まれたページにかかわらず値を保持しておくことができるものです。FileMaker のグローバル変数に共通している部分もあるので、そう捉えると理解しやすいと思います。
ユーザによるページリロード対策は、データ書込とメール送信が行われたかどうかを判断し、それが No なら書込・メール送信を許可、Yes なら不可にすればよいわけです。これをフラグを使って表現するとさらに明確になります。仮にフラグ名 を done フラグとしましょう。
未書込の状態 --- done フラグはオフ (FALSE、偽)
書込済の状態 --- done フラグはオン (TRUE、真)
done フラグがオフ(FALSE)のときに書き込みを実行し、その操作が終わったら done フラグをオン(TRUE) にします。
この値をセッションに入れておくことで、ページが何度リロードされても呼び出しはセッションから行うため、一度オンになったフラグはオフになることはありません。
この処理を PHP で記述すると次のようになります。
1. セッションの開始と有効期限を決めます。
セッションの有効期限のデフォルトは 180 分ですが、簡易アンケートで特に詳細な確認が必要なわけではないため、ここでは有効期限を 5 分にしています。5 分経過するとセッションは破棄されて無効となり、その後にページをリロードすると、白紙のページが表示されるようになります。
session_start() 関数でセッションを開始するわけですが、この関数は、セッションが存在しない場合は、新たにセッションを作成します。これに対し、セッションがすでに存在している場合はそのセッションを再度呼び出します。つまり、このアンケートフォームで言えば、最初にアンケート入力フォームのロードを行った時点でセッションの作成を行い、それ以降、ページがロードされたり次のステップに進むたびに session_start() 関数から同一のセッションを呼び出すわけです。
2. 次に、done フラグの初期化を行います。
初回ページロード時に一度だけ done フラグに FALSE (データベースへの書込とメール送信が行われていない状態)をセットします。
3. お礼のページを出すときに、done フラグが FALSE であることを確認し、それに該当すれば FileMaker データベースへのデータ書込とメール送信を行い、その後に done フラグに TRUE (データベースへの書込とメール送信が完了した状態)をセットします。
以下、赤線を引いた部分に注目してください(コードが長いため、中略を入れてあります)。
これでセッションの実装が終わりました。サンプルコードを使って動作を確認してみてください。
*FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。
PHP 経由で FileMaker データベースにデータ書込を行う手法として、簡易アンケートフォームの作り方をベースに説明を進めてきました。
すでにお気付きの方もいらっしゃるとは思いますが、実はこのままでは実際の運用には不向きな部分があります。
それは、最後のお礼ページです。
このページが表示される直前に FileMaker データベースへのデータ書込とメール送信を同時に行うわけですが、Web ブラウザのリロードボタンを押してページをロードするたびに同処理が実行されてしまうため、ゴミデータとゴミメールが増えてしまう可能性があります。
実際問題として、お礼のページをリロードしてしまうユーザも結構多かったりするので、リロード操作が行われてもデータ送信、メール送信は一回だけ実行するような仕組みが必要となります。
これを効率よく処理する方法として、PHP のセッションをここで組み込んでみることにします。
PHP のセッションはスーパーグローバル配列と呼ばれ、読み込まれたページにかかわらず値を保持しておくことができるものです。FileMaker のグローバル変数に共通している部分もあるので、そう捉えると理解しやすいと思います。
ユーザによるページリロード対策は、データ書込とメール送信が行われたかどうかを判断し、それが No なら書込・メール送信を許可、Yes なら不可にすればよいわけです。これをフラグを使って表現するとさらに明確になります。仮にフラグ名 を done フラグとしましょう。
未書込の状態 --- done フラグはオフ (FALSE、偽)
書込済の状態 --- done フラグはオン (TRUE、真)
done フラグがオフ(FALSE)のときに書き込みを実行し、その操作が終わったら done フラグをオン(TRUE) にします。
この値をセッションに入れておくことで、ページが何度リロードされても呼び出しはセッションから行うため、一度オンになったフラグはオフになることはありません。
この処理を PHP で記述すると次のようになります。
1. セッションの開始と有効期限を決めます。
セッションの有効期限のデフォルトは 180 分ですが、簡易アンケートで特に詳細な確認が必要なわけではないため、ここでは有効期限を 5 分にしています。5 分経過するとセッションは破棄されて無効となり、その後にページをリロードすると、白紙のページが表示されるようになります。
session_start() 関数でセッションを開始するわけですが、この関数は、セッションが存在しない場合は、新たにセッションを作成します。これに対し、セッションがすでに存在している場合はそのセッションを再度呼び出します。つまり、このアンケートフォームで言えば、最初にアンケート入力フォームのロードを行った時点でセッションの作成を行い、それ以降、ページがロードされたり次のステップに進むたびに session_start() 関数から同一のセッションを呼び出すわけです。
2. 次に、done フラグの初期化を行います。
初回ページロード時に一度だけ done フラグに FALSE (データベースへの書込とメール送信が行われていない状態)をセットします。
3. お礼のページを出すときに、done フラグが FALSE であることを確認し、それに該当すれば FileMaker データベースへのデータ書込とメール送信を行い、その後に done フラグに TRUE (データベースへの書込とメール送信が完了した状態)をセットします。
以下、赤線を引いた部分に注目してください(コードが長いため、中略を入れてあります)。
これでセッションの実装が終わりました。サンプルコードを使って動作を確認してみてください。
2008-07-08
SonicWall Total Securityによる回線速度低下
SonicWall Total Security(以下、SonicWall)を導入し、セキュリティ関連の設定をした後に、回線速度のチェックをすると、導入前に比べて回線速度が低下していることに愕然とするかもしれません。しかし、外部から渡ってきたパケットの精査が SonicWall の機能であり、その精査に費やされる処理時間のことを考慮すれば、回線速度が低下するのは当然と言えば当然なのでしょう。
以下、SonicWall のセキュリティ機能で、速度低下が著しいものとそうでないものを調べてみました。
もちろん、セキュリティ対策としてできるだけ多くのサービスを有効にしておくのが望ましいと思いますが、社内で利用しているネットワークサービスが使用に耐えられなくなるほど回線速度が落ちてしまうのでは、あまり実用的ではないでしょう。
社内のネットワーク運用に最も適したサービス設定を行い、セキュリティをどうしても向上させる必要があるのなら、回線そのものの品質をアップグレードさせるのが現実的な運用方法と言えるかもしれません。
以下、SonicWall のセキュリティ機能で、速度低下が著しいものとそうでないものを調べてみました。
- 導入すると極端に速度が落ちるもの
アンチスパイウェア
侵入防御 (IPS) - 若干速度が落ちるもの
電子メールフィルタ
ゲートウェイ アンチウィルス - さほど速度が低下しないもの
コンテンツフィルタ
もちろん、セキュリティ対策としてできるだけ多くのサービスを有効にしておくのが望ましいと思いますが、社内で利用しているネットワークサービスが使用に耐えられなくなるほど回線速度が落ちてしまうのでは、あまり実用的ではないでしょう。
社内のネットワーク運用に最も適したサービス設定を行い、セキュリティをどうしても向上させる必要があるのなら、回線そのものの品質をアップグレードさせるのが現実的な運用方法と言えるかもしれません。
2008-07-04
SonicWall Global VPN Client のインストールが失敗したり、クラッシュしてしまうときのちょっとした改善案
SonicWall には仮想プライベートネットワーク機能(VPN: Virtual Private Network, 以降 VPN)が搭載されているので、SonicWall を購入して VPN ライセンスを購入することによって、VPN 公開ができるようになります。
この SonicWall VPN にアクセスするためには、クライアントとなるコンピュータに SonicWall Global VPN Client (以降 SWGVC)をインストールと接続設定を行う必要があります。
インストーラを実行して指示に従えば終わりというパターンが通常で、アプリケーションを使うほとんどのユーザがそのような感覚でインストーラを実行していると思います。
しかし、最近の FileMaker Server 9 のインストールトラブルのように、物によってはスムーズにインストールできないものもあるので、すぐできて当然という安易な姿勢で臨むと泣きを見る羽目になることもあったりします。
SWGVC もなかなか癖のあるソフトウェアと言え、マシン環境によってはすんなりインストールできたり、インストール初っ端から躓いたり、設定の段階で躓いたりと結構トラブルに見舞われため、ここでその経験談をまとめてみることにします。
この SonicWall VPN にアクセスするためには、クライアントとなるコンピュータに SonicWall Global VPN Client (以降 SWGVC)をインストールと接続設定を行う必要があります。
インストーラを実行して指示に従えば終わりというパターンが通常で、アプリケーションを使うほとんどのユーザがそのような感覚でインストーラを実行していると思います。
しかし、最近の FileMaker Server 9 のインストールトラブルのように、物によってはスムーズにインストールできないものもあるので、すぐできて当然という安易な姿勢で臨むと泣きを見る羽目になることもあったりします。
SWGVC もなかなか癖のあるソフトウェアと言え、マシン環境によってはすんなりインストールできたり、インストール初っ端から躓いたり、設定の段階で躓いたりと結構トラブルに見舞われため、ここでその経験談をまとめてみることにします。
- 最初のインストールで躓くとき
SWGVC をインストールした直後に起動しようとすると、SWGVC のレジストリ登録に失敗したというメッセージが出て失敗することがあります。こうなると、起動は絶対にできないので、一度 SWGVC をアンインストールし、さらにレジストリ情報を消去するプログラム SWVPNClientClean.exe を実行してから完全にインストール情報を消去した上で、SWGVC を再インストールする必要があります。 - SonicWall にアクセスできないとき
ピア IP アドレス(SonicWall の IP アドレス)を正しく設定し、接続ユーザ名とパスワードを正しく指定したにもかかわらず、ステータスが接続中だったり、IP アドレス取得中のままになってしまうことがあります。ログを見ると、"The peer is not responding to phase 1 ISAKMP requests." が残っていることがあります。
この場合は、SWGVC の Peers タブより、LAN Settings にクライアントネットワーク側のルータ IP アドレスを入力したり、NAT Traversal を 「Disabled」、Interface Selection を「LAN Only」に変更することによって改善することがあります。
参考リンク:
SonicWall VPN Client Doesn't Work Behind NAT Firewall(英文)
Sonicwall - The peer is not responding to phase 1 ISAKMP requests(英文)
NAT Firewall on router blocking sonicwall VPN?(英文)
NAT Firewall on router blocking sonicwall VPN...(英文) - 接続が確立された直後に SWGVC がクラッシュするとき
これが一番厄介だと思います。今のところ Windows XP Service Pack 2 で発生する可能性が高いことは経験からわかってきたのですが、すべての同様の環境で発生するとも言い切れず、このような現象が発生するコンピュータでは、SWGVC のインストール、アンインストールを繰り返したところで症状が改善することはまずないでしょう。
しかし先日、客先でどうしてもこのような現象が発生する SWGVC を動かす必要があり、苦し紛れですが Windows 互換モードで実行することにより事なきを得ました。以下、方法を簡単に説明します。
1) 今までどおり SWGVC を実行させてVPN 接続を行い、Connected が出た直後に SWGVC がクラッシュすることを確認します。
2) SWGVC のプログラムアイコンを右クリックして「プロパティ」を選択し、表示されるダイアログより「互換性」タブをクリックします。そこで「互換モードで実行する」にチェックを付けて、以前の OS のリストの中からできるだけ最新のものを選択して実行してみます。
この方法で、今のところ Windows 98/Windows ME の互換モードで実行に成功しています。今までいろいろ試してみたが、クラッシュしてどうにもならないという方はダメ元で試してみる価値はあると思います。
ラベル:
Global VPN Client (GVC),
SonicWALL,
VPN
【応用その2】FX.php を使ったアンケートフォーム作成 --- 従来のファイルメーカー Pro データベースで Web アプリケーション作成
サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)
*FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。
さて前回の FX.php 解説に引き続き、今回は FX.php を使って従来の FileMaker データベースにアクセスする方法について触れてみることにします。今回もまた、今まで使ってきたアンケートフォームにちょっと修正を入れるだけです。アンケートフォーム作成のおさらいが必要な方は、こちらを先にご覧ください。
FileMaker API for PHP を利用するためには、FileMaker Pro 9 と FileMaker Server 9 がインストールされていることが条件となるため、従来に比べるとコスト的に敷居が高くなってきています。安定したデータサーバ運用を目指すのなら、もちろんこれらを導入するのが確実ですが、FileMaker Pro 5.x/6 で機能的に十分に満足している方には、ちょっと手が出にくいパッケージであることも確かでしょう。
そこで、FX.php と FileMaker Pro 5.x/6 の Web コンパニオンプラグインを組み合わせてもデータベースへの書き込みを実現できるため、既存のシステムをそのまま Web 公開データベースとして活かすことも可能となります。
ただし、通常版は 10 アクセスユーザ数(10 IP アドレス)という制限が伴うため、現実的な運用にあたっては FileMaker Pro 5.x/6 Unlimited が必要になることは注記しておきたいと思います。
それでは実際に既存のサンプルコードを修正していくことにしましょう。
処理は前回の FX.php 接続とほぼ同じですが、今回はそれに加え、文字コードの変換が必要となります。
FileMaker Pro 9 では内部コードを UTF-8 で処理しているため、ソースが UTF-8 で記述されていれば問題はなかったのですが、FileMaker Pro 5.x/6 では内部コードを Shift-JIS で扱うため、このままデータを送るとエラーが起こったり、文字化けが発生してしまいます。
そこで、今までの処理に文字コード処理を追加します。
上記を FX.php の記述規則に従って置き換えると、次のようになります。
赤線を引いた部分と、赤で囲った部分が前回と異なってはいますが、その他はすべて同じです。
指定の通り、FX インスタンス作成時に、使用するデータソース(データベース)が FileMaker Pro5.x/6 であることを知らせます。
そして、データ送信前に文字コードセットを UTF-8 から Shift-JIS(SJIS) に置き換えます。
ただし、FMP7/8/8.5/9 に対してこの文字コード変換を行うとデータ書き込みに失敗してしまうため、必要に応じて、データソースが FMPro5/6 のときだけ文字コード変換を行うという条件を追加する必要があります。
この条件を追加するとこのようになります。
変数 $databaseType には、コードの最初の方で予め "FMPro9" もしくは "FMPro5/6" のいずれかを設定しておきます。こうしておくことによって、使用するデータソースに応じて処理を切り替えられるので便利です。
ソースの詳細は、サンプルコードをご覧になってみてください。
先に PHP ソースについて解説しましたが、最後に FileMaker Pro 5.x/6 データベースファイルの作成と設定方法について説明します。
1. データベースファイルを作成します。FileMaker Pro 5.x/6 を起動し、Comment.fp5 というファイルを作成し、以下のフィールドを作成します。
[RecID]、[作成日]、[作成アカウント]、[修正日]、[修正アカウント]は管理用のフィールドですが、作成しておくと便利でしょう。
2. レイアウト名を cgi に変更します。
3. 「アプリケーション環境設定」ダイアログを出し、プラグイン一覧より、Web コンパニオンにチェックを付けて「設定」ダイアログを開きます。
セキュリティに「ファイルメーカー Pro アクセス権」を指定し、TCP/IP ポート番号に 80、もしくは 591 を指定します。
4. ファイルの共有設定で、以下のようにチェックを付けることによって Web コンパニオンを公開します。
5. パスワードを指定します。図のように、web というパスワードを作成し、web で公開させる最低限のアクセス権を決めます。
この他にフルアクセスを許可するパスワードが必要となりますので、ここでは Admin を作成してあります。
以上で準備が整いました。
FMPro5/6 用の設定を施した comment_fp5.php というファイルをサンプルに用意してありますので、参照してみてください。
参考: FX.php vs FileMaker API Benchmarks Discussion(英文)
*FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。
さて前回の FX.php 解説に引き続き、今回は FX.php を使って従来の FileMaker データベースにアクセスする方法について触れてみることにします。今回もまた、今まで使ってきたアンケートフォームにちょっと修正を入れるだけです。アンケートフォーム作成のおさらいが必要な方は、こちらを先にご覧ください。
FileMaker API for PHP を利用するためには、FileMaker Pro 9 と FileMaker Server 9 がインストールされていることが条件となるため、従来に比べるとコスト的に敷居が高くなってきています。安定したデータサーバ運用を目指すのなら、もちろんこれらを導入するのが確実ですが、FileMaker Pro 5.x/6 で機能的に十分に満足している方には、ちょっと手が出にくいパッケージであることも確かでしょう。
そこで、FX.php と FileMaker Pro 5.x/6 の Web コンパニオンプラグインを組み合わせてもデータベースへの書き込みを実現できるため、既存のシステムをそのまま Web 公開データベースとして活かすことも可能となります。
ただし、通常版は 10 アクセスユーザ数(10 IP アドレス)という制限が伴うため、現実的な運用にあたっては FileMaker Pro 5.x/6 Unlimited が必要になることは注記しておきたいと思います。
それでは実際に既存のサンプルコードを修正していくことにしましょう。
処理は前回の FX.php 接続とほぼ同じですが、今回はそれに加え、文字コードの変換が必要となります。
FileMaker Pro 9 では内部コードを UTF-8 で処理しているため、ソースが UTF-8 で記述されていれば問題はなかったのですが、FileMaker Pro 5.x/6 では内部コードを Shift-JIS で扱うため、このままデータを送るとエラーが起こったり、文字化けが発生してしまいます。
そこで、今までの処理に文字コード処理を追加します。
- FX を使用することを宣言する(FX インスタンスを作成する)。
- 使用するデータベース名とレイアウト名を指定する。
- 使用するユーザ名とパスワードを指定する。
- データ送信時の文字コードを Shift-JIS に変換する。
- 追加するフィールドと、そのデータを指定する。
- レコード追加を実行する。
上記を FX.php の記述規則に従って置き換えると、次のようになります。
赤線を引いた部分と、赤で囲った部分が前回と異なってはいますが、その他はすべて同じです。
指定の通り、FX インスタンス作成時に、使用するデータソース(データベース)が FileMaker Pro5.x/6 であることを知らせます。
そして、データ送信前に文字コードセットを UTF-8 から Shift-JIS(SJIS) に置き換えます。
ただし、FMP7/8/8.5/9 に対してこの文字コード変換を行うとデータ書き込みに失敗してしまうため、必要に応じて、データソースが FMPro5/6 のときだけ文字コード変換を行うという条件を追加する必要があります。
この条件を追加するとこのようになります。
変数 $databaseType には、コードの最初の方で予め "FMPro9" もしくは "FMPro5/6" のいずれかを設定しておきます。こうしておくことによって、使用するデータソースに応じて処理を切り替えられるので便利です。
ソースの詳細は、サンプルコードをご覧になってみてください。
先に PHP ソースについて解説しましたが、最後に FileMaker Pro 5.x/6 データベースファイルの作成と設定方法について説明します。
1. データベースファイルを作成します。FileMaker Pro 5.x/6 を起動し、Comment.fp5 というファイルを作成し、以下のフィールドを作成します。
[RecID]、[作成日]、[作成アカウント]、[修正日]、[修正アカウント]は管理用のフィールドですが、作成しておくと便利でしょう。
2. レイアウト名を cgi に変更します。
3. 「アプリケーション環境設定」ダイアログを出し、プラグイン一覧より、Web コンパニオンにチェックを付けて「設定」ダイアログを開きます。
セキュリティに「ファイルメーカー Pro アクセス権」を指定し、TCP/IP ポート番号に 80、もしくは 591 を指定します。
4. ファイルの共有設定で、以下のようにチェックを付けることによって Web コンパニオンを公開します。
5. パスワードを指定します。図のように、web というパスワードを作成し、web で公開させる最低限のアクセス権を決めます。
この他にフルアクセスを許可するパスワードが必要となりますので、ここでは Admin を作成してあります。
以上で準備が整いました。
FMPro5/6 用の設定を施した comment_fp5.php というファイルをサンプルに用意してありますので、参照してみてください。
参考: FX.php vs FileMaker API Benchmarks Discussion(英文)
2008-07-03
【応用その1】FX.php を使ったアンケートフォーム作成
本記事は2008年に FileMaker 9 の環境下で執筆されました。2016年11月現在、FileMaker の最新バージョンは 15 となっていますが、15 においても本記事の内容はなお有効と思われます。
一方Ver 15 では WebDirect と呼ばれる 機能があり、これにより PHP などで Webプログラミングを行うことなく、 FileMaker デスクトップアプリとほぼ同様の操作がブラウザ上でも可能となります。WebDirect は開発が非常に楽になる半面、ライセンス費用やブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し、ブラウザ互換性をある程度無視できる環境では WebDirect は FX.php の代替となる可能性があります。
参考: アンケートシステム・プロトタイプ
一方Ver 15 では WebDirect と呼ばれる 機能があり、これにより PHP などで Webプログラミングを行うことなく、 FileMaker デスクトップアプリとほぼ同様の操作がブラウザ上でも可能となります。WebDirect は開発が非常に楽になる半面、ライセンス費用やブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し、ブラウザ互換性をある程度無視できる環境では WebDirect は FX.php の代替となる可能性があります。
参考: アンケートシステム・プロトタイプ
*FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。
さて、前回まで 4 回にわたって FileMaker API for PHP によるアンケートフォームの作成方法を解説してきましたが、今回はさらに FX.php による FileMaker データベースアクセス機能も実装してみることにします。
FX.php はiViking.org によって無償で提供されている FileMaker アクセスクラス群で、FileMaker Pro 5~ 9 に幅広く対応しているため、FileMaker API for PHP が実現できない環境のユーザでも FX.php を使うことによって php からのアクセスが可能となります。
インストール方法も簡単で、ダウンロードして解凍した FX フォルダを Web サーバの適当な場所に配置するだけです。
それでは実際にやってみましょう。
Comment.fp7 を開き、「アカウントとアクセス権の管理」ダイアログを出し、そこからすでに登録済の Webuser を選択して「アクセス権セット...」を選択して以下のダイアログを開きます。
FX.php は xml によるデータアクセスを行いますので、反転部分のように、「XML Web 公開でのアクセス- FMS のみ(fmxml)」にチェックを付けて保存します。
これで FileMaker の FX.php 向け Web 公開の準備が整いました。
さて、次は FX.php 向けのコードを追加していきます。
まずは、コードの最初の方で FX.php をロードします。今ある Comment.php から FX.php が辿れるように設定してください。
require_once '../../FX/FX.php';
そしていつものように、日本語で手順を考えてみます。
- FX を使用することを宣言する(FX インスタンスを作成する)。
- 使用するデータベース名とレイアウト名を指定する。
- 使用するユーザ名とパスワードを指定する。
- 追加するフィールドと、そのデータを指定する。
- レコード追加を実行する。
こうして見てみると、前回のデータベース書込手順とほとんど変わらないことがわかりますね。
あとは上記の内容を FX.php 向けに書き換えていくだけです。
一行目のデータベース接続にサーバ名、ポート番号、データソース名(FMpro9)を明示的に指定する必要がありますが、その他メソッド名に差異はあるものの、前回の FileMaker API for PHP のコードとさほど形式が変わらないことがおわかりいただけるでしょう。
サンプルコードの方に FX.php と FileMaker API for PHP の切り替え操作も盛り込んでありますので、併せて確認してみてください。
※サンプルコード
サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)
2008-07-02
FileMaker API for PHP を使ったアンケートフォーム作成 (4/4)
本記事は2008年に FileMaker 9 の環境下で執筆されました。2016年11月現在、FileMaker の最新バージョンは 15 となっていますが、15 においても本記事の内容はなお有効と思われます。
一方Ver 15 では WebDirect と呼ばれる 機能があり、これにより PHP などで Webプログラミングを行うことなく、 FileMaker デスクトップアプリとほぼ同様の操作がブラウザ上でも可能となります。WebDirect は開発が非常に楽になる半面、ライセンス費用やブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し、ブラウザ互換性をある程度無視できる環境では WebDirect は FileMaker API for PHP の代替となる可能性があります。
参考: アンケートシステム・プロトタイプ
一方Ver 15 では WebDirect と呼ばれる 機能があり、これにより PHP などで Webプログラミングを行うことなく、 FileMaker デスクトップアプリとほぼ同様の操作がブラウザ上でも可能となります。WebDirect は開発が非常に楽になる半面、ライセンス費用やブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し、ブラウザ互換性をある程度無視できる環境では WebDirect は FileMaker API for PHP の代替となる可能性があります。
参考: アンケートシステム・プロトタイプ
ブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し。ブラウザ互換性をある程度無視できる環境では WebDirect は FileMaker API for PHP の代替となる可能性があります。
サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)
さて、今回がアンケートフォーム作成の最終回となります。
ステップ 1 から渡ってきたユーザ入力データをここでデータベースに登録し、続いてその内容をメール送信します。
コードの記述に入る前に、FileMaker データベースを用意する必要があります。
以下の手順に従ってください。
1. FileMaker Pro 9 よりComment.fp7 という名前のファイルを新規作成します。
2. 以下の図を参考にしながらフィールドを作成します。
アンケート入力ページで実際に使用するのは、[氏名]、[email]、[回答]、[その他回答]、[意見など]の5 つだけですが、残りのフィールドはデータベースを管理する際に作っておくと便利ですので、最初の段階で用意しておきます。
3. 「アカウントとアクセス権」ダイアログを開き、webuser というユーザを追加します。
パスワードを入力(サンプルデータベースでは web となっています)し、[アクセス権セット]では、「新規アクセス権セット...」を選択します。以下のように入力していきます。
ここで最も重要なのは、ダイアログの一番下に表示されている[PHP Web 公開でのアクセス - FMS のみ (fmphp)]にチェックが付いていることです。これによって、FileMaker Server 9 への PHP によるアクセスを有効にします。
また、[レコード]の欄で「カスタムアクセス権...」を選択することによって、レコードへのアクセス範囲を設定することもできます(任意)。
4. デフォルトのレイアウト名が Comment になっていますので、cgi に変更します。
5. ここまで終わったら、このデータベースファイルを FMS9 の Databases フォルダに入れて公開します。
これでデータベースの準備が整いましたので、今度はアンケート入力の PHP コードの方に Comment データベース書き込みの処理を追加していきます。
まずは、コードの最初の方で FileMaker.php をロードします。
require_once 'FileMaker.php';
API for PHP による FileMaker データベースへのデータ書き込み手順を日本語で書くと、次のようになります。
- FileMaker を使用することを宣言する(FileMaker インスタンスを作成する)。
- 使用するデータベース名、レイアウト名、ユーザ名、パスワードを指定する。
- レコード追加をこれから行うことを宣言する。
- 追加するフィールドと、そのデータを指定する。
- レコード追加を実行する。
このように日本語で書いてみると、操作は思ったより単純であることがわかりますね。
あとは上記の内容を PHP の記述規則に従って置き換えるだけです。
日本語で何をやっているかが理解できれば、この PHP ソースも容易に理解できるでしょう。
$databaseName、$layoutName、$userName、$passWord というように変数を用意しておくことで、後でデータベース名や、ユーザ名、パスワードが変更になったときにも柔軟に対応できるようになっています。
一番最後の行の $newrec->execute(); で実際に FileMaker データベースの方にレコードを新規追加します。
最後にメール送信機能を追加します。
すでにご存じのように、メールは差出人(From)、宛先(To)、件名(Subject)、本文(Body)、ヘッダ情報で成り立っています。これと同様の指定をコーディングの中でも行います。後でいつでも変更できるように、以下のように変数に入れておくと便利です。
宛先(To)はアンケートに回答してくれた人のメールアドレスになりますので、ここでは指定しません。
アンケート回答者にメールを送信すると同時にそのコピーをサーバ管理者に送るようにするには、上記のように $bcc 変数を用意して、そこにコピーを送るメールアドレスを設定しておきます。
それでは実際にメールを送信するための手順を日本語で書いてみます。
- メールヘッダを組み立てる。
- アンケートに対するユーザ回答を使って本文を組み立てる。
- メール送信時に発生する文字化け対策を施す。
- 上記の内容を使ってメールを送信する。
上記を PHP で置き換えると、次のようになります。
$_POST の中にユーザ入力の内容が納められていますので、その中から該当するものを取り出しながら本文を組み立て、mb_sendmail() 関数の To の部分に回答者のメールアドレス $_POST['email']を設定します。
上記を踏まえながら、サンプルコードを確認し、Comment.fp7 データベースをお使いの FMS9 環境に配置して、動作を確認してみてください。
これで、FileMaker API for PHP による FileMaker データベースへの書き込み操作がひととおりできるようになりました。
あとは、ステップ 1 のときと同様に、渡ってきたデータをお礼ページに表示するだけです。
詳細は、サンプルコードを参照してみてください。
*サンプルデータベースの Admin パスワードは「admin」、webuser パスワードは「web」となっております。必要に応じて変更してお使いください。
●まとめ
FileMaker データベースへのデータ書込の理解
メール送信の理解
SonicWALL (4) --- IPS
前回「SonicWALL (2) --- IPS」で書いた警告メールの続きです。
IPS Detection Alert: IM Skype -- Application Activity, SID: 2800, 優先順位: 低 - 192.168.*.*, 4787, LAN - 204.9.163.158, 80, WAN, 163-158.static.quiettouch.com -
Skype を使用していると普通に送られてくる警告メール。 Skypeの利用を許可している環境では問題無い、Skypeに何らかの穴が見つからない限りですが。 ViewPointでは攻撃としては認識されていない。詳細解説
IPS Detection Alert: POLICY Google SSL Connections, SID: 3075, 優先順位: 低 - 209.85.171.97, 443, WAN, cg-in-f97.google.com - 192.168.*.*, 1774, LAN, **** -
Google Talkがクライアントと行うSSL通信をブロックしている。ViewPointでは攻撃として認識されない。 詳細解説
IPS Detection Alert: DNS BIND Version UDP Request, SID: 143, 優先順位: 低 - 149.20.52.206, 64457, WAN - 192.168.*.*, 53, LAN, **** -
DNSバージョンをチェックするクエリ。通常は無視していいが、自社のネットワーク情報を知られる可能性もある。 詳細解説
IPS Detection Alert: IM AIM -- Login, SID: 102, 優先順位: 低 - 192.168.*.*, 1253, LAN, **** - 64.12.161.185, 5190, WAN -
IPS Detection Alert: IM AIM -- Instant Message Sent, SID: 103, 優先順位: 低 - 192.168.*.*, 3749, LAN, **** - 205.188.12.130, 5190, WAN - AIMを使用したログイン、またはメッセージ送信の発生を通知する。AIMの利用を許可している場合は無視。 詳細解説 詳細解説
IPS Detection Alert: MULTIMEDIA Flash Video (FLV) Download 3, SID: 78, 優先順位: 低 - *.*.*.*, 80, WAN - 192.168.*.*, 4752, LAN, **** -
Flash Video (FLV)はYouTube等で使用されるビデオフォーマット、これをダウンロードしたときに通知される。 詳細解説
IP spoof dropped - 192.168.*.*, 4388, LAN - 205.188.179.233, 5190, WAN - MAC address: 00:90:cc:c3:06:49
以下、SonicWallのマニュアルから引用
「IP Spoof は、ハッカーが他のコンピュータのアドレスを使って、TCP/IP パケットを送ろうとする、侵入の企てです。保護されたネットワークに、そのネットワーク上のマシンの IP アドレスを使ってアクセスするために利用されます。SonicWALL では、これを侵入の企てとして認識し、それらのパケットを破棄します。SonicWALL の構成が間違っていると、IP Spoof の警告がログされることがよくあります。IP Spoof の警告
を見つけた場合には、LAN、WAN および DMZ 上の IP アドレスがすべて正しいことを確認してください。LAN 上の IP アドレスが LAN のサブネットに入らない場合にもIP Spoof の警告が出ることがあります。」
IPS Detection Alert: SMTP Reply-To Pipe Passthrough, SID: 1888, 優先順位: 低 - 194.150.164.130, 29174, WAN - 192.168.*.*, 25, LAN, -
旧Sendmailのバグを利用してコマンドを実行させる攻撃の可能性。SonicWallはこの攻撃を排除する。 詳細解説
以上
2008-07-01
FileMaker API for PHP を使ったアンケートフォーム作成 (3/4)
サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)
前回はアンケートページ操作の枠組みとなる、アンケート入力ページ、確認ページ、そしてお礼ページの切替方法について説明しました。いよいよ本格的なコード記述に入っていきます。PHP のコーディング規則については割愛しておりますので、不明な点があれば PHP のマニュアルを参照してください。
皆さんご存じのとおり、Web ページの構成はざっと以下のようになっています。
前回の説明では、本文部分の表示切替について説明したわけですが、実際は、本文を表示する前にヘッダを表示し、本文の表示が終わったところでフッタを表示することによって、Web ページを構成する必要があります。第一回目で、ヘッダとフッタは部品化できると申し上げたとおり、ヘッダとフッタをそれぞれ独立した文字列として変数にセットしておくことで、実際のページ表示を行うときに呼び出して使うことができます。
以下はその部分を取り出したものですが、HTML による Web ページ作成経験がある方なら、この部分は容易に想像できるでしょう。
●ヘッダ部品のソース
ヘッダ中にある $pagetitle は、ページのタイトルを表示するための変数です。入力ページ、確認ページ、お礼ページでタイトルを切り替えることができるため、このようにしておくと便利です。
●フッタ部品のソース
このように部品を用意しておけば、極端な話、PHP コードの中で以下のように記述するだけで一つの Web ページが出来上がります。
次に、上記のヘッダとフッタの間に入れる本文部分を検討していきます。
1. ステップ 0 (ユーザ入力ページ)
ここでは、入力用のフォームを作っていきます。
フォーム部品(エレメント)は次の 5 つです。
氏名 -- テキストボックス (myname というエレメント名)
email -- テキストボックス (email というエレメント名)
アンケート回答 -- ラジオボタン (answer というエレメント名)
その他回答 -- テキストボックス (otheranswer というエレメント名)
ご意見など -- テキストエリア (memo というエレメント名)
以下は上記を踏まえてフォームを起こすためのコードを PHP で記述したものです。
上記赤で囲った部分がアンケート回答の選択肢を示すラジオボタンです。これですと、アンケート回答の選択肢が増えるたびにラジオボタン行を増やす必要があるため、将来的に非効率といえば非効率です。というわけで、このラジオボタンの部分を可変対応にしてみましょう。
そこで選択肢のリスト作って変数に入れてみます。ここでは $answeroptions という変数にリストを配列としてセットしているところです。
そして、ラジオボタンを表示したいところでこの変数($answeroptions)を呼び出して、各項目を取り出します。その加工を行っているのがこの部分です。
これでデフォルトのページの部品ができあがりました。しかし、これでは各エレメントの value が空欄のため、前回何らかのユーザ入力が行われていたとしても値はページには反映されません。そこで、前回ユーザ入力があった場合にはその値を当該の項目に表示する処理を追加します。
この処理を施すと、次のようになります。赤線部分に注目してください。
そしてさらに、必須項目である[氏名]欄と[email]欄が正しく入力されているかどうかをチェックして、値が不正の場合には赤字でメッセージを表示するようにします。
その処理を施したものが以下のソースです。赤線部分に注目してください。
入力項目の処理はこれで終わりですが、後は今のステップ番号を次の操作のためにどこかに用意しておく必要があります。
ここでは以下のような隠しエレメントを用意して、そこにステップ番号を入れることにします。エレメントの名前は後で参照しやすいように page_flg としておきます。今回はステップ 0 (ユーザ入力フォーム)なので、設定しておく値は 0 ですね。
後は送信ボタンとリセットボタンを用意するだけです。
上記を踏まえて、もう一度サンプルコードを見てみてください。
2. ステップ 1 (確認ページ)
このステップは、ステップ 0 に比べると比較的処理が容易です。ここでは、ステップ 0 で入力された値 ($_POST にまとめて入っています)を取り出してページに表示し、ユーザにこの内容でデータベースに送信しても良いか尋ねて、ステップ 2 に入力値を渡すだけです。
まずは入力された値を表示します。この部分は、確認ページとお礼ページの両方で同じものを表示しますので、使い回すことができます。
次に、ステップ 2 (お礼ページ)に渡すためのユーザ入力値を隠しエレメントとしてフォームに用意します。
以下、赤線を引いた箇所が現在のステップ番号を渡しているところです。
実際にサンプルコードのソースを開いてみて、この部分を確認してみてください。
残すはステップ 2 です。ステップ 2 では、データベース操作およびメール送信について触れますので、次回詳しく説明いたします。
●まとめ
入力フォームの記述方法とユーザ入力値の表示方法の理解
前回はアンケートページ操作の枠組みとなる、アンケート入力ページ、確認ページ、そしてお礼ページの切替方法について説明しました。いよいよ本格的なコード記述に入っていきます。PHP のコーディング規則については割愛しておりますので、不明な点があれば PHP のマニュアルを参照してください。
皆さんご存じのとおり、Web ページの構成はざっと以下のようになっています。
前回の説明では、本文部分の表示切替について説明したわけですが、実際は、本文を表示する前にヘッダを表示し、本文の表示が終わったところでフッタを表示することによって、Web ページを構成する必要があります。第一回目で、ヘッダとフッタは部品化できると申し上げたとおり、ヘッダとフッタをそれぞれ独立した文字列として変数にセットしておくことで、実際のページ表示を行うときに呼び出して使うことができます。
以下はその部分を取り出したものですが、HTML による Web ページ作成経験がある方なら、この部分は容易に想像できるでしょう。
●ヘッダ部品のソース
ヘッダ中にある $pagetitle は、ページのタイトルを表示するための変数です。入力ページ、確認ページ、お礼ページでタイトルを切り替えることができるため、このようにしておくと便利です。
●フッタ部品のソース
このように部品を用意しておけば、極端な話、PHP コードの中で以下のように記述するだけで一つの Web ページが出来上がります。
echo $header;
echo $footer;
次に、上記のヘッダとフッタの間に入れる本文部分を検討していきます。
1. ステップ 0 (ユーザ入力ページ)
ここでは、入力用のフォームを作っていきます。
フォーム部品(エレメント)は次の 5 つです。
氏名 -- テキストボックス (myname というエレメント名)
email -- テキストボックス (email というエレメント名)
アンケート回答 -- ラジオボタン (answer というエレメント名)
その他回答 -- テキストボックス (otheranswer というエレメント名)
ご意見など -- テキストエリア (memo というエレメント名)
以下は上記を踏まえてフォームを起こすためのコードを PHP で記述したものです。
上記赤で囲った部分がアンケート回答の選択肢を示すラジオボタンです。これですと、アンケート回答の選択肢が増えるたびにラジオボタン行を増やす必要があるため、将来的に非効率といえば非効率です。というわけで、このラジオボタンの部分を可変対応にしてみましょう。
そこで選択肢のリスト作って変数に入れてみます。ここでは $answeroptions という変数にリストを配列としてセットしているところです。
そして、ラジオボタンを表示したいところでこの変数($answeroptions)を呼び出して、各項目を取り出します。その加工を行っているのがこの部分です。
これでデフォルトのページの部品ができあがりました。しかし、これでは各エレメントの value が空欄のため、前回何らかのユーザ入力が行われていたとしても値はページには反映されません。そこで、前回ユーザ入力があった場合にはその値を当該の項目に表示する処理を追加します。
この処理を施すと、次のようになります。赤線部分に注目してください。
そしてさらに、必須項目である[氏名]欄と[email]欄が正しく入力されているかどうかをチェックして、値が不正の場合には赤字でメッセージを表示するようにします。
その処理を施したものが以下のソースです。赤線部分に注目してください。
入力項目の処理はこれで終わりですが、後は今のステップ番号を次の操作のためにどこかに用意しておく必要があります。
ここでは以下のような隠しエレメントを用意して、そこにステップ番号を入れることにします。エレメントの名前は後で参照しやすいように page_flg としておきます。今回はステップ 0 (ユーザ入力フォーム)なので、設定しておく値は 0 ですね。
後は送信ボタンとリセットボタンを用意するだけです。
上記を踏まえて、もう一度サンプルコードを見てみてください。
2. ステップ 1 (確認ページ)
このステップは、ステップ 0 に比べると比較的処理が容易です。ここでは、ステップ 0 で入力された値 ($_POST にまとめて入っています)を取り出してページに表示し、ユーザにこの内容でデータベースに送信しても良いか尋ねて、ステップ 2 に入力値を渡すだけです。
まずは入力された値を表示します。この部分は、確認ページとお礼ページの両方で同じものを表示しますので、使い回すことができます。
次に、ステップ 2 (お礼ページ)に渡すためのユーザ入力値を隠しエレメントとしてフォームに用意します。
以下、赤線を引いた箇所が現在のステップ番号を渡しているところです。
実際にサンプルコードのソースを開いてみて、この部分を確認してみてください。
残すはステップ 2 です。ステップ 2 では、データベース操作およびメール送信について触れますので、次回詳しく説明いたします。
●まとめ
入力フォームの記述方法とユーザ入力値の表示方法の理解
FileMaker API for PHP を使ったアンケートフォーム作成 (2/4)
サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)
さて、前回の説明ではアンケートページの流れと、流用可能部分の洗い出しを行いました。
以降、PHP を使って話を進めていきますが、実際にコードを書く前に、まずは日本語で分岐処理を考えてみましょう。この作業がしっかりできれば、あとはそれを PHP の規則に従って置き換えるだけです。このやり方ならあらゆるプログラミング言語にも応用が利くので便利です。
ページがロードされたときに、最初にしなければならないのは、このページが初回ロード(デフォルトページ)なのか、確認用ページなのか、それともお礼ページなのかを把握することです。そこで前回解説した 3 つのステップが登場するわけです。
ここで注目すべきことは、ユーザが正しい入力を行わなければ、いつまでたってもステップ 1 には進めないということです。今回のアンケートフォームでは、このために[氏名]欄と[email]欄を入力必須としています。この二つの項目正しい入力がなければ、誰が送ったのか後で判断できませんし、メールも送信できなくなってしまいます。また、ゴミデータを増やす原因にもなりますので、最低限[氏名]と[email]には入力をしてもらいたいところです。
つまり、ステップ 0 ではユーザ入力ページを表示させつつ、正しい入力が行われているかどうかという判断も行います。
ページがロードされた場合に、[氏名]欄と[email]欄に正しいデータ入力が行われていたときは、必要最低限の情報が揃ったことになりますので、ステップ 1 に進みます。
さらにページがロードされた場合に、前回のユーザ操作で“確定”ボタンが押されていたことを確認できたときは、ステップ 2 に進んでデータを FileMaker データベースに書き込み、さらにメールを送信して終了します。
実際にコード記述を行う際には、ステップにプログラム内で管理しやすい固有の名前を付けます。ここでは page_flg としてみます。page_flg が 0 ならステップ 0 というわけです。PHP では変数を取る場合は先頭に $ を付けますので $page_flg という名前になります。
それではここまでを日本語で表現してみます。見やすさのために、各項目内はインデントを行います。ステップの名前は page_flg となっていますので、覚えておいてください。
上記のように、ページがロードされた直後の処理が最も重要であることがわかりますね。page_flg の番号が特定できれば、あとはそれに応じたフォームを表示するだけです。
さて、次はこれらの分岐を PHP に置き換えてみます。処理の詳細はまだ記述しませんので、コメント行として日本語で表します。先ほど申し上げたとおり、page_flg は PHP では $page_flg と記述します。
分岐の方法や入力されたフォームの値($_POST に入っています)の説明は PHP のマニュアルをご覧いただくとして、こうして見てみると、処理の流れが意外と単純であることがわかりますね。ちなみに、Mailck()という名前の付いているものは、入力されたメールアドレスが適切な形式であるかどうかをチェックするために私が用意したユーザ定義関数の名前です。
この枠組みができれば、あとはページヘッダ、フッタ、そしてフォームの詳細を追加していくだけです。
また、前回の説明にあったように、確認ページとお礼ページのコードは流用できる部分があるため、$page_flg の分岐を以下のように変更します。
コードがさらにすっきりましたね。
ここで、サンプルコードをダウンロードして、該当箇所を検索し、コードがどのようになっているかを調べてみてください。
フォーム内容が記述されているため、PHP に不慣れな方には複雑に見えるとは思いますが、この枠組みが理解できていれば、今回のアンケートフォームの操作は 70% 理解できたと言っても過言ではないでしょう。
●まとめ
ページ操作の枠組みとその記述方法(日本語、PHP)の理解
さて、前回の説明ではアンケートページの流れと、流用可能部分の洗い出しを行いました。
以降、PHP を使って話を進めていきますが、実際にコードを書く前に、まずは日本語で分岐処理を考えてみましょう。この作業がしっかりできれば、あとはそれを PHP の規則に従って置き換えるだけです。このやり方ならあらゆるプログラミング言語にも応用が利くので便利です。
ページがロードされたときに、最初にしなければならないのは、このページが初回ロード(デフォルトページ)なのか、確認用ページなのか、それともお礼ページなのかを把握することです。そこで前回解説した 3 つのステップが登場するわけです。
0 -- 初回ロード時(デフォルト)ユーザによるアンケート入力用ページ
1 -- 確認ページ
2 -- お礼ページ
ここで注目すべきことは、ユーザが正しい入力を行わなければ、いつまでたってもステップ 1 には進めないということです。今回のアンケートフォームでは、このために[氏名]欄と[email]欄を入力必須としています。この二つの項目正しい入力がなければ、誰が送ったのか後で判断できませんし、メールも送信できなくなってしまいます。また、ゴミデータを増やす原因にもなりますので、最低限[氏名]と[email]には入力をしてもらいたいところです。
つまり、ステップ 0 ではユーザ入力ページを表示させつつ、正しい入力が行われているかどうかという判断も行います。
ページがロードされた場合に、[氏名]欄と[email]欄に正しいデータ入力が行われていたときは、必要最低限の情報が揃ったことになりますので、ステップ 1 に進みます。
さらにページがロードされた場合に、前回のユーザ操作で“確定”ボタンが押されていたことを確認できたときは、ステップ 2 に進んでデータを FileMaker データベースに書き込み、さらにメールを送信して終了します。
実際にコード記述を行う際には、ステップにプログラム内で管理しやすい固有の名前を付けます。ここでは page_flg としてみます。page_flg が 0 ならステップ 0 というわけです。PHP では変数を取る場合は先頭に $ を付けますので $page_flg という名前になります。
それではここまでを日本語で表現してみます。見やすさのために、各項目内はインデントを行います。ステップの名前は page_flg となっていますので、覚えておいてください。
上記のように、ページがロードされた直後の処理が最も重要であることがわかりますね。page_flg の番号が特定できれば、あとはそれに応じたフォームを表示するだけです。
さて、次はこれらの分岐を PHP に置き換えてみます。処理の詳細はまだ記述しませんので、コメント行として日本語で表します。先ほど申し上げたとおり、page_flg は PHP では $page_flg と記述します。
分岐の方法や入力されたフォームの値($_POST に入っています)の説明は PHP のマニュアルをご覧いただくとして、こうして見てみると、処理の流れが意外と単純であることがわかりますね。ちなみに、Mailck()という名前の付いているものは、入力されたメールアドレスが適切な形式であるかどうかをチェックするために私が用意したユーザ定義関数の名前です。
この枠組みができれば、あとはページヘッダ、フッタ、そしてフォームの詳細を追加していくだけです。
また、前回の説明にあったように、確認ページとお礼ページのコードは流用できる部分があるため、$page_flg の分岐を以下のように変更します。
コードがさらにすっきりましたね。
ここで、サンプルコードをダウンロードして、該当箇所を検索し、コードがどのようになっているかを調べてみてください。
フォーム内容が記述されているため、PHP に不慣れな方には複雑に見えるとは思いますが、この枠組みが理解できていれば、今回のアンケートフォームの操作は 70% 理解できたと言っても過言ではないでしょう。
●まとめ
ページ操作の枠組みとその記述方法(日本語、PHP)の理解
登録:
投稿 (Atom)