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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   サーバ関連【CGI・FCS・XMLSocket etc】
     CGIとのデータ連係について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ちーむどらむすこ
Åê¹ÆNo.6937
投稿日時: 2004-5-6 22:13
Bak@Fla巨匠
居住地: とうきょう
投稿: 16
使用環境:
Win7,FlashCS4
CGIとのデータ連係について
ハゲ輝彦です。よろしくです。

特定のアドレスからのアクセスの際に、
フラッシュ内のボタンを非表示にするということを試しています。

現状は、001.swf・002.swfといった番号順に並んでいるフラッシュを、
perlでパラメータを持たせることでHTML表示をしています。
aaa.cgi?number=001のときは001.swfを、
aaa.cgi?number=002のときは002.swfを、画面上に表示しています。
------------------------------------------------------------
&ReadParse();

# フォーム内容の処理
while(($key,$val) = each(%in)){
中略
}

$number = $in{'number'};

$head = <<"EOM";
Content-type: text/html \n\n
<html>
<body>
  フラッシュを表示するタグ
</body>
</html>
EOM

&jcode'convert(*head,'sjis');

print $head;
------------------------------------------------------------
といった感じです。

で、考えたのが、フラッシュ内のボタンを、
もう一つパラメータをつけ、そのパラメータをフラッシュ側へ
送ってみようと思い、下記のように追加しました。
------------------------------------------------------------
#判別用の数値 1で表示 2で非表示
#aaa.cgi?number=001&mode=1という風にしようと思いました
$mode = $in{'mode'};

#ここからフラッシュにデータを渡しています。
print "Content-type: text/plain\n\n";
print "modedata=$mode";

$head = <<"EOM";
 中略
EOM

&jcode'convert(*head,'sjis');

print $head;
------------------------------------------------------------
という感じです

flashの方には、
------------------------------------------------------------
CGIFile="../../cgi-bin/comics/count.cgi";
loadVariables(CGIFile,this,"POST");
------------------------------------------------------------
を記述したMC「load_mc」をメインタイムライン上に配置し
それに
------------------------------------------------------------
onClipEvent(data){
_parent.dispcount=this.modedata;
}
------------------------------------------------------------
とクリップイベントを記述して
メインタイムライン上においたダイナミックテキスト「dispcount」
にまずは、modedataの価が取得できるかどうかを試しています。
(森巧尚さんの「ActionScript+CGIプログラミング」のまんまで恐縮ですが…)

が、現状として、
modedataがHTML内に表示されてしまう、
フラッシュの方で数値による判別ができていない、
という問題がでてしまいました。

ダイナミックテキスト「dispcount」には、
textplainで送っているはずの数値で無く(それは読み飛ばされて)、
それより下のタグが全て参照されてしまいます。
(なお、flashはバージョン5で製作をしたいのです)

長くなってしまいましたが、回避する方法は有りますでしょうか。
よろしくお願いいたします。
森 巧尚
Åê¹ÆNo.6940
投稿日時: 2004-5-6 23:29
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: CGIとのデータ連係について
引用:
現状として、
modedataがHTML内に表示されてしまう、
フラッシュの方で数値による判別ができていない、
という問題がでてしまいました。

どういう状況で何が問題なのかがわかりにくいですね。
「modedataがHTML内に表示」とは、modedataが別ウィンドウで表示されるんですか?
「フラッシュの方で数値による判別ができていない」とは、Flashのどこかで数値による判別をさせているのでしょうか?

引用:

ダイナミックテキスト「dispcount」には、
textplainで送っているはずの数値で無く(それは読み飛ばされて)、
それより下のタグが全て参照されてしまいます。
(なお、flashはバージョン5で製作をしたいのです)

感じとしては、CGIのプログラムミスで、
「CGIが正しい値を出力していない」ような気がしますね。

CGIをFlashから呼ばずに、CGI単体だけで実行してみて、必要なデータが出力されていますか?
「それより下のタグが全て参照」ってありますが、まさかhtmlの中身もデータとして一緒に送ってませんか。
modedataにhtmlの中身がくっついていたら、それは正しく動作しないと思いますよ。

そもそも「Flash内のボタン」を押して「CGIへデータを渡して」「CGIからそのデータを受け取って」「フラッシュ内のボタンを非表示にする」ってことをしなくても、
「Flash内のボタン」を押して「フラッシュ内のボタンを非表示にする」ってすればいいだけでは???

それとも「Flash内のボタン」を押したら別ウィンドウが開いて、別のswfが表示されるということでしょうか。それなら必要なアドレスを必要な数用意してジャンプさせればいいと思いますが。(getURLを使っていないからそうではないのでしょうか)


----------------
森 巧尚
http://www.ymori.com

ちーむどらむすこ
Åê¹ÆNo.6968
投稿日時: 2004-5-7 10:56
Bak@Fla巨匠
居住地: とうきょう
投稿: 16
使用環境:
Win7,FlashCS4
Re: CGIとのデータ連係について
おお、森博士、現る!!(喜)

ハゲ輝彦です。
説明不足ですいません。
補足説明させていただきます。

[目的]
現在、ムービーを別ウィンドウ表示させていて、
A、B、2つのサイトより見られるように考えています。
その際、Aのサイトからこの別ウィンドウを開いた場合には
FLASH内のボタンを表示し、Bのサイトより別ウィンドウを開いた場合には
FLASH内のボタンを非表示にしたいと考えています。

現状、その為のテストとして以下の事を行っています。

アドレスは下記のようになっています。
http://www.・・・.co.jp/cgi-bin/test.cgi?number=001&mode=1

cgiファイルを用意
(長くなりますが、記述させていただきます)
===================================
#!/usr/local/bin/perl

# ライブラリ読み込み
require "cgi-lib.pl";
require "jcode.pl";

# フォームデータ読み込み
&ReadParse();

# フォーム内容の処理
while(($key,$val) = each(%in)){
&jcode'convert(*val,'euc');
$val =~ s/\n/<br>/g;
$val =~ s/</</g;
$val =~ s/>/>/g;
$val =~ s/,/,/g;
$in{$key} = $val;
}

# 各パラメータの抽出
# $numberはフラッシュのファイル名
# $modeはボタン表示判別用
# 1のとき表示、0のとき非表示
$number = $in{'number'};
$mode = $in{'mode'};

# ここよりフラッシュへ$modeの値を
# modedataの名前で送る
print "Content-type: text/plain\n\n";
print "modedata=$mode";

# ここよりHTMLを変数に格納
$head = <<"EOM";
Content-type: text/html \n\n
<html>
<head><title>・・・</title>
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS">
</head>
<body topmargin=0 leftmargin=0 marginwidth=0 marginheight=0 scrolling="no" frameorder="no" bgcolor="#FFFFFF">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"
WIDTH=100% HEIGHT=100%>
<PARAM NAME=movie VALUE="data/$number.swf"> <PARAM NAME=menu VALUE=false> <PARAM NAME=quality VALUE=best> <PARAM NAME=bgcolor VALUE=#FFCCCC> <EMBED src="data/$number.swf" menu=false quality=best bgcolor=#FFCCCC WIDTH=100% HEIGHT=100% TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>
</OBJECT>
</body>
</html>
EOM

# $headをsjisに変換
&jcode'convert(*head,'sjis');

# HTMLを出力
print $head;

exit;
===================================
次に森さんの本に書かれているスクリプトをFlash内に記述し、
まずは、"dispcount"にcgiより抜き出したいdataが表示されるかどうかのテストをしています。

予定としては、取得できるdataがmodedata=1となって
"dispcount"には"1"と表示されるはずだったのですが…。

起こった問題として
cgiのファイル自体にはアクセスしているがFlash内の"dispcount"に出る表示が
Content-type: text/html \n\n ? 以下の文章が全て表示されてしまう。
(Flashとやり取りしたいdataはその上の行に書いてあるのに…)
また、なぜかFLASHを張り付けてある外側HTMLにテキストとして
modedata=1Content-type: text/html
と表示されてしまいます。

単純に"dispcount"に"1"と表示させたいだけなのですが…。
うまく動いておりません。

よろしくお願いします。
rin-ko
Åê¹ÆNo.6969
投稿日時: 2004-5-7 11:20
職人
居住地: 東京
投稿: 397
使用環境:
MacOSX10.5/10.4
WinXP SP3
MX2004Pro/CS3
Re: CGIとのデータ連係について
ハゲ輝彦さん、こんにちは。
loadVariables()は、変数をムービーに読み込むアクションなので、CGIはムービーに読み込みたい変数と値のみを出力する設計にしなくちゃいけません。つまり、以下は不要です。
# ここよりHTMLを変数に格納
$head = <<"EOM";
Content-type: text/html \n\n
<html>
<head><title>・・・

CGIでHTMLを吐かせたいなら、getURL()を使うとよいんじゃないでしょうか。
森 巧尚
Åê¹ÆNo.6978
投稿日時: 2004-5-7 13:32
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: CGIとのデータ連係について
やっぱりどういう状況で何が問題なのかがわかりにくいですね。
こちらの質問にちゃんと答えてくれたら、もうちょっと答えやすいのですが・・・
引用:
Aのサイトからこの別ウィンドウを開いた場合には
FLASH内のボタンを表示し、Bのサイトより別ウィンドウを開いた場合には
FLASH内のボタンを非表示にしたいと考えています。


こういう状況ですか?
1)www.A.com、www.B.comの2つのサイトがあって、それぞれに同じswfがある状況ですね。
  www.A.com/a.swf、www.B.com/a.swf。
2)www.A.com/a.swfのボタンを押すと、001.swfが開き、001.swfの中のボタンを表示する。
3)www.B.com/a.swfのボタンを押すと、001.swfが開き、001.swfの中のボタンを非表示にする。

まず、呼び出される側の001.swfの中でボタンを表示/非表示にする処理は行っているのでしょうか?
「呼び出される側」にmodedataを渡したいということであれば、今のCGIは間違いです。
loadVariablesは「呼び出す側」にCGIで生成したデータを読み込むので、相手にはデータは送られません。
※カウンターを参考にされているようですが、カウンターはCGIの値を自分自身に読み込んで表示しているだけで、値を表示させるswfが別にあるわけではありません。
呼び出すhtmlをCGIで作ろうとされているようですが、それだったらFlashの呼び出し方は間違いです。
rin-koさんが言われているようにgetURLを使わないといけません。

「呼び出される側」にmodedataを渡したいなら、getURLでCGIを呼び出してそのCGIで生成するHTMLにmodedataを記述して渡さなければいけません。
CGIで作る「htmlの中」のswfの後ろに「data/001.swf?mode=1」と記述します。CGIでの実際の記述なら「data/$number.swf?mode=$mode」ですが、CGIはお分かりですよね。
呼び出される側のflashではmodeに入っている値を見て、ボタンの表示/非表示を切り替えればできると思います。

$number.swfを使っているということは、たくさんswfがあって、それらの管理や修正が大変なのでCGIでまとめようとされているようですが、結局全てのswfを修正しないといけないですよ。

そもそも、サイトが2種類あるのなら、サイトA用のボタン有りswfとサイトB用のボタンなしswfの2バージョンを作って別々に起動するように全部作り直してしまえば、いいだけではないでしょうか。
これならばCGIはいっさい使わずに「目的」を達成できると思いますが。


----------------
森 巧尚
http://www.ymori.com

ちーむどらむすこ
Åê¹ÆNo.6991
投稿日時: 2004-5-7 17:07
Bak@Fla巨匠
居住地: とうきょう
投稿: 16
使用環境:
Win7,FlashCS4
Re: CGIとのデータ連係について
rin-koさん、おありがとうございます。
getURLは考え外でした...

森博士、たびたび、ごめんなさい。
まず、
引用:
ではないです。
swfがあるのはwww.A.comのみ。
そこにアクセスできるのは、A、Bのサイトからのみ。
そしてwww.A.comからだと、ボタンを表示
www.B.comからだと非表示
にしたいのです。
引用:

「呼び出される側」にmodedataを渡したいなら、getURLでCGIを呼び出してそのCGIで生成するHTMLにmodedataを記述して渡さなければいけません。
CGIで作る「htmlの中」のswfの後ろに「data/001.swf?mode=1」と記述します。CGIでの実際の記述なら「data/$number.swf?mode=$mode」ですが、CGIはお分かりですよね。
呼び出される側のflashではmodeに入っている値を見て、ボタンの表示/非表示を切り替えればできると思います。

これはつまり、HTML内にあるData「data/001.swf?mode=1」をFlashが読みとれればいいのですか?
というか、できるのですか?
swfの後ろに付いてあるパラメータ(mode=1)を取得する方法とは?

それが可能なのであれば、その方が全然助かります。
お願いしマッス!!
森 巧尚
Åê¹ÆNo.6997
投稿日時: 2004-5-7 18:21
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: CGIとのデータ連係について
うーん。やっぱりどういう状況かわかりにくいですね。
引用:
そこにアクセスできるのは、A、Bのサイトからのみ。

そのA、Bのサイトからは、具体的にどのように「アクセス」するのでしょうか。
それぞれのサイトのHTMLからのリンク?それぞれのサイトのswfのボタンからのリンク?
また、呼び出すのはswfを直接?htmlを呼び出す?

こういういくつものファイルにまたがって動作するシステムの場合、
「全ての状況」が明確にならないとどこが問題なのか見つけられないですよ。

引用:
HTML内にあるData「data/001.swf?mode=1」をFlashが読みとれればいいのですか?

HTMLのタグにある、swfの後ろに「?mode=1」と付けると(objectとembedの2ヶ所にswfがあるので2ヶ所)そのswfのルートにmode=1という変数が入ります。
わざわざ取得しなくても「mode」の変数を調べれば入っています。


----------------
森 巧尚
http://www.ymori.com

ちーむどらむすこ
Åê¹ÆNo.7000
投稿日時: 2004-5-7 19:30
Bak@Fla巨匠
居住地: とうきょう
投稿: 16
使用環境:
Win7,FlashCS4
Re: CGIとのデータ連係について
ハゲ輝彦です。
またまたすいません。森博士。
何度もお手数かけます...。
引用:

そのA、Bのサイトからは、具体的にどのように「アクセス」するのでしょうか。
それぞれのサイトのHTMLからのリンク?それぞれのサイトのswfのボタンからのリンク?
また、呼び出すのはswfを直接?htmlを呼び出す?

それぞれのサイトのHTMLからのリンクで、htmlを呼び出します。

引用:

HTMLのタグにある、swfの後ろに「?mode=1」と付けると(objectとembedの2ヶ所にswfがあるので2ヶ所)そのswfのルートにmode=1という変数が入ります。
わざわざ取得しなくても「mode」の変数を調べれば入っています。

modeの変数を調べると言うと……??
やり方、もうちょっとだけ具体的に…。
(すいません。己の理解力不足で…)


森 巧尚
Åê¹ÆNo.7005
投稿日時: 2004-5-7 21:15
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: CGIとのデータ連係について
ハゲ輝彦さんが、このスレの最初の方でご自分でされていた方法でできますよ。
ダイナミックテキストのテキストボックスをルートに用意して、変数名「mode」と付けておけば、その中に表示されます。
その後の変数の使い方はご存知ですよね。「if (mode == 2) { button_mc._visible = false; }」などでムービークリップを非表示にすればいいわけです。


----------------
森 巧尚
http://www.ymori.com

ちーむどらむすこ
Åê¹ÆNo.7007
投稿日時: 2004-5-7 22:25
Bak@Fla巨匠
居住地: とうきょう
投稿: 16
使用環境:
Win7,FlashCS4
Re: CGIとのデータ連係について
森はかせ?!
ありがとうございます。
できました。ばっちりでした。
ややこしくし過ぎていた様でした。
感謝いたします!!

以上、御報告!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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