テクニカルTの坊主です。本日は、データベース連動型のFlashの話です。
PHP + MySQLは動的なコンテンツを静的に表示しているだけ。Flashは見栄えがいいだけ。
この問題を解決するためにFlash + PHP + MySQLの組み合わせを使います。
この組み合わせだと動的なコンテンツを見栄えよく表示することができます。
一般的には、htmlファイルの中にFlashを置き、このFlashがphpファイルへデータを渡し、phpがMySQLへアクセスしデータを処理し、戻り値をphpからFlashへ渡し、画面に表示させます。
この機能は、ActionScript2.0だと非常に簡単に実現できます。
まず、Flashで、LoadVarsクラスのインスタンスを用意します。
例: dx = new LoadVars();
次に、phpへのトリガになるアクションの内容を記述します。
phpへ渡す変数の値をLoadVarsクラスのインスタンスへ入力しsendAndLoadメソッドを実行します。
例: dx.param1 = 値;
dx.sendAndLoad( "test.php" , dx , "POST" );
この段階で、FlashからPHPに渡されるデータはPOSTされていますので、PHPでは普通にPOSTで受信できます。
変数名はFlashとPHPで統一する必要があります。
次に、PHPからMySQLへの接続を行います。
まず、mysql_connectでMySQLへ接続し、mysql_select_dbでデータベースを選択します。
例: mysql_connect( "localhost" , [ユーザー名] , [パスワード] );
mysql_select_db( [データベース名] );
後は、普通にPHPで処理を行います。
データベースへのアクセスは、mysql_queryでsql文を実行し、mysql_fetch_arrayでレコードを取得します。
FlashからのデータとMySQLからのデータを処理した後、Flashへの戻り値はechoで送信します。
echo [変数名]=[値];で送信します。
sendAndLoad処理が完了するとonLoadハンドラが呼び出されますので、sendAndLoadを実行したオブジェクトのonLoadハンドラでPHPから送信された値を処理します。
例:
dx.onLoad = function(success){
param2 = dx.param1;
}
以上の処理でFlash + PHP + MySQLでのリッチコンテンツが可能になります。
しかし、ActionScript2.0は、Adobe AIRに対応していません。ActionScript3.0に書き換える必要があります。
PHP側の処理は、ActionScript2.0の場合とActionScript3.0の場合で異なる点はありません。同じPHPファイルを使えますので、Flashだけを書き換えます。
まず、FlashからPHPへ送信するためのオブジェクトをURLRequestクラスのインスタンスとして用意します。
例:var phpUrl:URLRequest = new URLRequest( [phpファイルのURL] );
このオブジェクトをPOSTで送信するためにメソッドを指定します。
例:phpUrl.method = URLRequestMethod.POST;
phpへ送信する変数名と値はURLVariablesクラスのインスタンスへ入力します。
例:var valuelist:URLVariables = new URLVariables();
valuelist.dx = [phpへ送信するデータ];
phpへ送信するデータ一式をURLRequestクラスのインスタンスへ入力しデータのセットが完了します。
例:phpUrl.data = valuelist;
次にローダーの設定を行います。
例:var loader:URLLoader = new URLLoader( phpUrl );
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
戻り値を受け取るイベントリスナーを設定しロードを実行します。
例:loader.addEventListener(Event.COMPLETE, [戻り値を処理する関数名] );
loader.load(request);
ロード実行によってFlashからPHPへデータがPOSTされます。
PHP内の処理はActionScript2.0の場合と同一です。
PHP内の処理終了後、PHPからFlashへechoで戻り値を送信し、先に設定したローダーのイベントリスナーで受信します。
最後に、ローダーのイベントリスナーで指定された関数で戻り値を受け取ります。
例:
function [戻り値を処理する関数名]( event:Event):void{
var phpResult:URLVariables = new URLVariables( event.target.data );
}
後は、Flash内で普通にデータを加工するだけです。
追伸
この記事の内容を理解できた方は、是非面接へお越しください。