D0410121 FLASHとPHPの連携(1):データの送受信
Name ぱぴよん
Date 2004年10月12日 (火) 17時43分
Message 環境は Macromedia FLASH MX、Windows2000 です。

憲ちゃんさんはじめまして。
FLASHを始めたばかりの初心者です。PHPも初めて間もないです^^;
PHPはJavaなどのようなHTMLへ埋め込むスクリプト言語です。
過去ログをいくつか見せて頂きました。憲ちゃんさんのとても丁寧なお答えにすごく感心しました^^
そこで憲ちゃんさんに教えていただこうと思いました。
質問よろしいでしょうか?文が長くなりそうですがどうぞよろしくお願いします。


今FLASHとPHPの連携動作について勉強中で、どうしてもうまくいかない所があり、質問させていただきました。

※()の中に書かれている文字列はコンポーネントなどの名前です。
今やろうとしている大まかな内容は
  1、外部ファイルの内容をFLASHへ取込んで表示。
  2、ボタン(btnEntry、btnErase)が押されたらPHPの処理をする。
というものです。
「1、」については取込み表示することができるようになりました^^
教えていただきたいのは「2、」についてです。

外部ファイルはCSVファイルを使用しています。(ファイル内容: text=A,B,C,D,E,・・・)
FLASH内ではファイルの内容をListBox(List)のItemとして追加し、表示しています。
ボタンは登録ボタン(btnEntry)と削除ボタン(btnErase)の2つあります。
登録文字列の入力テキスト(変数名:Input_txt)
ActionScriptは以下のようなソースです。(長いので少し省略しています)

◇ソース◇
System.useCodepage = true; // 文字化け防止。

var theFile = new LoadVars();
theFile.load("http://localhost/test.csv"); // データの読込み

// ListBoxへの出力処理。
theFile.onLoad = function(success) {
if(success) {
theFileArr = new Array();
theFileArr = theFile.text.split(","); // データの分割
for(i = 0; i < theFileArr.length; i++) {
List.addItem(theFileArr[i]); // データ行の出力
}
}
}

// 登録ボタンの処理。
btnEntry.onPress = function() {
if(Input_txt != NuN) {
var EntryWord = new LoadVars();
var Input = Input_txt;
Input_txt = NuN; // テキストの初期化。
EntryWord.send("http://localhost/work.php?Word=Input"); // 登録データをPHPへ送信
List.addItem(Input); // 登録データの出力
}
}

// 削除ボタン
btnErase.onPress = function() {
var Select = List.getSelectedIndex(); // 選択IndexNumber
var SelectItem_Value = List.getValue(); // 選択IndexValue
var EraseID = new LoadVars();

List.removeItemAt(Select); // 選択データの削除
EraseID.send("http://localhost/work.php?Word=&ID=SelectItem_Value"); // 登録データをPHPへ送信
}
※work.phpにFLASHから受け取った値(変数)で処理をしたい内容をプログラミングしています。

◇PHPの処理◇
$HTTP_GET_VARS["Word"];
$HTTP_GET_VARS["ID"];
でFLASHからの外部変数を受け取ろうとしています。
受け取った後、CSVファイルへの登録処理、削除処理をしています。


ここでFLASHの処理でうまくいかない所があるのです^^;
登録ボタン、削除ボタンをPressしたプログラム中に書いている
  LoadVars.send("URL");
なのです。私はこの一文を書くことで外部プログラムへ自動で変数をアップロードし、PHPプログラムを実行してくれるものとばかり思っていたのですが、どうもプログラムが実行されていないのです^^;
LoadVars.send("URL"); の使い方が間違っているのでしょうか?
それとも何か足りない処理があるのでしょうか?
PHPへの連携の仕方について気付いたことなどがありましたらご指摘ください。
インターネットで私なりに調べてみたのですが知りたい情報を得ることができませんでした・・・

とても長い文になってしまい本当に申し訳ありません。
憲ちゃんさんどうぞよろしくお願いします。
Response 01
2004年10月12日 (火) 21時16分> 憲ちゃん 
ぱぴよんさん、はじめまして♪

憲ちゃんはPHPに関してはほとんど知識がありませんので、何ともお答えのしようがないのですが。。
Flashの送信部分で・・・
「LoadVars.send( url );」は特に「GET」を指定しなければ「POST」送信になります。

 EntryWord.send("http://localhost/work.php?Word=Input");

この記述で「GET」送信を行っておられますが、相性ということもあるので、これを・・・

 EntryWord = new LoadVars();
 EntryWord.Word = Input_txt;←「EntryWord」オブジェクトに変数Wordを定義し値を代入
 Input_txt = NuN;
 EntryWord.send("http://localhost/work.php","_self","GET");
                     ※定義された変数と値を”work.php”に「GET」で送信

として試されてみてはいかがでしょう(^^;
そして「_self」は、上手く行かなければ「_top」又は「記述なし」でも実験してみてください。

IEの場合、書き換えたswfを再アップしても、キャッシュの旧swfを再生することがあります。
実験されるときはその都度、キャッシュを空にすると確実です(*^.^*)
Response 02
2004年10月13日 (水) 11時13分> ぱぴよん 
憲ちゃんさんおはようございます。 すばやい回答ありがとうございます^^
ご指摘頂いたようにプログラムを変更してみるとうまくいきました(@^0^@)

>「LoadVars.send( url );」は特に「GET」を指定しなければ「POST」送信になります。
ということはMacromediaのマニュアルを見て分かってはいたのですが、実際にどう影響するのかが全く分かっていませんでした^^;
POSTではダメだったんですね・・・
「POST」と「GET」の違いについてもう少し勉強した方がいいようですね(^_^;A

また、
>EntryWord.Word = Input_txt;←「EntryWord」オブジェクトに変数Wordを定義し値を代入
こんなこともできるんですね ビックリしました。

今回質問させて頂いたことですごく勉強になりました。憲ちゃんさん本当にありがとうございました^^とても分かりやすい解説でした^0^
分からないことや疑問に思ったことがありましたら、またお聞きするかもしれませんがその時はどうぞよろしくお願いいたします。

PS.だんだんと気候も秋らしく涼しくなってきていますが、風邪を引かれないように体には十分気をつけてくださいね^^
Response 03
2004年10月14日 (木) 11時38分> 憲ちゃん 
お気遣いありがとうございます(*^^)
そして、上手く行って良かったですね♪

昨日はうっかり見落としていて、先ほど気付いたのですが・・・

 EntryWord.send(http://localhost/work.php?Word=Input);

よく見ると、””で囲まれた部分は文字列ですから”Input”も文字列です。
したがってこの意味は、”Word=Input”という文字列を「GET」で送信となり、
$HTTP_GET_VARS['Word'] の値には、”Inputという文字列”が入ることになります!
送りたかったのは、変数「Input」の中に格納された”値としての文字列”でしたから、その場合は・・・

 EntryWord.send(http://localhost/work.php?Word= + Input );

このように、変数Inputを””の外に出して「+」で接続します(*^.^*)
これで試してみて成功なら単なる文法上のうっかりミスだったということになりますね(笑)

> 「POST」ではダメ・・・
ということではなく(;^_^A、PHP側で、$HTTP_POST_VARS['Word'];としておけば「POST」でOKです。
データの「受け側」と「送り側」で同じ形式に統一するということです。

「GET」と「POST」の違いは、簡単にいえば・・・
「GET」は、URLの一部としてデータが送られるもの。
だから”work.php?文字列データ”という書式で送ることもできるのです。
ただし、送れる文字列の長さに制限があるのであまりたくさんのデータを送ることができません。
(長さ制限はサーバによって異なります)
「POST」は、別途データが送られ、データ量に制限がありません。

したがって、どちらを使うかは用途次第ということになりますので、
短い単語や数字を送る場合は「GET」、大量の文章などを送る場合は「POST」というのが一般的です(^^)
Response 04
2004年10月14日 (木) 13時08分> ぱぴよん 
こんにちは^^  最近ますます寒くなってきましたね。朝と夜は寒くて大変です^^;

レスありがとうございます(#^-^#)

>昨日はうっかり見落としていて、先ほど気付いたのですが・・・

 EntryWord.send(”http://localhost/work.php?Word=Input”);

よく見ると、””で囲まれた部分は文字列ですから”Input”も文字列です。
したがってこの意味は、”Word=Input”という文字列を「GET」で送信となり、
$HTTP_GET_VARS['Word'] の値には、”Inputという文字列”が入ることになります!
送りたかったのは、変数「Input」の中に格納された”値としての文字列”でしたから、その場合は・・・

 EntryWord.send(”http://localhost/work.php?Word=” + Input );


そうなんですっ^^;
文字列になっていたのです・・・
FLASHからPHPへ送る外部変数が2つ必要になったのでやはり↓この方法を取ることにしたのです。
LoadVars.send(URL?外部変数, "_self", "GET");
その時にわたしも気付いたんです。本当にお恥ずかしいかぎりです^^;
traceをしっかりすればよかったんですが・・・
でもそのおかげ?といいますか こうして憲ちゃんさんに出会えたのでよかったかなぁとも思ったりしてます^^(プラス思考というか何というか^^;



>> 「POST」ではダメ・・・
>ということではなく(;^_^A、PHP側で、$HTTP_POST_VARS['Word'];としておけば「POST」でOKです。
データの「受け側」と「送り側」で同じ形式に統一するということです。

なるほど^^ そういうことだったんですね^^;


>「GET」は、URLの一部としてデータが送られるもの。
だから”work.php?文字列データ”という書式で送ることもできるのです。

「”work.php?文字列データ”こういう形はGETで外部変数を受け取るものだ」と勘違いをしていたようです^^;今回の件も安易にPHP側でGETで受け取ろうとしていたのが問題だったようですね。

いつも分かりやすく丁寧なお返事本当にありがとうございます^^
それでは失礼いたします。

このページの先頭へ