- 締切済み
メールフォームの設置方法に関しまして
はじめまして。 FLASH初心者ではございますが、いつもご丁寧な回答を拝見させていただき、日々FLASHを勉強しております。 この度はメールフォームの設置方法に関しましてアドバイスをいただきたく、書き込みさせていただきました。 私自身、html上でのcgiの設置知識は持ち合わせております。 現在こちらの状況は、ソフトはFLASH MXでname・mail・commentというテキストフィールドを作成し、リセットボタン・送信ボタンの画像を設置済みの状況です。 name・mail・comment箇所に1つの大きなムービークリップを置き(ボタンが適切?)、それぞれに変数名を記入している状況です。 下記のサイトを参考にさせていただいたのですが、 http://www.yoshimitsu-jp.com/yoshiko/flashkouza/mail/kouza1.html 特にこのサイト内に書かれている、 ==================================== 今作成したムービークリップをシーン1に配置してください。 FLASHMXを使用している方はシーン1のレイヤー1の1フレームに、 (コンテンツ 1 フレーム目のフレームスクリプト最上部) System.useCodepage = true; という一行を付け加えてください・・これを書き込まないと、文字化けします。 ==================================== という箇所の意味と、送信ボタン、及びリセットボタンの設定方法がわかりません。 どなたかアドバイスをいただけないでしょうか? 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- DPE
- ベストアンサー率85% (666/776)
サンプルをご使用とのことですので、サンプルに付属の解説・スクリプト中のコメント等に、設置方法や改造のポイントが書かれていないかをご確認ください。 まずは簡単な、エラーの方の話ですが。 数行にわたるスクリプトは、必ず1組の { } の中に書かなければならない決まりになっています。 (ちなみに、{ } の中に更に { } を入れ子にすることもできます) コピーした際にどこかに余分な { が入っていて、{ } が不対応になっていないかどうか、確認してみてください。 on(press) { ・・・ } というような書き方は、解説書などでは行数の都合であまり使われないようですが、{ } の対応が見やすくなるのでオススメです。 解説書ですと、 on(press){ ・・・ } というように、(press) の横に { が付いていることがあります。また、Flash の自動フォーマット機能や、リストから選択してスクリプトの入力を補助する機能をご利用の場合も、このスタイルで { } が自動的に挿入されます。 どちらのスタイルでも誤りではありませんが、{ } の不対応にはご注意ください。 ---------------- ステージにあるムービークリップは、インスタンスといって、シンボルの分身です。 インスタンスは拡大・縮小・回転・色や透明度など、属性の変更はできても、ボタンを増やしたり絵を変えたりするなどの内容そのものを編集することはできません。 内容そのものを変更する場合は、インスタンスの元になっているシンボルを編集します。 ステージのインスタンスをダブルクリックすると、元になっているシンボルの編集画面になります。 編集が済んだら、ステージの編集に戻ってください。戻り方は#1に書きました通りです。ステージの上部に書かれている「シーン1」という部分をクリックしてください。 ---------------- ご質問文にあるページを拝見しましたが。 このページでは、テキストフィールドもボタンも1つのムービークリップ内に作り、getURL を使って送信する方法(#1で説明した方法と同じです)が紹介されているようです。 ご使用のサンプルは同じサイトから入手されたものでしょうか?変数の名前や入力フォームの構成などが、少々違うようですが・・・。 作品の作り方・スクリプトの考え方は、作る人によって違います。どれが正しいとか、作り方がたった1つしかないとは限りません。 サンプルを入手したサイトや書籍には、そのサンプルに適した解説と使い方の説明があるはずですので、そちらをご参考になさってください。 この作り方ではないとすると、実物を見ないことには不明な点が多く、どこを変更すべきかははっきりとは言えません。 Flash MX からは、LoadVars というアクションでも変数を送信できるようになりました。getURL とは違い、「送信」ボタンがムービークリップの中になくてもいいですし、必要な変数だけを選択して送信することも可能です。 テキストフィールドと「送信」ボタンが違うムービークリップにあるのだとすると、LoadVars を使っているのかもしれません。 ActionScript は、フレームだけでなく、ムービークリップやボタンのインスタンスにも設定できます。 配置されている「送信」ボタンを選択して、「アクション」パネルを開いてください。 LoadVars を使っているとすると、 on(press) { //LoadVarsオブジェクトの生成 mail = new LoadVars(); //送信する情報の準備 mail.post_name = t1_2; mail.post_addr = t2_2; mail.post_comm = t3_2; //情報を送信 mail.send( "***.cgi" , "_blank" , "POST" ); } 変数名やコメント等は違うと思いますが、大体このような感じのスクリプトになっていませんでしょうか? これですと、上記のスクリプトで post_name や post_addr にあたる箇所を、CGIで受け取る変数の名前に変更し、"***.cgi"の部分をCGIプログラムのURLに変更するだけでいいと思います。 LoadVars のイメージは、予め LoadVars というタイプのカゴを作り、その中に情報を用意して送信するようなものです。 Flash で使っている変数に、自分で分かりやすい名前を付けていたとしても、送信する情報を Loadvars に準備する時の名前(上記のスクリプトでは post_name など)がCGIが受け取る変数の名前になっていれば、問題なく情報が渡ります。 しかし、getURL では送信する変数を選択することができず、getURL を実行したムービークリップの中にある変数が、全て送信されます。Flash の方で変数に好きな名前を付けていると、CGIに正しく情報が渡らなくなりますから、最初からCGIが受け取る変数名にする必要があります。 ちなみに、#1の補足欄にあったスクリプトの意味ですが。 入力フォームの中には、最初は仮の文字列が入っていて、入力する時に消えるものがあります。 これを実現するためのスクリプトと思われます。 このスクリプトから察するに、テキストフィールドで表示している変数は t1_2 ・ t2_2 ・ t3_2 ではないかと思います。 スクリプト中の変数名だけ変更しても、テキストフィールドで表示する変数名の方も変えなければ、意図した動作にはなりません。 また、送信するのもテキストフィールドで表示している変数である場合は、スクリプト中の変数名とテキストフィールドで表示している変数名を、両方ともCGIが受け取る変数名と同じにしないと、CGIに情報が渡らなくなります。 あれこれいじっても上手くいかないようでしたら、無理にサンプルを使おうとせずに、ご質問文にあるサイトの解説を見ながら1から自作した方が、早いかもしれません。 単純なフォームであればそれほど難しくはないので、とりあえずは簡単なものから試作してみてはいかがでしょうか。
- DPE
- ベストアンサー率85% (666/776)
Flash Player 5 以前では、Flash の外部と文字をやりとりする際のエンコード(文字を文字コードに変換し、データとして送受信できるようにする時の、変換のルール)に、Shift JIS という方式を使っていました。 これが、Flash Player 6 (制作ツールは Flash MX )からは UTF-8 ( Unicode )という方式に変わりました。 Flash Player 6 以降は、何も指定しなければ、Flash の外部とやりとりする文字は、全て UTF-8 のルールに従って処理されます。 しかし Flash Player 6 以降でも、Shift JIS 形式で記録されたテキストファイルを読み込んで使いたい時や、フォームから送られてきた文字を処理するCGIが Shift JIS を利用しているなど、従来の Shift JIS で処理したい場合もあります。 そこで、System.useCodepage = true; というスクリプトが必要になるのです。 System.useCodepage が false の時は、外部とやりとりする文字が、Flash Player 6 以降の標準である UTF-8 のルールで処理されます。最初はこの設定になっています。 System.useCodepage を true にすると、今まで通りの Shift JIS で処理されるようになります。 日本語と英語とでは文法が違います。日本語の文法で英語を解釈しようとしても意味が通じない・文章がおかしくなるのと同じで、文字の送信側と受信側とで使用しているエンコードが一致しない場合に発生するのが、いわゆる文字化けという現象です。 送信の際に呼び出すCGIプログラムが UTF-8 方式を採用しているのでしたら、Flash から送信する文字も UTF-8 で送らなければなりません。 また、外部から読み込んだテキストファイルが UTF-8 形式で記録されていた場合、System.useCodepage = true; を実行してしまうと、逆に文字化けが発生することになります。 解説サイトや解説書に System.useCodepage = true; を設定するようにと書かれていたからといって、どんな場合でも必ず実行しなければならないとは限りませんので、ご注意ください。 -------------- Flash から Web ページを開くことができる、getURL というアクションがあります。 この時、開くページがCGIプログラムであれば、 Flash 内で使われている変数をそのプログラムに送信することもできます。 ただし、送信されるのは、getURL を実行したムービークリップが持っている変数だけです。 例えば、ステージに配置したボタンが押された時に getURL を実行するようにスクリプトを書くと、_root 階層、つまりメインのタイムラインにある変数が全て送信されます。 この場合、ステージにムービークリップAがあるとすると、Aの持っている変数は送信されません。 仮に、送信者の名前やコメントを記入してもらうテキストフィールドを、「 mailform 」というムービークリップの中に配置しているとします。 テキストフィールドで表示する変数を、それぞれ、post_name ・ post_comment 、という名前だとします。 すると、「 mailform 」ムービークリップは、この2つの変数を持っていることになります。 ムービークリップ内に「送信」ボタンを作り、そこに on(press) { //CGIに情報を送信 getURL( "***.cgi" , "_blank" , "POST" ); } (↑このスクリプトをコピーして利用する場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) というアクションを設定すると、CGIプログラムに post_name と post_comment 変数を送信することができます。 なお、Flash MX からはムービークリップをボタンと同様に利用できるようになりましたが、「送信」ボタンは、必ずボタンシンボルとして作ってください。 ムービークリップをボタンとして使用した場合、「送信」ボタンのムービークリップが持っている変数が送信されることになります。今回は、送信したい変数を持っているのは「 mailform 」ムービークリップですから、CGIに情報を渡せなくなってしまいます。 -------------- 「リセット」ボタンとはつまり、テキストフィールドで表示する変数に空の文字列( Null ストリングといいます)を入れる機能、とも言えます。 変数に "" を代入すると、Null ストリングが入ります。 post_name = ""; これで、変数 post_name の内容は空になります。 「リセット」ボタンもボタンシンボルとして作り、同じく「 mailform 」の中に配置します。 そのボタンに、 on(press) { //入力された文字列をクリア post_name = ""; post_comment = ""; } というアクションを設定してみてください。 テキストフィールドに入力した文字がクリアされるようになります。 ここでは仮に post_name と post_comment という変数で説明しましたが、実際には、テキストフィールドで表示するように設定した変数の名前を使用してください。 更に言いますと、テキストフィールドで表示する変数名とは、呼び出すCGIプログラム中で情報の送受信用に使っている変数のことです。 この名前が正しくないと、やはりCGIに正確に情報が渡らなくなります。 > name・mail・comment箇所に1つの大きなムービークリップを置き(ボタンが適切?)、それぞれに変数名を記入している状況です。 この箇所の意味が、少々分からないのですが・・・ 先述の通り、getURL で送信される変数は、getURL を実行したムービークリップにあるものだけです。 ですから、メールフォームを構成するテキストフィールドや「送信」「リセット」ボタンを、全て「 mailform 」という1つのムービークリップにまとめ、送信もこのムービークリップの中で行うのがポイントです。 作ったムービークリップは、それ自体はただのシンボルです。ステージに配置しなければ、ムービーには表示されません。 シンボルの編集中は、ステージの上部に「シーン1」と「(編集中のシンボル名)」と書かれています。「シーン1」をクリックすると、ムービーの編集画面に戻ります。 作ったシンボルは、「ライブラリ」ウィンドウに格納されています。フレーム1にキーフレームを作り、シンボルを「ライブラリ」ウィンドウからステージにドラッグして、配置してください。 ちなみに、この時配置されるのは、シンボルの分身である”インスタンス”と呼ばれるものです。 System.useCodepage = true; のスクリプトはどこで実行しても構わないのですが、とりあえず、メインのタイムラインで実行するものとします。 ActionScript はボタンやムービークリップのインスタンスのほかに、タイムラインのフレームにも設定することができます。フレームに設定する場合はスクリプト専用のレイヤーを用意し、描画した絵やムービークリップを配置するレイヤーとは区別しておくと便利です。 先ほど、「 mailform 」ムービークリップを置いたレイヤーとは別のレイヤーを、1つ用意します。このレイヤーを、ActionScript 専用のレイヤーとします。 スクリプト用のレイヤーの重なり順にはあまり意味はありませんが、とりあえず、一番上にしておくといいでしょう。 ActionScript 用のレイヤーのフレーム1に、やはりキーフレームを挿入して、 System.useCodepage = true; というスクリプトを書いてください。 長くなってすみませんでした。 不明な点がありましたら、補足してください。
補足
大変ご丁寧な返信本当に有難うございます。 ご説明は私のような初心者でもすべて理解させていただけたのですが、 FLASH MXの使用方法を熟知していない為、 市販の本と格闘しながら設置を試みております。 レイヤーから「α」をクリックして アクションスクリプトの見方を覚えたのですが、 既存のサンプルflaファイルを設定しておりますので、 既に下記のようなスクリプトが設置されておりました。 >> t1.onSetFocus = function() { >> if (t1_2 == "Name") { >> t1_2 = ""; >> } >> }; >> t2.onSetFocus = function() { >> if (t2_2 == "Email") { >> t2_2 = ""; >> } >> }; >> t3.onSetFocus = function() { >> if (t3_2 == "Comments") { >> t3_2 = ""; >> } >> }; 「t1_2」などは変数だと思うのですが、 これを自分のわかりやすい変数に置き換え、 ムービークリップ内にgeturlのスクリプトを書き込めば大丈夫でしょうか? しかし、気になるのは 「ムービークリップ内に「送信」ボタンを作り・・・」 と書いていただいている点で、 既存のflaファイルにはName・Email・Commentsが ムービークリップ内にありますが、 リセットボタンと送信ボタンはムービークリップ外に設置されております。 ムービークリップを大きくしてボタンも含もうとするのですが、 現在含まれているName・Email・Commentsの文字も一緒に大きくなってしまい、 上手くボタンを含む事ができません。 またリセットボタンに関しまして ご指示いただきましたように下記のアクションの 各行頭の全角のスペースを、全て半角のスペースにしてペーストしたのですが、 >> on(press) >> { >> post_name = ""; >> post_comment = ""; >> } >> というアクションを設定してみてください。 下記のようなエラーが出てしまいます。 ======================================= クリップボードアクション : 行 2:ステートメントブロックは '}' で終了してください。 { クリップボードアクション : 行 6:シンタックスエラー ======================================= どの箇所が悪いかご教授いただけないでしょうか? お手数をお掛けして申し訳ございません。