Flash+PHP+MySql
DBからFlashへ
Flashが読込まれた際に、外部から値を読込みFlash上に表示するのに最も簡単だと思われる方法として、LoadVariabies()があります。
テキストデータなどを読込むのに便利ではあるのですが、データを読込む際に読込みの完了を待たずに次のステップへと移ってしまう為、うまくデータが読込まれない場合があります。
Flash6からLoadVarsクラスというものが追加され、LoadVars.onLoadというイベントハンドラを利用する事で、データの読込み完了後にイベントが始まります。
百回計算3のランキングの表示システムを解説します。
環境はFlash8+PHP4+MySql4での環境です。当サイトでの環境ですので、他の環境で正しく動作する事を保証するものではありません。
Flashの1フレーム目に記入
1フレーム目にテキストフレームを作成し、プロパティでダイナミックテキストとし、変数を読込む値の変数とする。
読込む値分同様のものを作成する。また、スクリプトをフレームに以下のように入力する。
objLoadVars = new LoadVars();
objLoadVars.onLoad = loadEnd; // <-- 読込みが完了したらfunction loadEnd()に進む
objLoadVars.load("url"); // <-- 読込むPHPファイルのurlを記入
//
function loadEnd() {
TopName1 = objLoadVars.TopName1;
TopTime1 = objLoadVars.TopTime1;
TopName2 = objLoadVars.TopName2;
TopTime2 = objLoadVars.TopTime2;
TopName3 = objLoadVars.TopName3;
TopTime3 = objLoadVars.TopTime3;
}
今回はランキング表示でしたので、テキストフレームに直接入れましたが、内部に変数もしくはグローバル変数を指定して入力する事も可能です。
読込む際の注意点
読込む際の注意点として、Flash6以降内部テキストフォーマットとしてUnicodeが使われている為、読込むファイルもUnicodeでなければ文字化けを起こすという事です。
もしデータベースやテキストファイルでShift-JISなど他のコードを利用している場合には、1フレーム目の スクリプト先頭行にSystem.useCodepage = true;と書いておいて下さい。
これでFlash Playerが実行されるオペレーティングシステムの環境と同じコードで解釈するようになります。
PHPでの作業
Flashで外部データを変数として読込むには、「変数=値」という形式を使います。
複数の値を読込む際には、&でつないで行きます。
TopName1,TopTime1・・・・TopTime3という値を読込むとすれば、以下のようになります。
TopName1=○○&TopTime1=2:10:15&・・・・&TopTime3=4:21:4
PHPでは、データベースに接続し、上位3位の情報を取得し上記のようなテキスト文になるようにする。
<?php
$DBSERVER = "○○○";
$DBUSER = "×××××";
$DBPASSWORD = "*******";
$DBNAME = "△△△△";
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
mysql_query("set names utf8");
$selectdb = mysql_select_db($DBNAME);
$sql = "select g_name,g_time from ranking where game_id=1 order by g_time limit 3;";
$rst = mysql_query($sql);
$i = 1;
while ($col = mysql_fetch_array($rst)) {
$body .= "TopName".$i."=".$col[g_name].
"&TopTime".$i."=".$col[g_time]."&";
$i++;
}
mysql_free_result($rst);
$con = mysql_close($con);
print $body;
?>
FlashからDBに
正確には、FlashからPHPに値を渡し、PHPでデータベースに値を記録する事となる。
以下のスクリプトを登録ボタンに書きます。
on (release) {
ranker = tourokumei; // <-- ランクイン名
kiroku = kirokutime
// <-- タイム
formData = new LoadVars();
formData.ranker = ranker;
formData.kiroku = kiroku;
formData.send("○○○○.php", "_self", "POST");
}
フォームデータとしてrankerとkirokuが○○○○.phpに渡され、PHP側でデータベースに書込む処理を行う。
<?php
$DBSERVER = "○○○";
$DBUSER = "×××××";
$DBPASSWORD = "*******";
$DBNAME = "△△△△";
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
mysql_query("set names utf8");
$selectdb = mysql_select_db($DBNAME);
$name = $_POST[ranker];
$tokuten = $_POST[kiroku];
$sql = "INSERT INTO ranking (g_name,g_time) VALUES ('".$name."', '".$tokuten."');";
$rst = mysql_query($sql);
$con = mysql_close($con);
?>
書込み後、必要に応じて画面(登録完了画面等)を表示するか、Flashのトップページにリダイレクトするかして下さい。