一回も披露したことのない豆知識

QNo.2601015で質問させて頂いた者なのですが、
もう一つ理解出来ない事がありましたので 再度質問させて頂きます。

変数1(value1)と変数2(value2)があり、それらを入力して
ボタンを押すと、変数1+変数2の結果がPHP側で処理され、Flash側のtraceで出力される単純なプログラムを作成しています。
みなさんのお力で なんとかFlash側でデータを受け取るところまでは
いけたのですが、受け取った値が”undefined”となってしまいます。
undefinedとは変数が未定義である時に表示されるのですよね?
ソースのミスはないと思うのですが。。
下記がソースです。何度もすみませんが、よろしくお願いします。

//Flash側
on (release) {
formData = new LoadVars () ;
formData.value1 = value1 ;
formData.value2 = value2 ;

/受信用
receiveData = new LoadVars () ;

receiveData.onLoad = function(){
trace(receiveData.sum) ;
}

formData.sendAndLoad("​http://localhost/phptest.php",​ receiveData, "GET") ;


//PHP側
<?php
$sum = $HTTP_GET_VARS['value1'] + $HTTP_GET_VARS['value2'] ;
echo ('sum=' . $sum);
?>

環境: windows XP , XAMPP, DREAMWEAVER8,FLASH8, IE6

A 回答 (2件)

#1です。



すみません。
大分遅くなってしましました。
そして,
> formData と receiveData が逆では?
という寝ぼけたことを書いて申し訳ございませんでした。


=====================

今,ふと気づいたのですが。

> php側ではsum = 7 と出るのでphpの方も問題はないと思います。

ここの,「sum = 7」は手で入力されたものですか?
それとも,
実際に出力されたものをコピペで貼り付けたものですか?

なんでこんな変なことを聞くかというと,スペースが気になったのです。
「sum=7」←スペース無し
こうでないといけませんよ。


=====================


私は何も言ってないのに,自己解決され,
勝手に感謝されて,大変申し訳ない思いのご質問があるのです。


「PHPからデータをFlash(swf)に送りたいのですが」
http://oshiete1.goo.ne.jp/qa2628834.html
 ↑教えて!goo ↓OKWave (同じです)
http://okwave.jp/qa2628834.html


たった今,
「補足」と「お礼」があったことに気づいて,
返事ができなかったことに反省しながら「お礼」を読ませていただいていたのですが,
そのお礼にありますように,

> 下記のような記述をしました。
>  echo '&name2=.$name2.'&';

これで解決されたそうです。

シングルクォーテーション(')が3つあるという,
私にとっては非常に理解しがたいプログラムなのですが,
これは, '文字列' という意味ではなくて 'エスケープ という意味なのでしょうかね...???
よくわかりませんが,
エスケープシーケンスの意味であれば,シングルクォーテーションが3つあるという意味がわかります。
「&」 と 「;」 をエスケープしているのでしょう。

本題はそれではなくて,
「name2=.$name2」
スペースが入っていませんよ。
このスペースの有無が実際の表示にどう影響するのかわかりませんが,
プレーンな外部テキストをFlashにロードさせるときは,
スペースも文字扱いになるので,
不要なスペースは入れてはならないのです。

例えば複数の変数と値を送信する場合,
こうしないとなりません↓。

name1=ABCD&name2=EFGH&name3=IJKL

スペースは一切無しです。
また,変数ごとに改行を入れたい場合は
こうなります↓。

name1=ABCD&
&name2=EFGH&
&name3=IJKL

なぜ,ABCD のあとに & があるかというと,
& を入れておかないと改行コードまで値扱いになるからです。
例えばこれ↓だと,

name1=ABCD
&name2=EFGH

こういう↓扱いになるのです。

name1=ABCD↓&name2=EFGH

name1 の値は ABCD ではなくて ABCD↓ (↓は改行コードの意味)になってしまいます。
これで誤作動を起こす場合があります。
例えばこうしておくと↓,

name1=ABCD&
&name2=EFGH&

こういう↓扱いになるのです。

name1=ABCD&↓&name2=EFGH&

改行コードはどちらにしてもデータ内に入ってしまいますが,
name1 の値は ABCD になります。

つまりそれくらいシビアなのです。



また,見当はずれなことを書いているかもしれませんが,
気になったので,遅くなりましたが,回答させていただきました。
    • good
    • 0

なにしろ PHP はダメな者ですが,


(なぜダメかというと,わからない上に,検証する環境を持っていない....。)


formData と receiveData が逆では?

formData.sendAndLoad("http://localhost/phptest.php", receiveData, "GET") ;
  ↓   変更?   ↓
receiveData.sendAndLoad("http://localhost/phptest.php", frormData,"GET") ;


あと,
trace をたくさん入れてみて,
どこで undefined になるのか確かめてみられたら,
原因に近づけると思います↓。


//Flash側
on (release) {
trace("A:value1=" + value1 + ",value2=" + value2);
formData = new LoadVars () ;
formData.value1 = value1 ;
formData.value2 = value2 ;
trace("B:value1=" + formData.value1 + ",value2=" + formData.value2);

この回答への補足

sassakunさん 度々ありがとうございます。
早速、
receiveData.sendAndLoad("​http://localhost/phptest.php",​ frormData,"GET") ;
の様に変更してみたのですが、だめでした。ボタンを押しても反応しませんでした。

またtraceを下記のように配置し、
value1=2,value2=5で実行してみた所↓
_____________________________________________________________

on (release) {
trace("A:value1=" + value1 + ",value2=" + value2);

formData = new LoadVars () ;
formData.value1 = value1 ;
formData.value2 = value2 ;

receiveData = new LoadVars () ;

receiveData.onLoad = function(){
trace(receiveData.sum) ;
trace("B:value1=" + formData.value1 + ",value2=" + formData.value2);
}

formData.sendAndLoad("http://localhost/phptest.php", receiveData , "GET") ;
trace("C:value1=" + formData.value1 + ",value2=" + formData.value2);
}
______________________________________________________________

A:value1=2,value2=5
C:value1=2,value2=5
undefined
B:value1=2,value2=5

と出力されたので 変数にはちゃんと値が渡っていると思います。

また↓の様にプログラムしてphp側のsumの値をみたところ
on (release) {
formData = new LoadVars () ;
formData.value1 = value1 ;
formData.value2 = value2 ;

formData.send("http://localhost/phptest.php", "_self", "GET");


php側ではsum = 7 と出るのでphpの方も問題はないと思います。

何がいけないのでしょう。。
うーん わかりません。。

補足日時:2006/12/15 20:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!