- ベストアンサー
FlashからPHPへの値の受け渡し
- FlashからPHPへ変数を送る方法について質問です。
- 参考にしているソースコードの一部を示し、それを元に試しで作成したコードがうまく動作しないという問題を抱えています。
- 具体的には、動的に配置したボタンを押すとPHPに変数を送りたいのですが、ボタンに設定したURLのリクエストが正しく行われていないようです。原因を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
様々な要因が複雑に絡み合っているので、 一度設計を見直すのが宜しいと思います。 恐らく、各機能を抽象的な部品化するのが問題をとく鍵かと。 個々のスレッドオブジェクト(以下objS)情報は、 ダイナミックテキスト(以下D_TXT)にでも保持してもらい objSのプロパティ値を取得すれば、同一タイムライン上なら 変数のスコープに悩まされる事はないかと思います。 objSの座標移動は _x,_y等のプロパティ値を変化させるだけ!の関数を用意し onEnterFrame内で関数にobjSのインスタンス名を渡すなど。 とにかく、objS複製と座標移動は別々に関数化しておく。 PHPに送りたい情報群を格納する入れ物(以下objNow、値は空)を用意し onSetFocusで現在フォーカスがあたっているobjS内のD_TXTから、 情報群をobjNowに格納してあげる。 (onSetFocusではなくhitTestでもよいかも) フォーカスがあたっているobjSがonPressされたら、 objNowから情報群を取得し、 LoadVars(必須)のインスタンスに格納し、 sendなり、sendAndLoadしてあげる。 多分、スレ番号を送ったら、PHPでDBやTEXTから情報を取得し Flashに返してあげると思うので、やっぱりsendAndLoadかな。 onPressというイベントハンドラがForループに入っている のが最も違和感を感じます。
その他の回答 (2)
- pide_piper
- ベストアンサー率33% (24/72)
/******************************** getURLではブラウザが開きますが、良いのでしょうか? sendAndLoadで送・受信しては? (ごみがあるのでまだ未完成) PHP側 #をセパレータに使わない方法も検討されては? if($_POST['isRequest']=="myswf"){ $sNum="1#2#3#4#5#6#7"; $sID="1#2#3#4#10#11#12"; $sMother="1#1#1#4#4#10"; print(urlencode($sNum."&".$sID."&".$sMother)); } 実行結果 1#2#3&1#2#3&1#1#1 となり、これをFlash側で tableNo[0]=1 tableNo[1]=2 tableNo[2]=3 とする ********************************/ urlPHP = "http://example.com/test.php"; function setArr(sVarName, aParam, sSeparator) { set(sVarName, aParam.split(sSeparator)); } var lv = new LoadVars(); // このSWFからのリクエストである事をPHPに知らせる lv.isRequest = "myswf"; // onDataで変数名=値形式以外でも取得できる lv.onData = function(data) { if (data.length > 0) { buf = unescape(data).split('&'); setArr("tableNo", buf[0], "#"); setArr("tableID", buf[1], "#"); setArr("motherID", buf[2], "#"); trace("OK"); } else { trace("でーたなし"); } }; // デフォルトでPOSTとして送受信 lv.sendAndLoad(urlPHP, lv); /******************************* この取得した値で、ボタンを複製する部分は省略 その複数あるボタンでどんな変数をPHPに送るのか不明 ですが、sendAndLoadがわかれば問題なし? *******************************/ _root.oya_mc.ko1_btn.onPress = function() { // ここに上記のような送受信するコードを記述 //lv.resendVar="でーた"; // 等々・・・・ }; this.stop();
補足
何度もすみません、もう少し補足させてもらいます。作っているのは動的にスレッドオブジェクト(ボタンといっていたものです)の場所を動かす掲示板です。スレッドはテーマ別に分かれており、テーマを選ぶとそのテーマに関するスレッドが、その中身の情報(参加人数や発言数、スレッド番号など)によって動的に配置されます。 そのスレッドオブジェクトをクリックすることで、別のフレームにそのスレッドの情報を送り、中身を表示させるようにしたいのです。 教えていただいた方法ではうまくいかなかったので、別の方法でやってみたところ、値は遅れたのですがForループでまあしているために最後の値しか遅れません。スレッドごとのスレッド番号を送るにはどうすればいいでしょうか? 現在のソース this.tablemc(); function tablemc(){ MatherX = new Array(); MatherY = new Array(); for(t = 0; t <= Tables; t++){ var depth = t;//this.getNextHighestDepth(); var x = 60 * Children[t]; MatherX[TableID[t]] = x; var y = 60 * Indent[t]; MatherY[TableID[t]] = y; var props = {_x:x, _y:y}; //var Line[] = props; this.moveTo( MatherX[MotherID[t]] ,MatherY[MotherID[t]]) this.lineTo(x,y); var mcname = "Tobj" + depth; var table ="Tobj" + TableVoice[t] + TableJoin[t];//TableNo + TableNo; this.attachMovie(table,mcname, depth); test.atai = mcname; this[mcname]._x = x; this[mcname]._y = y; trace("table="+table); trace("mcname="+mcname); trace("depth="+Indent[t]); trace("props="+table_data[t]); //trace("voice"=TableVoice); this.onPress = function(){ trace("movie") test.send("http://spike.hit.dj.kit.ac.jp/~morioka/System/test.php","_blank", "Post"); } } }
- pide_piper
- ベストアンサー率33% (24/72)
とりあえず、参考にされているソースは忘れて。 Flash側にどのような項目がいくつあり、 PHP側でどんな変数名で受け取りたいのか示してください。 ところで、traceにてボタンクリックされている事を 確認できてますか? Flashのバージョンは? ということで、補足要求。
補足
説明不足ですみません Flashは8を使っています ボタンのクリックは確認できており var atai = 1; this.getURL("http://spike.hit.dj.kit.ac.jp/~morioka/System/test.php","_blank", "GET"); ではPHPで値が受け取れていることを確認できました。 今は試している状態なので、PHP側には[atai]という変数で受け取っています。 実際には TableNo = tableNo.split("#"); TableID = tableID.split("#"); Children = children.split("#"); でPHPからとった値(中身は) tableNo=1#2#3#4#5#6#7&tableID=1#2#3#4#10#11#12&motherID=#1#1#1#4#4#10 をforループで書くムービークリップに入れてもう一度それをクリックすることでPHPに返したいと思っています。 つたない説明ですみません。よろしくお願いします・
お礼
何とか解決しました。ありがとうございました。