- ベストアンサー
ドロップダウンリストの情報を送る方法
- 入力フォームにて、ドロップダウンリストから送信先アドレスを設定する方法について教えてください。
- 入力確認画面で表示する値とCGIに渡す値を別にする方法を教えてください。
- ドロップダウンリストの情報を使って、メールフォームを改造する方法について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
書かれている方法で、新しく変数を作って、表示用にすることは可能ですよ。 その方法も書こうかと思いましたが、説明がややこしくなるかな、と思い省きました。 文法的には↓のような感じでしょうか。 ---------- if($FORM{'settei'} eq "INFORMATION" || $FORM{'settei'} eq "info.cgi"){ $FORM{'settei'} = "info.cgi"; $settei_hyouji = "INFORMATION"; }elsif($FORM{'settei'} eq "ORDER" || $FORM{'settei'} eq "order.cgi"){ $FORM{'settei'} = "order.cgi"; $settei_hyouji = "ORDER"; } ----------
その他の回答 (3)
- kodai_sumio
- ベストアンサー率45% (29/64)
本格的に配布されているCGIを修正するとなると、それなりに時間がかかると思いますが、簡易的に、以下のようにすることで対処できるかと思います。 f_mailer.cgiの61行目辺りに下記を追加 ---------- if($FORM{'settei'} eq "INFORMATION" || $FORM{'settei'} eq "info.cgi"){ $FORM{'settei'} = "info.cgi"; }elsif($FORM{'settei'} eq "ORDER" || $FORM{'settei'} eq "order.cgi"){ $FORM{'settei'} = "order.cgi"; } ---------- あとは確認画面で目に見えるように出力せずにINPUTのHIDDEN値で出力し、次のCGIに渡します。(f_mailer.cgiのreplace関数を見る限り、自動的にHIDDENを書き出しているようですが。) ただし、上記の方法は当方でテストしたわけではありませんので、ご了承下さい。現状のf_mailer.cgiのバックアップをとって試してみてください。
お礼
たびたびすみません。 >あとは確認画面で目に見えるように出力せずに… ということは、確認画面で、送付先を確認することは出来ないということでしょうか? 現状は、見えてもかっこ悪いと考えたので、<!-- -->で囲っていました。 で、いま、確認画面htmlを覗いて見ると、CGIに渡す変数と表示は全然別のようです。 変数は、<FORM action=~以下に<INPUT TYPE=hidden NAME=~の形でちゃんと並んでました。 (上で書いた<!-- -->はまったくの無駄だったわけですね) 素人的に考えて、表示用にもう1つ変数を作れないかと考えたのですが… <SELECT name="settei">を受け取り、 if($FORM{'settei'}==info.cgi){$settei_hyouji=information} if($FORM{'settei'}==order.cgi){$settei_hyouji=ORDER} (文法おかしかったら言って下さい。素人的な直感文章です) 見たいな感じにして、確認画面で「送付先:$settei_hyouji」と出来ないでしょうか? 何度もすみませんが、よろしくお願いします。
- kodai_sumio
- ベストアンサー率45% (29/64)
つまり、CGIに変更を加えずに、スキンファイルのHTMLを改変して実現したい、ということですよね? スキンファイルがどのようになっていて、CGIの変数をどのように出力しているのかが分かれば適切な回答ができるかと思うのですが・・・。(変数の出力はHTMlに$xxxなどと直接書けばいいのかな?) とりあえず、予測しながら書いてみますね。 #01で書いたif文はHTMlに埋め込むJavaScriptで実現します。 入力フォームのセレクトメニューの箇所は#01のものと同じで下記のように書き換えます。 <SELECT name="settei"> <OPTION value="INFORMATION">INFORMATION</OPTION> <OPTION value="ORDER">ORDER</OPTION> </SELECT> 続いて、確認画面用スキンのHTMLの中の<FORM>タグから</FORM>タグまでの間に以下のJavaScriptを埋め込みます。 <SCRIPT LANGUAGE="JavaScript"> <!-- var settei = "$settei"; if(settei == "INFORMATION"){ document.write('<INPUT TYPE="hidden" NAME="settei" VALUE="info.cgi">'); }else if(settei == "ORDER"){ document.write('<INPUT TYPE="hidden" NAME="settei" VALUE="order.cgi">'); } //--> </SCRIPT> JavaScriptを認識できるブラウザでは上記の方法で実現可能かと思います。 もしJavaScriptの設定がOFFのブラウザでも動作させたいとなると、CGIに変更を加える必要があります。
お礼
またまた返答ありがとうございます。 >JavaScriptの設定がOFFのブラウザでも動作させたいとなると、CGIに変更を加える必要があります。 セキュリティーを上げるため、Javaを切っている人って多いですよね… CGIを修正の方向で行きたいのですが、これ以上は「某CGI」では難しいですよね。 改造中なのは、http://www.psl.ne.jp/で配布されているFORM MAILERver.058です。 お暇だったらでかまいません。よければ確認して方法を教えていただければうれしいです。 よろしくお願いします。
- kodai_sumio
- ベストアンサー率45% (29/64)
確認画面もHTMLということですが、入力から確認画面までは JavaScriptで入力データを運んでいるということでしょうか? だとしたら、最初のセレクトメニューの値を <SELECT name="settei"> <OPTION value="INFORMATION">INFORMATION</OPTION> <OPTION value="ORDER">ORDER</OPTION> </SELECT> としておいて、次のページでif判定で値を埋めてあげれば良いのではないでしょうか。 if(settei == "INFORMATION"){ document.write('<INPUT TYPE="hidden" NAME="settei" VALUE="info.cgi">'); }else if(settei == "INFORMATION"){ document.write('<INPUT TYPE="hidden" NAME="settei" VALUE="order.cgi">'); } 確認画面をCGIで出力していたとしても、同じようなことができますよね。
お礼
返答ありがとうございます。 >入力から確認画面まではJavaScriptで入力データを運んでいるということでしょうか? 改造しようとしているのは、いわゆる「スキン」タイプのものです。入力・確認・エラー・送信完了画面をすべてHTMLで書けるってやつです。 なので、入力画面→CGIで確認用HTMLを表示し、変数を表示させる($nameと書いてあったら名前の"内容"を表示する)ものです。 このばあい、どのように運んでいるといえばいいのでしょうか? また、 >次のページでif判定で値を埋めてあげれば これは、スキンファイルに直接書いても意味無いですよね?多分そのまま表示されてしまいますよね。 HTMLに直接if文を書いても良い方法などありますか? または、CGIのほうで、何か変更が必要でしょうか? 質問だらけですが、よろしければ回答お願いします。
お礼
返答ありがとうございます。 何とか無事出来ました。 長々と付き合っていただいたありがとうございました。