• 締切済み

MySQL→PHP→Flashへのデータの受け渡しについて

現在、praflaを使って、学習支援のための英単語ゲームを開発しています。 そこで、英単語や日本語訳、ユーザーのデータ(成績や利用履歴など)管理等をMySQLで行い、 データをPHPに渡して、出題する英単語、日本語訳をFlashで表示させ、ゲーム終了後には、データベースに成績等を渡すという流れで作っていこうと考えています。 しかし、PHPからFlashへのデータの渡し方が上手くいかないため質問させていただきました。 開発環境にはxamppを使っているので、MySQLからPHPへのデータの受け渡しは、確認済みなのですが、PHPからFlashへの受け渡しが上手くいきません。 PHPから変数でFlashに渡そうと考えていて、 PHP側には、データベースへのアクセスと、PHPの変数$engwへ英単語のデータを格納して、 echo "jEname=$engw"; としてFlash側に渡せるようにしているつもりです。 (これで渡せるかどうかちゃんと分かっていないため、ここが違う場合は指摘してください) flash側は、ASを使って以下のように書いています。 ///////以下ソース////// function Test(){ EngObj = new LoadVars(); EngObj.onLoad = function(s){ if(s){         //gotoAndPlay("読み込み成功"); trace(this.jEname); } }; EngObj.load("test2.php"); } jEname = new Test(); gotoAndPlay("読み込み成功"); //////ここまで////// //gotoAndPlay("読み込み成功"); は、PHPの読み込みができているかどうか確認するためのラベルジャンプのフレームアクションです。 ここでPHPの読み込みができていたのでコメント扱いにして、jEnameを読み込み、jEnameが表示されているか確認するため、最後の行で「読み込み成功」のラベルに飛び、jEnameが表示されるか確認しようとしたのですが、 [object Object]と表示されてしまいました。 どこが原因なのか掴めず困っているのですが、どなたかご教授いただけませんでしょうか? よろしくお願いいたします。

みんなの回答

  • pakepoke
  • ベストアンサー率0% (0/0)
回答No.3

データが渡っているのを確認できて良かったです。 ということは 変数 = EngObj.jEname; でアクセスできるはずですし、配列に入れることもできます・・・ そういう疑問ではないのでしょうか?

taregin
質問者

補足

そのはずだと思うんですが、 変数 = EngObj.jEname; とおいて、アクセスできているか確認するためにその変数を表示させるようにしたんですが、 なぜか表示されず・・・ 文字コードが関係してたりするんでしょうか? でも、for in文で正しく表示できていたということは文字コードは関係ないと思うのですがどうなんでしょうか?

  • pakepoke
  • ベストアンサー率0% (0/0)
回答No.2

for in は配列はもちろんですがそのオブジェクトの変数を全部吐き出してくれます。多分。 例えば以下のコードをonLoadイベントの中に追加してみてください。 for (Value in EngObj) {   _root.values += Value + "=" + EngObj[Value] + newline; } _rootにダイナミックテキストを置いて変数にvaluesと付けてください。PHPからどういったデータが返ってきているか確認できると思います。※変数以外に関数も出力されるので「なんじゃこれ!っ」とならないように注意してください。 PHPもデータベースも詳しくないですし5年前くらいに 少しかじった程度なのでくれぐれも参考程度で・・<(_ _)> 提示された一連のコードですが最近のPHPは分からないので なんともお答えできません。 ただ、私的にはこうなのかな?と・・ <?php  // MySQL 接続  $cn = mysql_connect("localhost", "root", "pass");  // MySQL DB 選択  $select = mysql_select_db("english", $cn);  if ($cn == false) {    die;  } else {  // MySQL 問い合わせ  $sql = "select * from engdata";  $rs = mysql_query($sql, $cn);  // MySQL レコード参照  while ($item = mysql_fetch_array($rs)) {  $engw.="${item['eng']}";  $jpnw.="${item['jpn']}";  }  // MySQL 切断  mysql_close($cn);   //ひとまず英単語($engw)だけ出力  echo "jEname=".$engw;  } ?> 細かい記述は分からないのでそのままですが データベースとの接続の流れが少し気になったので書いてみました。 すごい勘違いしていましたらお許しください。 良いもの作ってくださいね。

taregin
質問者

お礼

書いていただいたコードを使って、別のファイルで作ってみました。 データベース側のデータ量が多いので、データ数を1つにして、 英単語(eng)にはframeworkのみ入れておいてやってみると、 jEname=framework/onLoad=[function]と表示されました。 (frameworkの後ろの/はfrash側でsplitを使って配列にするための区切り文字としてPHP側に追加した文字です。) 気になったのは、 _root.values += Value + "=" + EngObj[Value] + newline; 上のコードだと変数が表示された後に"="が来ると思ったんですが・・・ 言い訳でしかないですが、何分素人なので、これが何を示しているのか疑問が増えてしまいました・・・。 ですが、一応Flashにデータ自体は渡っていることが確認できただけでも進歩したかなと思います。 回答していただき、本当にありがとうございました。

taregin
質問者

補足

お礼を書いた後にコードがどう働いているのかが少しわかりました。 Valueが渡ってきた変数名を、EngObj[Value]がその変数の中身を示していたわけですね。 表示された内容が正しいならtraceが使えるはずだと思ったんですが、表示はされませんでした。 for inの中身を、 _root.values += EngObj[Value]; のみにして、無理やりsplitをかけて別の変数に配列にしてからやろうとしましたが、 これも上手くいかず・・・ ほかに何か案がないか探してみます。 もし何かわかればまた補足なりをつけたいと思います。

  • pakepoke
  • ベストアンサー率0% (0/0)
回答No.1

素人ですが今のところ回答がないようなので もしヒントになればと思い投稿しますね。 for inループを使ってEngObjの項目全てを洗い出して PHPからFlashに渡ってくるデータがどうなっているのか 参考にされてはどうでしょうか。

taregin
質問者

補足

返事が遅くなってしまい申し訳ありません。 PHPもflashもほぼ無知であるため、質問内容が明確でないにも関わらず回答してくださりありがとうございます。 for inループというのも知らなかったので、調べてみましたが、これは配列を出力する際に使う構文だと認識しました(違ってたらすみません)。 ただ、PHPからFlashに渡す際に、配列ではなく一つの変数で渡しているため、for inで調べられるのか疑問なのですが・・・どうでしょうか? あと、補足として、PHPのソースも記載しておきます。 <?php  // MySQL 接続  if (!($cn = mysql_connect("localhost", "root", "pass"))) {   die;  }  // MySQL DB 選択  if (!(mysql_select_db("english"))) {   die;  }  // MySQL 問い合わせ  $sql = "select * from engdata";  if (!($rs = mysql_query($sql))) {   die;  }  // MySQL レコード参照  while ($item = mysql_fetch_array($rs)) {  $engw.="${item['eng']}";  $jpnw.="${item['jpn']}";  }  // MySQL 切断  mysql_close($cn);   //ひとまず英単語($engw)だけ出力  echo "jEname=".$engw; ?>