トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   サーバ関連【CGI・FCS・XMLSocket etc】
     Flash > PHP > PHP > Flash (全てPOSTで送信)で送った変数を表示させたい
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ichigo15
Åê¹ÆNo.32633
投稿日時: 2007-3-25 19:37
新米
居住地:
投稿: 19
使用環境:
Mac 10.4.8 , Flash8
Flash > PHP > PHP > Flash (全てPOSTで送信)で送った変数を表示させたい
こんばんわ。
質問をさせていただきますのでよろしくお願いいたします。

Flash > PHP > PHP > Flash 全てPOSTで送った変数を表示させたいのですが、
最後のFlashで「undefined」になってしまい、変数が取得できていない
状態です。
どのようにすれば、4)index.html+sample.swfにPHPから送られて来た
変数を読込めるのかご存じの方ご教授お願いします。


ブラウザで実行しています。
流れは以下です。

1)index.html (flashでパブリッシュしたhtml)+sample.swf
  btn1をクリックし「before = "flash to php";」をindex2.phpにPOSTで送信。
  ここでの「strAfter」は「undefined」が表示される。(index3.phpに何も表示されていないので当たり前?)

2)index2.php
  1)からPOSTで送信されてきた$_POST[before]は取得出来ている。
  SQL接続をし、該当データを元に複数の<form action = "http://?>ボタンを作成し適宜のボタンをクリック。

   送信する変数
    //SQL接続等のスクリプトは省略
    $strAfter = $_POST[before] . $row[sample](SQLから抜き出した変数);
    <form action = "http://localhost/index3.php" method = "POST">
     <input type = "hidden" name = "strAfter" value = "<?php echo $strAfter;?>">
    </form>
   例)リンゴ:<input type = "hidden" name = "strAfter" value = "flash to php100ringo">
     みかん:<input type = "hidden" name = "strAfter" value = "flash to php200mikan">
     ※みかんのボタンをクリックしたとする

3)index3.php
  2)からPOSTで送られてきた$_POST['strAfter'];は取得できている。
  (index2.phpの form actionのURLを「index3.php」にすると「flash to php200mikan」が表示される。)
  index2.phpでPOSTされた変数を表示後index.htmlにジャンプさせる

  <?PHP
  $strAfter = "after=" . $_POST['strAfter'];
  echo $strAfter; //Flashに取得されたい変数
  
  header("Location: http://localhost/index.html"); //もとのページに戻す
  exit;
  ?>


4)index.html+sample.swf
  index3.phpで表示された$strAfter(変数)を取得ができない。
  この時点で「ダイナミックテキストインスタンス名:strAfter」でも「「undefined」」表示。
  「flash to php200mikan」が表示されることを望む!!
  



●sample.fla

○1フレーム目
・配置 MC、ボタン、テキストフィールド
  ボタンインスタンス名:btn1
  ダイナミックテキスト変数名:strAfter

・アクション
fscommand("allowscale", false);
System.useCodepage=true;

_root.btn1.onRelease = function () {
objSendVars = new LoadVars();
objSendVars.before = "flash to php"; // これがphpに送信する変数
objSendVars.send("http://localhost/index.php", "_blank", "POST");
}

// _rootにstrAfterという変数のダイナミックテキストを用意したとする
var strAfter = null;

objLoadVars = new LoadVars();
objLoadVars.onLoad = function() {
strAfter = objLoadVars.after;
}

// PHPから変数を取得
objLoadVars.load("http://localhost/index3.php");

stop();


空野大二郎
Åê¹ÆNo.32638
投稿日時: 2007-3-25 21:36
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: Flash > PHP > PHP > Flash (全てPOSTで送信)で送った変数を表示させたい
長文失礼。ぱっと読んだ限りでは、ichigo15さんの状況は次のようになっていて、
「index3.php」から「sample.swf」へテキストデータが送信されて
いないのが原因のように思えます。

<データの名称と流れ>
・sample.swfの変数:before
sample.swf>index2.php

・index2.phpの変数:$strAfter
index2.php>index3.php

・index3.phpの変数:$strAfter
index3.php>index2.php

ichigo15さんが書かれているのを読む限り、「sample.swf」が読み
込まれてすぐ「index3.php」からデータを読み込んでいます。
// PHPから変数を取得
objLoadVars.load("http://localhost/index3.php");


要するに、「index3.php」は、「index2.php」からデータをPOSTで
送信するときと、「sample.swf」が読み込まれた直後の2回呼び
出されています。
「index2.php」から呼び出されたときは、変数$strAfterを受け
取って結果を返していますが、「sample.swf」からの時は、
LoadVars.load()関数を使って何のデータも送信せずに受信して
いるので、返されるデータも空になっているのでしょう。

LoadVars.load()やLoadVars.sendAndLoad()関数を使ってデータを
読み込める条件は、指定したurlからテキストデータが帰ってくる
ときだけです。
ichigo15さんがFlashへデータを送信するタイミングは、
「index2.php」からformが送信されたあとになるので、上記関数の
条件に当てはまりません。

php(HTML)からFlashへデータを渡すには、srcの部分に
クエリーをつけるか、FlashVars属性を使う方法があげられます。
または、「index3.php」が得た結果($strAfter)を一時的にサーバに保存し、
Flashが任意のタイミングで読み込む方法が考えられます。

利便性を求めるなら「index2.php」が行っているFormの処理を
Flashが肩代わりして、「sample.swf>index2.php>sample.swf」
「sample.swf>index3.php>sample.swf」とすれば、sendAndLoad()
だけで済むようにも思えます。


----------------
空野 大二郎 アニメーター作家
桜の道

ichigo15
Åê¹ÆNo.32639
投稿日時: 2007-3-25 22:44
新米
居住地:
投稿: 19
使用環境:
Mac 10.4.8 , Flash8
Re: Flash > PHP > PHP > Flash (全てPOSTで送信)で送った変数を表示させたい
空野大二郎 さま

早速のお返事ありがとうございます。

やはりindex3.phpのデータはsample.swfに伝わっていないのですね。。(悲

>利便性を求めるなら「index2.php」が行っているFormの処理を
Flashが肩代わりして、

お!これは大きなアドバイスだと思い
sample.flaの1フレーム目にボタンを新たに作りテストをしてみました。
が、しかしindex2.phpが開く事無く(当たり前)結果は「undefined」 でした。。
(勘違いしていたら申し訳ないです。。)

新しいボタンスクリプト
on(press)
{
objSendVars = new LoadVars();
objSendVars.before = flashtophp;
objLoadVars = new LoadVars();
objLoadVars.onLoad = function(success)
{
if (success)
{
trace(objLoadVars.strAfter);
strAfter.text = this.strAfter;
}
};
objSendVars.sendAndLoad("http://localhost/index2.php", objLoadVars, "POST");
}



index2.phpはSQLから呼び出したデータが複数あり、
そのデータに対していくつも<form action~>が存在し「value」は様々なので、
index2.phpの表示は不可欠なのです。
ユーザがクリックした<form action?>でPOST受信した変数が欲しいのです。
と、いう理由でindex3.phpにsample.swfで欲しい文字列(例:after=flash to php200mikan)
だけを書き出しているのです。
この構造からいくとやはり
「sample.swf > index2.php > index3.php > sample.swf 」
しかないと思っているのです。
この流れでPOSTを最後のsample.swfが受け取れるような方法がありましたら
アドバイスをいただけると助かります。


ひろゆき
Åê¹ÆNo.32643
投稿日時: 2007-3-25 23:32
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: Flash > PHP > PHP > Flash (全てPOSTで送信)で送った変数を表示させたい
引用:
ichigo15さんは書きました:
この構造からいくとやはり
「sample.swf > index2.php > index3.php > sample.swf 」
しかないと思っているのです。
この流れでPOSTを最後のsample.swfが受け取れるような方法がありましたら
アドバイスをいただけると助かります。

すでに、空野さんが回答されていると思いますが。
引用:
[php(HTML)からFlashへデータを渡すには、srcの部分に
クエリーをつけるか、FlashVars属性を使う方法があげられます

または、「index3.php」が得た結果($strAfter)を一時的にサーバに保存し、
Flashが任意のタイミングで読み込む方法が考えられます。

index3.php -> index.html -> sample.swf の流れにする必要があるように思います。

例えば、
<?PHP
	//$strAfter = "after=" . $_POST['strAfter'];
	//echo $strAfter;
	$strAfter = $_POST['strAfter'];
	header("Location: http://localhost/index.html?after="+$strAfter);
	exit;
?>
として、JavaScript で、swf に変数を渡すようにすれば、可能でしょうか。

location.search」でフォーラム内を検索してみましょう
#「すべて表示」で、たくさん表示されます。

あるいは、index3.php で、
FlashVars を含んだタグを吐き出させる方が確実な気はしますが。


----------------
質問する際は、回答者に具体的な情報を与えてください。

空野大二郎
Åê¹ÆNo.32644
投稿日時: 2007-3-26 0:21
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: Flash > PHP > PHP > Flash (全てPOSTで送信)で送った変数を表示させたい
これまでで、文字列(例:after=flash to php200mikan)を「index3.php」から
「sample.swf」へ受け渡しできていないことが問題だと分かりました。
なおかつ、「(すべてPOSTで送信)」でとなると、データのやりとりを
ユーザーから隠す必要があると言うことですね。
そうなると、ブラウザのソースにデータが表示されるクエリストリングを
使う方法や、FlashVarsは使えないことになります。

結果的に、考えつく限りでは残された方法しかありません。
または、「index3.php」が得た結果($strAfter)を一時的にサーバに保存し、
Flashが任意のタイミングで読み込む方法が考えられます。


既に廃案ですが、クエリーをつけるとは、HTML書き出し時に
「sample.swf?after=flash to php200mikan&」のようにして引数を
渡す方法です。
FlashVarsはFlash TechNoteを参照して下さい。
FlashVars を使用して SWF へ変数を渡す


余談ですが、
>利便性を求めるなら「index2.php」が行っているFormの処理を
>Flashが肩代わりして、

とは、index2.phpはSQLから呼び出したデータをFlash側で受け取り、
form actionの機能をFlashの機能を使って実行する方法です。
新たにユーザーが選択可能なアプリケーションを作成することになるので
手間はかかります。


----------------
空野 大二郎 アニメーター作家
桜の道

ichigo15
Åê¹ÆNo.32646
投稿日時: 2007-3-26 0:45
新米
居住地:
投稿: 19
使用環境:
Mac 10.4.8 , Flash8
Re: Flash > PHP > PHP > Flash (全てPOSTで送信)で送った変数を表示させたい
空野大二郎 さま
ひろゆき さま

日曜日の遅い時間だというのにアドバイスありがとうございます。

空野大二郎 さまにアドバイスをいただいた

引用:

既に廃案ですが、クエリーをつけるとは、HTML書き出し時に
「sample.swf?after=flash to php200mikan&」のようにして引数を
渡す方法です。


で解決しました!!ありがとうございます!!!
この形であればたくさんのPOSTがあってもswfで受け取ることができますね。

引用:

または、「index3.php」が得た結果($strAfter)を一時的にサーバに保存し、
Flashが任意のタイミングで読み込む方法が考えられます。


この方法は、また、時間のあるときに試してみたいと思います。



解決したあとの状態)
※似たような状態で悩んでいる方へ

1)index.html + sample.swf
 ○1フレーム目
 ・配置MC、ボタン、テキストフィールド:変更無し
 ・アクション
  fscommand("allowscale", false);
  System.useCodepage=true;

  _root.btn1.onRelease = function () {
  objSendVars = new LoadVars();
  objSendVars.before = "flash to php"; // これがphpに送信する変数
  objSendVars.send("http://localhost/index2.php", "_blank", "POST");
  }
 ・index.html
  <param name="FlashVars" value="strAfter=<?PHP echo $_POST[strAfter];?>">
  <embed src="index.swf" FlashVars = "strAfter=<?PHP echo $_POST[strAfter];?>" ?
  を追加

2)index2.php
 ・送信する変数
  <form action = "http://localhost/index.html" method = "POST">
     <input type = "hidden" name = "strAfter" value = "<?php echo $strAfter;?>">
   </form>

3)index.html + sample.swf
  ダイナミックテキスト変数:strAfterにindex2.phpよりPOSTで送られて来た変数が受け取れた!


本当にありがとうございました!!!

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops