• ベストアンサー

一つの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"; の変更方法などを具体的に教えていただきたいです。 また、ついでの質問で恐縮ですが、上記の送信後に表示される文章で、”おもうしこみ”を”お申し込み”と漢字表記にすると、そこだけ文字化けしてしまいます。他の文章は全く文字化けしないので不思議なのですが、直す方法、原因などわかりましたらご教授願いたいと思います。 よろしくお願いいたします。

  • CGI
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • CGIで~秒後にジャンプします。を入れたいのですが・・・・

    CGIで~秒後にジャンプします。を入れたいのですが・・・・ print部分が↓の部分に~秒後に指定のURLにジャンプする部分を入れたいのですが print "Content-type: text/html\n\n"; print "<HTML><HEAD><TITLE>Thank you!</TITLE></HEAD>\n"; print "<BODY bgcolor=\"#9dffff\">\n"; print "<H2 align=\"center\">アンケートにご協力誠にありがとうございました!</H2>\n"; print "<HR>\n"; print "<P>\n"; print " あなたの貴重な意見を今後のお店作りに役立てたいと考えています。\n"; print "</BODY></HTML>\n"; わかる方いましたらお願いします。

    • ベストアンサー
    • CGI
  • メールフォーム

    print "Content-type: text/html\n\n"; print "<HTML><HEAD><TITLE>Thank you!</TITLE></HEAD>\n"; print "<BODY bgcolor=\"#DEB887\">\n"; print "<H2 align=\"center\">メール送信完了!</H2>\n"; print "<HR>\n"; print "<P>\n"; print " しばらくお待ちください。\n"; print "</BODY></HTML>\n"; CGIでメールフォームを作成してて、送信後の画面はこんな感じにしてるのですが、 meta http-equiv="refresh" content="5;url=sample.html 5秒後に自動でTOPページへ持っていくようにしたいのですが、これはどこに入れたらいいんでしょうか?

    • ベストアンサー
    • CGI
  • iis+cgiでmultipart/form-data送信がうまくいかない

    これまでLinux+Perl/CGIで構築していたWEBサーバをIIS+Perl/CGIに移す必要が生じ、新規にIISによるWEBサーバを構築しました。 一気にコンテンツを移動してもハマるだけだと考え、まずは簡単なコードを記述しCGIが動作するかどうかテストしています。 POSTによるinput type=textのデータ表示まではうまく行きましたが、ファイルアップロードのところで詰まりました。 IIS(Windows)によるWEBサーバの構築は初めてで、何が問題なのかサッパリわかりません。 どなたか問題点あるいはどこをチェックすれば良いかご指摘いただけませんでしょうか。 ●やった事 PerlにてPOSTを利用しmultipart/form-dataにてファイルをアップロードするシンプルなコードを書き、第一段階としてMIMEエンコードされたものをブラウザ上に表示するしようとしてみた。 コードは最下方の通り。 ●症状 送信を実行してもアップロード中のまま(ウィンドウマークが動き続けている)で、IISに設定してある10分程のタイムアウト時間を過ぎて終了してしまう。 TXT、XLS、DOCなどファイル種を変えて試しても全く同じ症状。 ●環境:Windows2000ServerSP4 IIS5.0 Perl5.8.8 *******アップロード画面****** <HTML> <HEAD> <TITILE>ファイルのアップロード</TITLE> </HEAD> <BODY> <FORM ACTION="/cgi-bin/upload.cgi" ENCTYPE="multipart/form-data" METHOD="POST"> ファイル: <INPUT TYPE="file" NAME="File" SIZE="32"><BR> <INPUT TYPE="submit" VALUE="送信"> </FORM> </BODY> </HTML> **********ここまで*********** *******CGI******************* #!/perl/bin/perl read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); print "Content-type: text/html\n"; print "\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>test</TITLE>\n"; print "</HEAD>\n"; print "<BODY BGCOLOR=\"#ffffff\">\n"; print "$buffer"; print "</BODY>\n"; print "</HTML>\n"; exit; ********ここまで***********************

    • ベストアンサー
    • CGI
  • cgiについて教えて下さい。

    cgiについて教えて下さい。 ■cgiが実行できません。 ・os:windows7(64bit) ・apache2.2.16(windows32bit)※ローカル ・ActivePerl(インストール済み) ※httpd.confファイル(現状) ・Options Index FollowSymLinks Includes ExceCGI ・AllowOverride All ・AddHandler cgi-script.cgi ・AddType text/html.shtml ・AddOutputFilter INCLUDES .shtml ■http://localhost/abc/test.cgi を実行すると表示できず。 ・http://localhost/ にはアクセスできます。 ※windowsネットワーク診断/トラブルシューティングの結果 →リモートデバイスまたはリソースが接続を受け付けません。 ■上記、test.cgiのソース #! c:/perl/bin/perl # CGIヘッダーの出力 print "Content-type: text/html\n\n"; # HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>Hello HTML</title></head>\n"; print "<body><p>こんにちは。これはHTML文書の例です。</p></body>\n"; print "</html>"; 以上、宜しくお願い致します。

    • 締切済み
    • CGI
  • HTML上でcgiをイメージタグで呼び出すと×が出ます

    お世話になっております。 お分かりになる方いらっしゃいましたら、お手数ですがご教授願えますでしょうか? cgiを勉強しているのですが、以下のような感じで テストページを作ってみたところうまくcgiが呼び出せなくて困っています。 test.htmにてcgiをimgタグで呼び出そうとしています。 しかし、ブラウザで表示すると「×」が表示されてしまいます。 【test.htm】 --------------------------------------------------------------- <html> <head> <title>テスト</title> </head> <body> <IMG src="http://www.xxxxx.xx.xx/test.cgi" width="401" height="31" border="0"> </body> </html> --------------------------------------------------------------- ※「xxxxx.xx.xx」はドメイン名が入ります。 【test.cgi】 --------------------------------------------------------------- #!/usr/local/bin/perl print "Content-type: text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>テスト</title>\n"; print "</head>\n"; print "<body bgcolor=\"#ffcccc\">\n"; print "これはCGIのテストです。\n"; print "</body>\n"; print "</html>\n"; --------------------------------------------------------------- となっています。 ちなみに設置の仕方は以下の通りになります。  html/(レンタルサーバのメインディレクトリ)  │  ├ test.htm ……………………… (755) テストcgi呼出しHTML  │  └ test.cgi …………………… (755) テストcgiファイル 直接test.cgiを指定すると問題なく表示されます。 何か原因が他にあるのでしょうか? お手数ですが宜しくお願いいたします。

    • ベストアンサー
    • HTML
  • mail送信CGIの返信後のページの文字化け

     フォームからメールを送信するCGIで 送信したあとの、お知らせページが文字化けしてしまいます。どう書いたらいいでしょうか?教えてください。 こんな感じのソースです。。 $header = <<END_OF_DATA; <html> <head> <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <title>メール送信結果</title> </head> <body> <h1>メール送信結果</h1> <hr> <p>御意見、御予約ありがとうございました。</p> <hr> END_OF_DATA  「御意見、御予約ありがとうございました。」というところの、ご予約が文字化けしてしまいます。どのように書いたらいいでしょうか?  ちなみに私はCGI初心者で、これは指示通りに設定しただけなので、分かりやすく教えていただけると嬉しいです。 お願いします<m(__)m>

    • ベストアンサー
    • CGI
  • CGIが文字化けしてしまう。(Perl)

    環境 WinXP    Apache ActivePerl 開くソフトは「Tera pad」      でやっています。ソースは #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>CGI TEST</TITLE></HEAD>\n"; print "<BODY>ああああ。</BODY>\n"; print "</HTML>\n"; __END__ です。「ああああ」部分が「‚ ‚ ‚ ‚ B」 と表示されます。 どなたか解決方法ご存知の方いらっしゃいましたら ご回答お願いします。

    • ベストアンサー
    • CGI
  • CGI勉強中(初心者です)

    #!/usr/bin/perl print "content-type:text/html\n\n"; print "<HTML>\n"; print "<head><title>CGI</title></head>\n"; print "<BODY>\n"; print "<H1><FONT COLOR=\"#FF0000\">こんにちは</FONT></H1>\n"; print "</BODY>\n"; print "</HTML>\n"; というCGIつくりました。 プロバイダの説明には Perlの場所 /usr/bin/perl または /usr/local/bin/perl となっていますが、 どこにどう置いて(ホームディレクトリでしょうか?)、どうやって起動させてよいのかさっぱりわかりません。 ご教授ください。

    • ベストアンサー
    • CGI
  • 私の作ったCGIスクリプトを見てください。どこが間違えていますか

    アクセスありがとうございます。 Red Hat Linux8.0でサーバを構築してCGIスクリプトを実行しようとしているのですが、どうもうまくいきません。 私が作成したCGIスクリプトは次のようなものです。 ファイル名「first.cgi」 #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>First CGI</TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; print "文字を表示するCGIです。\n"; print "</BODY>\n"; print "</HTML>\n"; そして文字コードを「EUC」、改行コードを「LF」に変換しサーバにアップロードしました。 その後SSHでサーバにログインし $ chmod 755 /home/burn/public_html/first.cgi と「first.cgi」に実行権限を追加し $ /home/burn/public_html/first.cgi と作成したCGIスクリプトをテストしてみたのですが : bad interpreter: No such file or directory とエラーメッセージが表示されてしまいます。 「そのようなファイルやディレクトリはありません」というような意味でしょうか。 しかし、そんなはずはないと思います。 $ ls /home/burn/public_html first.cgi と「ls」コマンドを実行すれば「first.cgi」が表示されるのですから。 他に何かする必要があるのですか。 このCGIスクリプトを動作させるにはどうすればいいのか教えてください。

  • 「 <!--#exec cgi="***.cgi" --> 」が表示されません

    「main.cgi」というファイルを作り、単純にHTMLを表示するだけのCGIファイルを作成しました。 こんな感じ ------------main.cgi------------ #!/usr/local/bin/perl print "Content-type:text/html\n\n"; print <<EOM; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title></title> </head> <body> <略> </body> </html> EOM __END__ -------------------------------- それで、ほかのHTMLファイルに <!--#exec cgi="main.cgi" --> と入力してそのページを見てみると、 [an error occurred while processing this directive] 上の文章が表示されていました。 どうすれば「main.cgi」の内容を表示することができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう