DBとFlashを連携したい(1)
2005年10月5日 プログラム コメント (1)[loadVarsの使い方]
外部のデータを取り込んだり、外部にデータを出力するために、
フラッシュは様々な方法を提供しているけれども、
その中のひとつに『loadVarsクラス』って言う物がある。
フラッシュMX2004からサポートされるようになったこのクラス。
MX時代もあったけれどもクラス化されたことで非常に便利になった。
外部から読み込んだ文字列を、直接変数名でアクセスできることもあって、
MovieClip.loadVariableでやってた時よりも、大分分かりやすくなっている。
ポイントになるのは、変数名1=データ1&変数名2=データ2という形に
加工されたファイルを読み込んだときのみ、loadVars.onLoadイベント内で、
this.変数名という書式でデータ1にアクセスできるという点。
で、今回はこれを使ってDBの検索・更新などの処理するという話。
[環境]
お金がないので、もちろんColdFusionも無ければ、 Flash Communication Serverもない。
そんな貧相な環境で、FlashとDBとの連携をやることが今回のテーマなので、
環境もそれに応じたものを用意。
DB:MySQL(Windows)
HTTPServer:Apache(PHPモジュール入り。Windows)
ちなみにPEARDBも入っていないというオチ付き。さすがにやりすぎかも。
環境構築は、いろいろなところで紹介されているので省略。
同様にDBとのハンドリングをする知識に関しては、ここでは省略。
今回はPHPでアクセスしますが、サーバサイド言語ならcgiでもjavaでもなんでもいけます。
[データ]
Table : meibo
┌─┬──┐
│ID│Name│
├─┼──┤
│01│Azsa│
│02│Nina│
└─┴──┘
あっさりと。
[やること]
いわゆる基本処理ということで、
『(1)検索、(2)登録』の2本立てで。
[データの取得と検索]
loadVarsクラスの引数に指定するパスは、何もテキストファイルでなくても良い。
動的にテキストを出力してやれば良いことになる。手順としては、以下のような感じ。
(1)【Flash】DBにアクセスするサーバサイドプログラムを呼ぶ。
(2)【PHP】データベースからデータを取得
『Select * from meibo;』の結果セットを配列で確保するイメージ。
(3)【PHP】送信用文字列の形成
ようは、loadVarsで読み込める形に整形してしまえばいいわけですなんですが・・。
先ほども出てきたとおり、loadVarsは標準のMIME形式 application/x-www-form-urlencoded、
つまり変数名1=データ1&変数名2=データ2の形でしか読めないということで、
同一の列のデータを別の変数名になるように加工してやらないといけない。
今回の場合なら、
『$strOut = id0=01&name0=Azsa&id1=02&name1=Nina&cnt=2』という感じ。
今後の処理を考えて変数名の後ろに連番をつけておくのが無難。
また、最後にデータの数をつけておくと処理が楽。
この辺りが力技なので、ミスが無いにチェックしないといけない。
(4)【PHP】送信用文字列の出力
PHPなら、echo $strOut;。これで、やっとFlash側での処理に。
(5)【Flash】Flash側で受け取ったデータを加工する。
あとは、データの加工処理。
これで複数件の検索ができたことになる。
非常に人力に頼る部分が多くて、大変ですな・・・。
この辺りで上に。
外部のデータを取り込んだり、外部にデータを出力するために、
フラッシュは様々な方法を提供しているけれども、
その中のひとつに『loadVarsクラス』って言う物がある。
非公式テクニカルノート
http://www.fumiononaka.com/TechNotes/Flash/FN0303007.html
フラッシュMX2004からサポートされるようになったこのクラス。
MX時代もあったけれどもクラス化されたことで非常に便利になった。
外部から読み込んだ文字列を、直接変数名でアクセスできることもあって、
MovieClip.loadVariableでやってた時よりも、大分分かりやすくなっている。
ポイントになるのは、変数名1=データ1&変数名2=データ2という形に
加工されたファイルを読み込んだときのみ、loadVars.onLoadイベント内で、
this.変数名という書式でデータ1にアクセスできるという点。
で、今回はこれを使ってDBの検索・更新などの処理するという話。
[環境]
お金がないので、もちろんColdFusionも無ければ、 Flash Communication Serverもない。
そんな貧相な環境で、FlashとDBとの連携をやることが今回のテーマなので、
環境もそれに応じたものを用意。
DB:MySQL(Windows)
HTTPServer:Apache(PHPモジュール入り。Windows)
ちなみにPEARDBも入っていないというオチ付き。さすがにやりすぎかも。
環境構築は、いろいろなところで紹介されているので省略。
同様にDBとのハンドリングをする知識に関しては、ここでは省略。
今回はPHPでアクセスしますが、サーバサイド言語ならcgiでもjavaでもなんでもいけます。
[データ]
Table : meibo
┌─┬──┐
│ID│Name│
├─┼──┤
│01│Azsa│
│02│Nina│
└─┴──┘
あっさりと。
[やること]
いわゆる基本処理ということで、
『(1)検索、(2)登録』の2本立てで。
[データの取得と検索]
loadVarsクラスの引数に指定するパスは、何もテキストファイルでなくても良い。
動的にテキストを出力してやれば良いことになる。手順としては、以下のような感じ。
(1)【Flash】DBにアクセスするサーバサイドプログラムを呼ぶ。
//エンコーディングをUTF-8からOS依存のコードにする。
System.useCodepage = true;
var my_lv:LoadVars = new LoadVars();
//ロードしたら呼び出される
my_lv.onLoad = function(success:Boolean) {
if (success) {
//ロード成功時の記述
//trace(my_lv.name);
} else {
//ロード失敗時の記述
}
};
my_lv.load("http://hoge.hoge.com/load.php";);
(2)【PHP】データベースからデータを取得
『Select * from meibo;』の結果セットを配列で確保するイメージ。
$result = mysql_query($query);という感じで。
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){
$data[] = $line;
}
(3)【PHP】送信用文字列の形成
ようは、loadVarsで読み込める形に整形してしまえばいいわけですなんですが・・。
先ほども出てきたとおり、loadVarsは標準のMIME形式 application/x-www-form-urlencoded、
つまり変数名1=データ1&変数名2=データ2の形でしか読めないということで、
同一の列のデータを別の変数名になるように加工してやらないといけない。
今回の場合なら、
『$strOut = id0=01&name0=Azsa&id1=02&name1=Nina&cnt=2』という感じ。
今後の処理を考えて変数名の後ろに連番をつけておくのが無難。
また、最後にデータの数をつけておくと処理が楽。
この辺りが力技なので、ミスが無いにチェックしないといけない。
(4)【PHP】送信用文字列の出力
PHPなら、echo $strOut;。これで、やっとFlash側での処理に。
(5)【Flash】Flash側で受け取ったデータを加工する。
あとは、データの加工処理。
for(var i:Number = 0;i < my_lv.cnt;i++){
//trace(eval("this.my_lv.name" + i));
}
これで複数件の検索ができたことになる。
非常に人力に頼る部分が多くて、大変ですな・・・。
この辺りで上に。
コメント