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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   サーバ関連【CGI・FCS・XMLSocket etc】
     flashからプロバイダ提供のCGIへデータを送る
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
Åê¹ÆNo.2562
投稿日時: 2003-12-28 22:39
flashからプロバイダ提供のCGIへデータを送る
度々お世話になります。erikoです。
CGI絡みのネタ(?)には触れたことがないのですが、(CGIプログラムも全く組めません)
プロバイダから提供されているフォームCGIメールを利用してflashからCGIメールを送りたいと思っています。

過去ログを調べたのですが、これだという答えを見つけられず、考えあぐねて書籍を購入したのですが未だ解決にいたっていません。
どなたかご教授いただければと思います。

テキスト入力に設定された変数をCGIへ渡すボタンアクションを
on (release) {
//文字化け防止
	System.usecodepage = True;
//変数設定
	myLoadVars = new LoadVars();
	myLoadVars.dataA = dataA;
	myLoadVars.dataB = dataB;
	myLoadVars.dataC = dataC;
	myLoadVars.send("/cgi-bin/formmail.pl","_blank","POST");
}

と設定しています。

HTMLからCGIにデータを渡すにはFORMタグを使用して
<FORM METHOD="post" ACTION="/cgi-bin/formmail.pl">
<INPUT TYPE="hidden" NAME="recipient" VALUE="???@?????">
[入力項目]
<INPUT TYPE="submit" VALUE="送信">
</FORM>

と記述すると思うのですが、必要な項目をflashではどのようにして設定してあげれば良いのでしょうか?

myLoadVars.hidden = "???@?????";

などと試してみたのですが駄目でした。・・全然分かってません?

現段階でのテストファイルはこちらです。flaファイルはこちらです。
flaファイルを掲げても同じ環境下でないとコメントしにくいとは思うのですが、何かアドバイス等をいただければと思います。
よろしくお願いいたします。

初心者の部屋に書くべきかと思ったのですが、一応CGI関連だということでこちらでスレッドをたてさせていただきました。
youich
Åê¹ÆNo.2563
投稿日時: 2003-12-28 23:27
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: flashからプロバイダ提供のCGIへデータを送る
引用:


テキスト入力に設定された変数をCGIへ渡すボタンアクションを
on (release) {
//文字化け防止
	System.usecodepage = True;
//変数設定
	myLoadVars = new LoadVars();
	myLoadVars.dataA = dataA;
	myLoadVars.dataB = dataB;
	myLoadVars.dataC = dataC;
        myLoadVars.recipient = "???@?????"
	myLoadVars.send("/cgi-bin/formmail.pl","_blank","POST");
}

と設定しています。

たぶん、recipientの値は、受取り人ということで
erikoさんのメルアドを入れとけば、いいんじゃないかと思います。
<INPUT TYPE="hidden" NAME="recipient" VALUE="???@?????">

だいたいフォームタグ内の部品のNAMEがloadVarsの変数名になり
VALUEがその値になると考えてよろしいんじゃないでしょうか。


----------------
- yo

うすあじ
Åê¹ÆNo.2565
投稿日時: 2003-12-29 0:23
職人
居住地: 東京都杉並区
投稿: 211
使用環境:
FlashCS5.5 ,MacOSX 10.6.8
Re: flashからプロバイダ提供のCGIへデータを送る
引用:
などと試してみたのですが駄目でした。

駄目というのはどのような状況でしょうか?
ボタンを押しても反応しないのか、CGIのエラーが出るのか、
なんで駄目と判断したのかがわかると、皆さんも答えやすいかと思います。
幸いyouichさんが解答されていますので、その答えで解決するといいですね。

ちなみに、プロバイダから提供されているCGIでしたら、HTMLでは動作しましたか?
その辺も書いておくといいと思いました。


----------------
うすあじ(twitter)
うすあじFlash研究所
HSPセンター

ゲスト
Åê¹ÆNo.2566
投稿日時: 2003-12-29 9:17
Re: flashからプロバイダ提供のCGIへデータを送る
youichさん、ご返信ありがとうございます。
myLoadVars.recipient = "???@?????"

なるほど!と思い試してみたのですが結果は同じく、cgi-bin/formmail.pl画面が出て値は渡されていない(正常終了していない)ようでした。

usuajiさん、アドバイスありがとうございます。
何度も質問内容を読み返して整理したつもりだったのですが、まだまだ足りなかったなぁと反省しています。
引用:
駄目というのはどのような状況でしょうか?

駄目とは、こちらを実行した結果、ボタンに反応しCGI画面は出るのですが、CGIエラー(?)になります。
上に同じcgi-bin/formmail.pl画面が出て値は渡されていない画面が出るので駄目ということでした。

HTMLの場合は正常に動作しています。こちらの画面で実行した後出る画面を正常終了と述べています。

ご説明が足りないかもしれませんが、よろしくお願いいたします。
うすあじ
Åê¹ÆNo.2568
投稿日時: 2003-12-29 10:18
職人
居住地: 東京都杉並区
投稿: 211
使用環境:
FlashCS5.5 ,MacOSX 10.6.8
Re: flashからプロバイダ提供のCGIへデータを送る
いろいろ試しているようですね。

Flashのボタンはある程度、機能している。
CGIは呼ばれている。
CGIの確認表示が表示されない。
メールは来ない。

という状況ですね。
一応思いつくことを書いておきます。

1.youichさんの指摘の行は、行末に;が必要です。

2.dataAには、この段階で値が入っているのでしょうか?
試しに

myLoadVars.dataA = "test";

などとじかに値を入れてみて実行すれば、なにかの参考になるかもしれません。

3.さらにdataDという変数のテキストフィールドを折り返し指定で作り、
dataD=myLoadVars.dataA+myLoadVars.dataB+myLoadVars.dataC;
こんなスクリプトを入れると、送信前の内容を確認できます。

そんな感じで、
・送信前の内容が用意できていない。
・送信が出来ていない。
・CGI側の制限があり、Flashからは使用できない。
ということが考えられます。
3番目に関してはメールなどで聞いてみてはどうでしょう。

(なにかもっと基本的なことを忘れてるような気もしますが、思い出せません・・・
では、大変でしょうが、がんばってください。


----------------
うすあじ(twitter)
うすあじFlash研究所
HSPセンター

森 巧尚
Åê¹ÆNo.2569
投稿日時: 2003-12-29 10:40
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: flashからプロバイダ提供のCGIへデータを送る
Flash版を実行すると「FormMailに送られたデータの中に指定された宛先が無効である、あるいは宛先がありません。」というエラーが出ますよね。
引用:
ボタンに反応しCGI画面は出るのですが、CGIエラー(?)になります。
上に同じcgi-bin/formmail.pl画面が出て値は渡されていない画面が出るので駄目ということでした。

「値は渡されていない画面が出る」と言っておられますが「宛て先が無効である」とも書いてありますよ。
引用:
myLoadVars.recipient = "???@?????"

の「???@?????」の部分はこのままではなくちゃんと「無効でない宛て先」が入っていますか?

それから動くHTML版の方では
[入力エリア]:<INPUT NAME="subject" SIZE="30"><BR>
[入力エリア]:<INPUT NAME="name" SIZE="30"><BR>
[入力エリア]:<INPUT NAME="email" SIZE="30"><BR><BR>

と指定されているようですが、まずはFlash版でも全く同じ状況で試してみてはいかがでしょう。
    myLoadVars.subject = dataA;
    myLoadVars.name = dataB;
    myLoadVars.email = dataC;
    myLoadVars.recipient = "???@?????";(無効でない宛て先)


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

youich
Åê¹ÆNo.2570
投稿日時: 2003-12-29 11:13
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: flashからプロバイダ提供のCGIへデータを送る
引用:

erikoさんは書きました:
youichさん、ご返信ありがとうございます。
myLoadVars.recipient = "???@?????"

なるほど!と思い試してみたのですが結果は同じく、cgi-bin/formmail.pl画面が出て値は渡されていない(正常終了していない)ようでした。

そうですか、フォームの利用説明を見てみますと
<FORM METHOD="post" ACTION="/cgi-bin/formmail.pl"> 
<INPUT TYPE="hidden" NAME="recipient" VALUE="???@???.ocn.ne.jp"> 
[題名]:<INPUT NAME="subject" SIZE="30"><BR> 
[氏名]:<INPUT NAME="name" SIZE="30"><BR> 
[E-mail]:<INPUT NAME="email" SIZE="30"><BR> 
[コメント]:<INPUT NAME="comment" SIZE="30"><BR> 
<INPUT TYPE="submit" VALUE="送信"> 
<INPUT TYPE="reset" VALUE="クリア"> 
</FORM> 

となってますので一応,postする変数をflashでもすべて埋めると以下のようになりますね。
StageにtextFieldのインスタンス名
subjectField,nameField,emailField,commentFieldを配置すると

on(press){

	myLoadVars = new LoadVars();
	myLoadVars.recipient = "???@???.ocn.ne.jp";
	myLoadVars.subject = subjectField.text;
	myLoadVars.name = nameField.text;
	myLoadVars.email = emailField.text;
	myLoadVars.comment = commentField.text;
	
	myLoadVars.send("/cgi-bin/formmail.pl","_blank","POST");
}

cgi側のコードが解らないのでなんとも言えませんが、
他の変数(subject,name..)も送って(値は入れなくても)試してみるのもいいかもしれません。

しかしerikoさんのフォームテストを試してPOSTの内容をダンプしてみると
ブラウザーとflashの違いは
(safari)
recipient=eriko8%40smile.ocn.ne.jp&subject=&name=&email=
(flash)
recipient=eriko8%40smile%2Eocn%2Ene%2Ejp

となってますので、"."のエスケープの有無でこけてるような気がします。
引用:

何度も質問内容を読み返して整理したつもりだったのですが、まだまだ足りなかったなぁと反省しています。

う?ん、失敗する状況のサンプルも出してくれてたし、悩んでるところが
私には解りやすかったですけど、、、

ちなみにFORM自体の解説は↓が解りやすそうです。
http://www.kanzaki.com/docs/html/htminfo32.html


----------------
- yo

youich
Åê¹ÆNo.2572
投稿日時: 2003-12-29 13:08
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: flashからプロバイダ提供のCGIへデータを送る

え?っと,いろいろ混乱されてはいけないのでまとめますね。

erikoさんのflashのサンプルではちゃんとrecipientの値がご自分のmailアドレス
になって送られています。
ここまではちゃんとflash側はうまくできてるし、送信もできてますよ。

↓がflashのサンプルから送られているPOSTデータの部分です。
0x02a0	 6e74 2d54 7970 653a 2061 7070 6c69 6361	nt-Type:.applica
0x02b0	 7469 6f6e 2f78 2d77 7777 2d66 6f72 6d2d	tion/x-www-form-
0x02c0	 7572 6c65 6e63 6f64 6564 0d0a 436f 6e74	urlencoded..Cont
0x02d0	 656e 742d 4c65 6e67 7468 3a20 3430 0d0a	ent-Length:.40..
0x02e0	 0d0a 7265 6369 7069 656e 743d 6572 696b	..recipient=erik
0x02f0	 6f38 2534 3073 6d69 6c65 2532 456f 636e	o8%40smile%2Eocn
0x0300	 2532 456e 6525 3245 6a70               	%2Ene%2Ejp

↓がブラウザーのサンプルから送られたPOSTデータの部分です。
0x02a0	 656e 742d 5479 7065 3a20 6170 706c 6963	ent-Type:.applic
0x02b0	 6174 696f 6e2f 782d 7777 772d 666f 726d	ation/x-www-form
0x02c0	 2d75 726c 656e 636f 6465 640d 0a43 6f6e	-urlencoded..Con
0x02d0	 7465 6e74 2d4c 656e 6774 683a 2035 360d	tent-Length:.56.
0x02e0	 0a0d 0a72 6563 6970 6965 6e74 3d65 7269	...recipient=eri
0x02f0	 6b6f 3825 3430 736d 696c 652e 6f63 6e2e	ko8%40smile.ocn.
0x0300	 6e65 2e6a 7026 7375 626a 6563 743d 266e	ne.jp&subject=&n
0x0310	 616d 653d 2665 6d61 696c 3d            	ame=&email=


考えられる問題としては、
1)ocn側のCGIが%2Eの展開をしていないので、その結果、無効なemailアドレスとしてはじかれる。
2)ocn側のCGIが、変数としてemail,name,subject,comment等を送ってないとはじいている。
ですね。

しかしcgiからの応答が宛先がないと出るので1)臭いですね。


----------------
- yo

ゲスト
Åê¹ÆNo.2573
投稿日時: 2003-12-29 14:04
Re: flashからプロバイダ提供のCGIへデータを送る
皆様、たくさんの助言ありがとうございました。
youichさんの
考えられる問題としては、
1)ocn側のCGIが%2Eの展開をしていないので、その結果、無効なemailアドレスとしてはじかれる。
2)ocn側のCGIが、変数としてemail,name,subject,comment等を送ってないとはじいている。
ですね。

というコメントを貰う前にアドバイスいただいたほとんどの組み合わせを実行してみたのですが結果は同じで、ymoriさんの仰られた
「FormMailに送られたデータの中に指定された宛先が無効である、あるいは宛先がありません。」というエラー

というメッセージが出てしまいました。usuajiさんの
3.さらにdataDという変数のテキストフィールドを折り返し指定で作り、
dataD=myLoadVars.dataA+myLoadVars.dataB+myLoadVars.dataC;
こんなスクリプトを入れると、送信前の内容を確認できます。

これはLoadVarsオブジェクトのsendAndLoadで返り値(?)を得られると思うのですが、scriptの書き方がいまいちよく分からなくて試せませんでした。
正常動作するようになったら試行錯誤しながら試してみようと思います。

youichさんの考えられる問題1)の内容をプロバイダに問い合わせてみようかと思います。
年末年始なので回答がすぐ得られないとは思いますが、その後の報告はさせていただこうと思っておりますのでよろしくお願いいたします。m(__)m

余談ですが、私の購入した書籍というのがymoriさんが執筆したものだと知り改めて感動しました。フォーラムってすごい!
youich
Åê¹ÆNo.2574
投稿日時: 2003-12-29 14:31
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: flashからプロバイダ提供のCGIへデータを送る
引用:

これはLoadVarsオブジェクトのsendAndLoadで返り値(?)を得られると思うのですが、scriptの書き方がいまいちよく分からなくて試せませんでした。

loadVarsの送信内容を確認するだけなら、オーサリング環境でも
↓で確認できますよ?。


on(press){
     myLoadVars = new LoadVars();
     myLoadVars.recipient = "???@???.ocn.ne.jp";
     myLoadVars.subject = subjectField.text;
     myLoadVars.name = nameField.text;
     myLoadVars.email = emailField.text;
     myLoadVars.comment = commentField.text;
     trace(myLoadVars);
     trace(unescape(myLoadVars));
       // myLoadVars.send("/cgi-bin/formmail.pl","_blank","POST");
}

引用:
youichさんの考えられる問題1)の内容をプロバイダに問い合わせてみようかと思います

単に私の予想でしかないですけど(^^;
最近perlは使ってないのでうといのですが、今時ならcgiモジュールを使ってる可能性大ですから
use CGI;
$q = new CGI();
$to_address = $q->param('recipient');
とすればちゃんとunescapeしてくれるようなので、予想がはずれてるかもしれません。

違うかったらまたかんがえましょう


----------------
- yo

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

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