• ベストアンサー

一つのCGIの送信後画面を複数設定する方法。

ホームページビルダー11を使ってHPを作成しています。 申し込み、質問、一般的なアンケートなど、複数のフォームページがありますが、使用しているのは、一つのCGIのみです。(ビルダー付属品でした) CGIは正常に動作していますが、フォーム送信後に表示される画面を、フォームごとに設定することは可能でしょうか?可能な場合、どのようにしたらいいのでしょうか? 試しに、このCGIをいくつかコピーして名前を変更し、表示される画面の内容を多少変えて設定を試みましたが、うまくいきませんでした。 CGIの以下の部分 print "Content-type: text/html\n\n"; print "<HTML><HEAD><TITLE>Merci</TITLE></HEAD>\n"; print "<BODY bgcolor=\"#ffffe0\">\n"; print "<H3 align=\"center\">おもうしこみ、ご相談、ご質問を受け付けさせていただきました。</H3>\n"; print "<HR>\n"; print "<P>\n"; print " 記入いただいたメールアドレスに返信いたします。少々お待ちください。<br><HR>ご利用のご感想をいただいたお客様、ありがとうございました。\n"; print "</BODY></HTML>\n"; の変更方法などを具体的に教えていただきたいです。 また、ついでの質問で恐縮ですが、上記の送信後に表示される文章で、”おもうしこみ”を”お申し込み”と漢字表記にすると、そこだけ文字化けしてしまいます。他の文章は全く文字化けしないので不思議なのですが、直す方法、原因などわかりましたらご教授願いたいと思います。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • coop10
  • ベストアンサー率100% (1/1)
回答No.2

No.1様の通りですが、少し付け加えさせていただきます。 入力フォームのHTMLページに、それぞれ隠しフィールドを設置することによって、どのページから送信されてきたかを区別することができます。 HPB11の場合ですと、フォームのエリアの部分を右クリックし「属性の変更」を選択します。次に「タグ」を「フォーム」にきりかえ、「隠しフィールド」タブにセットしてください。 名前と値があると思いますが、なんでもいいです。名前を name 値を 1 としておきましょう。(それぞれ、違うページには 2 3 …とつけます) そして、うけとる側のCGIで調整をします。 フォームデータを受け取ると、要素が1つ増えています。 この要素によって、ページを分岐することが可能ではないでしょうか。 こんな感じで require "jcode.pl"; read (STDIN, $form_data, $ENV{'CONTENT_LENGTH'}); $form_data =~ tr/+/ /; $form_data =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg; @data = split(/=/, $form_data); @data1 = split(/&/, $data[1]); @data2 = split(/&/, $data[2]); @data3 = split(/&/, $data[3]); ・ ・ ・ とわけていくと、要素を$data1[0]・$data2[0]…と簡単にわけれます。 ここでif関数で分岐すればよいかと。 if ($data**[0] eq "1"){ print <<HTML; ************** HTML } その他にも効率よいやり方はいろいろあると思いますので、研究してみてください。 それと文字化けする件ですが、あいだに「\」を入力することによってなおせます。たとえば、「申\込」とか。

tanumotte
質問者

お礼

フォーム側の設定は何とかわかりますが、CGI側の変更部分は正直よくわかりません。CGI知識がほとんどまったくなく、ビルダー基本のままに使っているせいなのですが…。 でも、理論としてはわかりました。書き方が、どのヘンまで変えてもいいのか(動作しなくなるのが怖いのです)わかりかねますが、勉強して試してみることにします。 申し込みページとアンケートページの送信後画面が同じなのは変ですものね^^; 詳しい説明、とても勉強になりました。 ありがとうございました。

その他の回答 (1)

noname#77845
noname#77845
回答No.1

表示を変更するには、各種フォームから何を送信しているのかが判るように「Hidden」属性のデータを送信し、そのデータによって表示を分岐させれば表示を可変にすることが出来ます。 例) <input type="hidden" name="Form_FLG" value="相談"> 文字化けの方ですが、これは文字コードがメタ文字を含むために起きる現象です。 http://www.shtml.jp/mojibake/sjis_cgi.html この現象を回避するには、「"」を使わずに「'」で括りましょう。 print "<H3 align=\"center\">".'お申し込み'."、ご相談、ご質問を受け付けさせていただきました。</H3>\n";

tanumotte
質問者

お礼

回答ありがとうございます。 データ分岐の仕方で、CGI側の記入の仕方がいまいちわかりません。NO2の方の回答を見ても、かなりシロウトにはレベルの高いことなんでしょうか…。参考になるHP探しすら難航してます。 文字化けの方は、とても参考になりました!そのまんまコピペで修正に使わせていただきました!

関連するQ&A