- ベストアンサー
CGIでラジオボタンの選択結果を保持する方法
- CGIでラジオボタンの選択結果を保持する方法について説明します。具体的には、質問文章で複数の質問とラジオボタンがあり、それぞれの選択結果に応じて最終ページで表示を変えたい場合の方法について考えます。
- まず、一つ前のページで選択した結果を次のページに反映させる方法は、<input type='hidden'>を使用することです。質問ページで選択した値を<hidden>タグで次のページに送信し、次のページで受け取った値を表示させることができます。
- しかし、複数のページを経由して選択結果を保持し、最終ページで表示する場合は、より複雑なロジックが必要になります。例えば、質問によっては次のページが異なる場合や、複数の質問に対して条件分岐する必要がある場合などが考えられます。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと手を加えてみた。 1) ./html/NQ3.htmlは./html/FQ3.htmlに名称変更 2) ERRORを補足するためBIGIN{}を加えた。 3) きちんとHTMLが出力されることを確認したら必ず削除 #!/usr/local/bin/perl BEGIN{ $| = 1; print "Content-type: text/plain\n\n"; open(STDERR, ">&STDOUT"); } use strict; my $SECTION = "\t<section>\n"; read(STDIN, my $buffer, $ENV{'CONTENT_LENGTH'}); my $HTML ="/index.html"; my $PATH = '/Q1.html'; my @pairs = split(/&/,$buffer); my $meter_value ="1"; my %FORM = (); my ($pair,$STYLE,$MESSAGE,$INFORM); foreach $pair (@pairs) { _my ($name, $value) = split(/=/, $pair); _$FORM{$name}=$value; _$INFORM .= "\t\t\t<input type=\"hidden\" name=\"$name\" value=\"$value\">\n"; } if($FORM{'Q3'} && $FORM{'Q2'} && $FORM{'Q1'}){ _$MESSAGE="回答です。"; _$STYLE = "section p{font-size:2em;text-indent:1em;padding:0.5em 1em;"; } else{ _$MESSAGE="下記の質問にお答えください。"; _$STYLE = "section{background-color:silver;"; } if($FORM{'Q3'} eq "W"){ _if($FORM{'Q2'} eq "M"){ __$SECTION .=qq^\t\t<p>あなたは、西日本生まれの既婚男性です。</p>\n^; __$STYLE .= "background-color:blue;color:white;}"; _} _else{$SECTION .= qq^\t\t<p>あなたは、西日本生まれ未婚男性です。</p>\n^; __$STYLE .= "background-color:aqua;"; _} } elsif($FORM{'Q3'} eq "E"){ _if($FORM{'Q2'} eq "M"){ __$SECTION .=qq^\t\t<p>あなたは、東日本生まれの既婚男性です。</p>\n^; __$STYLE .= "background-color:green;"; _} _else{ __$SECTION .= qq^\t\t<p>あなたは、東日本生まれ未婚男性です。</p>\n^; __$STYLE .= "background-color:lime;"; _} } elsif($FORM{'Q3'} eq "F"){ _if($FORM{'Q2'} eq "M"){ __$SECTION .=qq^\t\t<p>あなたは、太った既婚女性です。</p>\n^; __$STYLE .= "background-color:yellow;"; _} _else{ __$SECTION .= qq^\t\t<p>あなたは、太った未婚女性です。</p>\n^; __$STYLE .= "background-color:orange;"; _} } elsif($FORM{'Q3'} eq "S"){ _if($FORM{'Q2'} eq "M"){ __$SECTION .=qq^\t\t<p>あなたは、痩せた既婚女性です。</p>\n^; __$STYLE .= "background-color:red;"; _} _else{ __$SECTION .=qq^\t\t<p>あなたは、痩せた未婚女性です。</p>\n^; __$STYLE .= "background-color:fuchsia;"; _} } else{ _if($FORM{'Q2'} eq "M" || $FORM{'Q2'} eq 'N'){ __$meter_value = '0.67'; __$PATH = '/answer.html'; __if($FORM{'Q1'} eq 'M'){$HTML = 'MQ3.html';} __else{$HTML = 'FQ3.html';} _} _elsif($FORM{'Q1'} eq "M" || $FORM{'Q1'} eq "F"){ __$meter_value = '0.33'; __$HTML = 'Q2.html';$PATH = '/Q3.html'; _} _elsif($FORM{'Q0'} eq "ok"){ __$meter_value = '0.2'; __$HTML = 'Q1.html';$PATH = '/Q2.html'; _} _else{ __if($FORM{'Q1'} eq ""){$MESSAGE .= "</p>\n\t\t\t<p>データがありません\n";} __$meter_value ="0"; __$PATH = '/Q1.html'; _} } my $FORM = "\t\t\t<form action=\"$ENV{'SCRIPT_NAME'}$PATH\" method=\"post\">\n$INFORM"; open(IN,"<./html/$HTML"); while(my $line = <IN>){$FORM .= "$line";} close IN; if($FORM{'Q0'} eq ""){$FORM .= "\t\t\t<p><input type=\"submit\" value=\"つづける\"></p>\n\t\t</form>\n";} elsif($FORM{'Q3'} ne ""){$FORM ="";} else{$FORM .= "\t\t\t<p><input type=\"submit\" value=\"送信\"></p>\n\t\t</form>\n";} $SECTION .= $FORM."\t\t</section>\n"; my $METER = "\t\t\t<p class=\"meter\"><meter value=\"$meter_value\">$meter_value</meter></p>"; print "content-type:text/html\n\n"; while(<DATA>){ _s/<!-- meter -->/$METER/; _s/\/\* style \*\//$STYLE/; _s/<!-- Message -->/$MESSAGE/; _s/<!-- Section -->/$SECTION/; _print; } __END__ <!doctype html> <html> <head> <meta charset="utf-8"> <title>サンプル</title> <style media="screen"> <!-- html,body{margin:0;padding:0;background-color:gray;} header,section,footer{width:50%;margin:0 auto;padding:5px 10px;background-color:white;} p.meter{font-size:2em;text-align:center;} /* style */ --> </style> </head> <body> _<header> __<h1 id="title">Your title</h1> __<p><!-- Message --></p> <!-- meter --> _</header> <!-- Section --> _<footer> __<h3>A nice footer</h3> _</footer> </body> </html>
その他の回答 (11)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>TESTファイルに.cgiとつけてみたら正常に動きました! と言うことは、CGIは動作する。 そのディレクトリに Options に +ExecCGI が指定されていて、かつ、 AddHandler cgi-script .cgi が指定されている。ということです。 この場合.htaccessに AddType application/x-httpd-cgi TEST; で、TESTというファイルはCGIとして動作するはずです。 ひょっとして、TESTの実行権限が666のままとか?? あるいは、 SetHandler cgi-script を書く必要があるのかも/?? いずれにしても、拡張子は動作には関係ないのです。Windowsとは異なり、すべての動作は設定ファイルでディレクトリごとファイル名ごと、拡張子こどに指定できる物なのですよ。 拡張子の呪縛から解放されると良いですね。
お礼
ありがとうございます! ひとつひとつ確認していってみたいと思います。 長々とお付き合いいただき、丁寧にお返事くださって本当に助かりました。 ありがとうございました!
- ORUKA1951
- ベストアンサー率45% (5062/11036)
AddType application/x-httpd-cgi TEST; とは、TESTというファイルをCGIとして解釈しろと言う意味です。 httpd.confを直接変更するのではなく。httpd.confには、 AllowOverride All を指定して、.htaccessで上書きが出来るようにしておかなければなりません。 ⇒Apache チュートリアル: .htaccess ファイル - Apache HTTP サーバ( https://httpd.apache.org/docs/2.4/ja/howto/htaccess.html ) [例] <Directory "G:/usr/local/apache/cgi-bin"> AllowOverride All Options ALL Includes ExecCGI Order allow,deny Allow from all </Directory> なお、自前のサーバーであれば、httpd.confで直接しています。 >できれば.cgiでやりたいなーと今更思っているのですが・・・ これは、あなたの質問の一番最初に「たくさんのHTMLファイル・・」「最後に回答を」と書かれていたので、それに従ったのですよ。 アクセスされると ****/cgi-bin/TEST になり、ボタンを押すと ****/cgi-bin/TEST/Q1.html ****/cgi-bin/TEST/Q2.html ****/cgi-bin/TEST/Q3.html ****/cgi-bin/TEST/answer/html とURLが変わって行く筈です。もちろんデータなしで直接URLを指定しても、****/cgi-bin/TEST・・・あるいは****/cgi-bin/TEST/index.htmlと同じ内容に代わっているはずです。 概観上、CGIであることを隠す・・というか、 ****/cgi-bin/TEST.cgi/Q1.html じゃなく QERY_STRINGSを表に出さないというか・・
お礼
ありがとうございます! おしえていただいたことを元に httpd.conf をひらいて見てみたところ <Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory> という記述があったので、このへんかなーと思い、これを <Directory /> AllowOverride All Options ALL Includes ExecCGI Order allow,deny Allow from all </Directory> と書き直して上書き保存し、パソコンを再起動して 再度ページを見てみましたが、変化ありませんでした。。 >これは、あなたの質問の一番最初に 「たくさんのHTMLファイル・・」「最後に回答を」 と書かれていたので、それに従ったのですよ。 大変失礼しました! URLが ****/cgi-bin/TEST.cgi/Q1.html となっていても別に問題なかったのですが・・・ ってことで、TESTファイルに.cgiとつけてみたら正常に動きました! すっごくうれしいです!!! コードじっくり見せていただき勉強します! また質問させていただくことあると思いますが・・・ ありがとうございました!!!
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>TESTファイルに書かれたコードが文字化けして出てきました! エラーがテキストで出力されてきますから、UTF対応のブラウザなら文字コード、テキストエディタならUTFで見れば・・ そしたら、BEGIN{}の行を削除するとOKのはずです。
お礼
早速ありがとうございます! 「文字化けして」と書きましたが 正確には 「chromeだと文字化けして、IEとFirefoxでは文字化けせずにそのまま」 でした。 とりあえずchromeの文字化け問題はおいといて、 IEで進めていきたいと思います。 BEGIN{ $| = 1; print "Content-type: text/plain\n\n"; open(STDERR, ">&STDOUT"); } 上記コードを削除しても、 TESTのコードがそのまま出力されてしまいました。 ためしに TEST2というファイルを同じ要領で作成し #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "Hello, World."; と書いてアップロードしても、 コードがそのまま表示されてしまいました。 TEST2ファイルをTEST2.cgiと名前を変更すると、 Hello, World. と表示され、正常に動作しました。 「.cgi」でないファイルをCGIとして動作させるのをやったことがないので どこが悪いのかさっぱり理解できません・・・。 お手数おかけしますが、またお手すきのときにお願いいたします!
補足
何度もすみません。 自分なりに調べてみて、以下の作業をしてみました。 %ProgramFiles%/Apache Software Foundation/Apache2.2/conf/httpd.conf をひらいて なにやら英語だらけだったのですが、 真ん中へんに適当に <FilesMatch "^[^\.]+$"> SetHandler cgi-script </FilesMatch> と書き込み、 「httpd.confの再起動」の方法がよくわからなかったので パソコンをそのまま再起動して また見てみたのですが、やはりコードがそのまま表示されてしまいました・・・。 .cgiにしないのと、.cgiとするのでは、 何か違いがあるんでしょうか? 私の理解の範疇を超えてしまっているので、 できれば.cgiでやりたいなーと今更思っているのですが・・・ またお手すきのときにお願いいたします!
- ORUKA1951
- ベストアンサー率45% (5062/11036)
その時点でエラーがでるということは perlへのパスが間違っているのでは?? telnet が使えれば、 > which perl UTFにした時に、BOMが付いてしまった??? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
お礼
何度もありがとうございます! perlへのパスは、 #!/usr/local/bin/perl です。 このパスでほかのcgiは正常に動作しています。 >UTFにした時に、BOMが付いてしまった??? まさにこのとおりでしたので、 漢字コードをUTF-8Nにして保存しなおしました! しかしやはり Internal Server Error です・・・。 もしまたお気づきの点ありましたら教えてください!
補足
すみません! .htaccessファイルの漢字コードを修正するのを忘れていて こちらも修正してアップロードし直して http://***/TEST にアクセスしたところ、 Internal Server Error ではなく、 TESTファイルに書かれたコードが文字化けして出てきました! お手数おかけして申し訳ありません。 引き続きよろしくお願いいたします!
- ORUKA1951
- ベストアンサー率45% (5062/11036)
No.4です。 違います。 ★ディレクトリ名は、htmlです。 ★CGI実行ファイル名は、TEST です。拡張子はありません。 |-- cgi-bin |-- .htaccess テキストファイル |-- TEST 実行ファイル |-- html/ ディレクトリ |-- index.html HTML断片ファイル |-- MQ3.html |-- NQ3.html |-- Q1.html |-- Q2.html 再度、よく読んで・・・ perlののパスの下に #!/usr/local/bin/perl BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); } と書いておくと、エラー内容がブラウザから確認できます。 面白いし、使えそうなのでもう少し手を入れたものを今夕にでも・・
お礼
何度もすみません・・・ TESTは拡張子なしで保存してます。 TEST、.htaccessと同じ階層に作成したhtmlというフォルダのなかに index.html MQ3.hml NQ3.html Q1.html Q2.html を作成したのですが・・・ それから #!/usr/local/bin/perl の下に BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); } と書き加えましたが Internal Server Error と出てしまいました。 申し訳ありません。 またお返事お待ちしてます!
- ralf124c
- ベストアンサー率52% (232/446)
たびたびでスイマセン > すみません、、、「大丈夫」というのの意味がわかりません。。。 > nameのつけかたまずいですか? nameの付け方がまずいわけではなく、CGIにPOSTした際にnameに気を付けてデータ取得していますかということです POSTされたデータをどのようにして変数に配置代入しているのかその部分のリストが提示されていないのであくまで見た目のお話ですが 例えば ・質問のフォームでは「Q1」には「q11」および「q12」がnameとして使われています ・ANo.1さんのお礼欄では、"$q11" および "$q12" というnameに対応した変数に代入して、それぞれ「q11a」「q12a」というnameのinputタグ内のvalueにセッティングしてます ・さらに同じくお礼欄で、その次のステップでは、"$q11" および "$q12" と1順目と同じ変数を使って「q11a」「q12a」というnameのinputタグ内のvalueにセッティングしてますが・・・ もしかしてなんですが、「nameと変数名を同じ」作りにしていて、2巡目では変数 "$q11a"と"$q12a"をinputタグ内のvalueにセッティングしなければいけない作りになっていませんか? という意味の「大丈夫?」というものでした 値が渡されていないのは異なるnameや変数を参照している以外考えられないからです 上記の点をご確認ください
- ORUKA1951
- ベストアンサー率45% (5062/11036)
ちょっと変なところがあったので・・ ★文字コードはすべてUTF-8です。 #!/usr/local/bin/perl my $SECTION = "\t<section>\n"; read(STDIN, my $buffer, $ENV{'CONTENT_LENGTH'}); my $HTML ="/index.html"; my $INFORM =""; my $PATH = '/Q1.html'; my @pairs = split(/&/,$buffer); my $STYLE =""; foreach $pair (@pairs) { _my ($name, $value) = split(/=/, $pair); _$FORM{$name}=$value; _$INFORM .= "\t\t\t<input type=\"hidden\" name=\"$name\" value=\"$value\">\n"; } if($FORM{'Q3'} && $FORM{'Q2'} && $FORM{'Q1'}){ _$MESSAGE="回答です。"; _$STYLE = "section p{font-size:2em;text-align:center;"; } else{ _$MESSAGE="下記の質問にお答えください。"; } if($FORM{'Q3'} eq "W"){ _if($FORM{'Q2'} eq "M"){ __$SECTION .=qq^\t\t<p>あなたは、西日本生まれの既婚男性です。</p>\n^; __$STYLE .= "background-color:blue;color:white;}"; _} _else{$SECTION .= qq^\t\t<p>あなたは、西日本生まれ未婚男性です。</p>\n^; __$STYLE .= "background-color:aqua;"; _} } elsif($FORM{'Q3'} eq "E"){ _if($FORM{'Q2'} eq "M"){ __$SECTION .=qq^\t\t<p>あなたは、東日本生まれの既婚男性です。</p>\n^; __$STYLE .= "background-color:green;"; _} _else{ __$SECTION .= qq^\t\t<p>あなたは、東日本生まれ未婚男性です。</p>\n^; __$STYLE .= "background-color:lime;"; _} } elsif($FORM{'Q3'} eq "F"){ _if($FORM{'Q2'} eq "M"){ __$SECTION .=qq^\t\t<p>あなたは、太った既婚女性です。</p>\n^; __$STYLE .= "background-color:yellow;"; _} _else{ __$SECTION .= qq^\t\t<p>あなたは、太った未婚女性です。</p>\n^; __$STYLE .= "background-color:orange;"; _} } elsif($FORM{'Q3'} eq "S"){ _if($FORM{'Q2'} eq "M"){ __$SECTION .=qq^\t\t<p>あなたは、痩せた既婚女性です。</p>\n^; __$STYLE .= "background-color:red;"; _} _else{ __$SECTION .=qq^\t\t<p>あなたは、痩せた未婚女性です。</p>\n^; __$STYLE .= "background-color:fuchsia;"; _} } else{ _if($FORM{'Q2'} eq "M"){ __$HTML = 'MQ3.html'; __$PATH = '/answer.html'; _} _elsif($FORM{'Q2'} eq "N"){ __$HTML = 'NQ3.html'; __$PATH = '/answer.html'; _} _elsif($FORM{'Q1'} eq "M" || $FORM{'Q1'} eq "F"){ __$HTML = 'Q2.html'; __$PATH = '/Q3.html'; _} _elsif($FORM{'Q0'} eq "ok"){ __$HTML = 'Q1.html'; __$PATH = '/Q2.html'; _} } my $FORM = "\t\t\t<form action=\"$ENV{'SCRIPT_NAME'}$PATH\" method=\"post\">\n\t\t\t\t$INFORM"; open(IN,"<./html/$HTML"); while(my $line = <IN>){$FORM .= "$line";} close IN; if($FORM{'Q0'} eq ""){$FORM .= "\t\t\t<p><input type=\"submit\" value=\"つづける\"></p>\n\t\t</form>\n";} elsif($FORM{'Q3'} ne ""){$FORM ="";} else{$FORM .= "\t\t\t<p><input type=\"submit\" value=\"送信\"></p>\n\t\t</form>\n";} $SECTION .= $FORM."\t\t</section>\n"; print "content-type:text/html\n\n"; while(<DATA>){ _s/\/\* style \*\//$STYLE/; _s/<!-- Message -->/$MESSAGE/; _s/<!-- Section -->/$SECTION/; _print; } __END__ <!doctype html> <html> <head> <meta charset="utf-8"> <title>サンプル</title> <style media="screen"> <!-- html,body{margin:0;padding:0;background-color:silver;} header,section,footer{width:50%;margin:0 auto;padding:5px 10px;background-color:white;} /* style */ --> </style> </head> <body> _<header> __<h1 id="title">Your title</h1> __<p><!-- Message --></p> _</header> <!-- Section --> _<footer> __<h3>A nice footer</h3> _</footer> </body> </html>
お礼
何度もありがとうございます! いただいた通りに作ってみました。 「test」フォルダのなかに .haccess TEST ファイルを作成し、 いただいたとおりコードを書き込みました。 「test」フォルダのなかに「html」フォルダを作成し、 index.html MQ3.hml NQ3.html Q1.html Q2.html ファイルを作成しました。 ・TESTファイルは属性を755に変更し、 「html」フォルダ内のファイルはすべて644です。 ・TESTファイルの先頭のperlへのパスは書き換えました。 ・すべてのファイルの文字コードをUTF-8にしました。 ・TESTファイルと「html」フォルダ内のファイルの アンダーバーは削除しました。 以上の作業をして http://***/test/TESTにアクセスしたところ、 Internal Server Error になってしまい、正しく表示されませんでした。 修正点をおしえていただけますか? たびたび申し訳ありません。 よろしくお願いいたします!
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>いただいたコードはページは飛ばず、ひとつのページ内にいくつか質問が表示されているものなのかな?と思いました。 別々のHTMLだろうが、ページ内だろうがCGIを使う限り、一切関係ないです。 ★下記を実際に試してください。 http://hoge/**/TEST でHTMLが表示されるはずです。 以後は、URLはそれぞれのHTMLとして個別に開きます。 ★実際に試さないと、けっして理解できないですよ。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ごく簡単なサンプルを・・タブは_に置換してあるので戻す。 1)下記内容の[.htaccess]をCGIを置くディレクトリに置く。 AddType application/x-httpd-cgi TEST; 2) そのディレクトリに[html]という名前のディレクトリを作る。 3) 拡張子なしで最後に書いてあるTESTと言うファイルを置く。 先頭のperlへのパスは書き換えること!! CGIとして実行権限を与えておく。755とか、705です。 4) その中に次のファイル名のテキストファイル(HTMLの断片)をそれぞれのファイル名で入れる。 パーミッションは、644とか。 [index.html] ___<input type="hidden" name="Q0" value="ok"> ___<p>今かな色々質問します。</p> ___<p>よろしかったらクリックしてください。</p> [MQ3.html] ___<p>あなたは西日本出身?それとも東日本出身?</p> ___<p>西日本:<input type="radio" name="Q3" value="W"></p> ___<p>東日本:<input type="radio" name="Q3" value="E"></p> [NQ3.html] ___<p>あなたは太っている?それとも痩せてる?</p> ___<p>太っている:<input type="radio" name="Q3" value="F"></p> ___<p>痩せている:<input type="radio" name="Q3" value="S"></p> [Q1.html] ___<p>あなたは男?それとも女?</p> ___<p>男:<input type="radio" name="Q1" value="M"></p> ___<p>女:<input type="radio" name="Q1" value="F"></p> [Q2.html] ___<p>あなたは未婚?それとも既婚?</p> ___<p>既婚:<input type="radio" name="Q2" value="M"></p> ___<p>未婚:<input type="radio" name="Q2" value="N"></p> [TEST]・・・拡張子なしでTESTというファイル #!/usr/local/bin/perl my $SECTION = "\t\t<section>\n"; read(STDIN, my $buffer, $ENV{'CONTENT_LENGTH'}); my $HTML ="index.html"; my $INFORM =""; my @pairs = split(/&/,$buffer); foreach $pair (@pairs) { _my ($name, $value) = split(/=/, $pair); _$value =~ tr/+/ /; _$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; _$name =~ tr/+/ /; _$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; _if ($value =~ /\r\n/) { $value =~ s/\r//g; } _elsif ($value =~ /\r/) { $value =~ s/\r/\n/g; } _$FORM{$name}=$value; _$INFORM .= "\t\t\t<input type=\"hidden\" name=\"$name\" value=\"$value\">\n"; } if($FORM{'Q3'} && $FORM{'Q2'} && $FORM{'Q1'}){ _$MESSAGE="回答です。"; } else{ _$MESSAGE="下記の質問にお答えください。"; } if($FORM{'Q3'} eq "W"){ _$HTML = 'answer.html'; _if($FORM{'Q2'} eq "M"){$SECTION =qq^\t\t<section>\n\t\t\t<p>西日本生まれの既婚男性</p>\n^;} _else{$SECTION .= qq^\t\t<section>\n\t\t\t<p>西日本生まれ未婚男性</p>\n^;} } elsif($FORM{'Q3'} eq "E"){ _$HTML = 'answer.html'; _if($FORM{'Q2'} eq "M"){$SECTION =qq^\t\t<section>\n\t\t\t<p>東日本生まれの既婚男性です。</p>\n^;} _else{$SECTION .= qq^\t\t<section>\n\t\t\t<p>東日本生まれ未婚男性</p>\n^;} } elsif($FORM{'Q3'} eq "F"){ _$HTML = 'answer.html'; _if($FORM{'Q2'} eq "M"){$SECTION =qq^\t\t<section>\n\t\t\t<p>太った既婚女性</p>\n^;} _else{$SECTION .= qq^\t\t<section>\n\t\t\t<p>太った未婚女性</p>\n^;} } elsif($FORM{'Q3'} eq "S"){ _$HTML = 'answer.html'; _if($FORM{'Q2'} eq "M"){$SECTION =qq^\t\t<section>\n\t\t\t<p>痩せた既婚女性</p>\n^;} _else{$SECTION .=qq^\t\t<section>\n\t\t\t<p>痩せた未婚女性</p>\n^;} } else{ _if($FORM{'Q2'} eq "M"){ __$HTML = 'MQ3.html'; _} _elsif($FORM{'Q2'} eq "N"){ __$HTML = 'NQ3.html'; _} _elsif($FORM{'Q1'} eq "M" || $FORM{'Q1'} eq "F"){ __$HTML = 'Q2.html'; _} _elsif($FORM{'Q0'} eq "ok"){ __$HTML = 'Q1.html'; _} } my $FORM = "\t\t\t<form action=\"$ENV{'SCRIPT_NAME'}/$HTML\" method=\"post\">\n\t\t\t\t$INFORM"; open(IN,"<./html/$HTML"); while(my $line = <IN>){ $FORM .= "$line"; } if($FORM{'Q0'} eq ""){$FORM .= "\t\t\t<p><input type=\"submit\" value=\"つづける\"></p>\n\t\t</form>\n";} elsif($FORM{'Q3'} ne ""){$FORM ="";} else{$FORM .= "\t\t\t<p><input type=\"submit\" value=\"送信\"></p>\n\t\t</form>\n";} $SECTION .= $FORM."\t\t</section>\n"; print "content-type:text/html\n\n"; while(<DATA>){ _s/<!-- Message -->/$MESSAGE/; _s/<!-- Section -->/$SECTION/; _print; } __END__ <!doctype html> <html> <head> <meta charset="utf-8"> <title>サンプル</title> <style media="screen"> <!-- html,body{margin:0;padding:0;background-color:silver;} header,section,footer{width:50%;margin:0 auto;padding:5px 10px;background-color:white;} --> </style> </head> <body> _<header> __<h1 id="title">Your title</h1> __<p><!-- Message --></p> _</header> <!-- Section --> _<footer> __<h3>A nice footer</h3> _</footer> </body> </html>
- ralf124c
- ベストアンサー率52% (232/446)
たびたびすいません もしかしてなんですけど 2巡目以降のinputタグ内name、「q11a」とか「q12a」の「a」っていうのは大丈夫なんですか?
お礼
何度もありがとうございます! すみません、、、「大丈夫」というのの意味がわかりません。。。 nameのつけかたまずいですか?
- ralf124c
- ベストアンサー率52% (232/446)
お礼のリストを見たのですが、黒星印のinputタグは次に送信する<form></form>内にちゃんと収まっているのでしょうか? 次の送信時のFORMタグに囲まれたところに無いので、次のCGI表示に反映されないのでは?
お礼
ご回答いただきありがとうございます! コードを省略しすぎてしまって申し訳ありません。 inputはformのなかに入れてます。 Q2の回答は表示されるのに Q1の回答が表示されないんです・・・。 またお気づきの点ありましたら教えてください。 よろしくお願いいたします! <form name="q3" action="com.cgi" method="POST"> <input type="hidden" name="stage" value="q3" /> ・・・ <input type="text" name="q11a" value="$q11" />☆ <input type="text" name="q12a" value="$q12" />☆ <input type="text" name="q21a" value="$q21" />★ <input type="text" name="q22a" value="$q22" />★ <input type="text" name="q23a" value="$q23" />★ ・・・ <input type="submit" value="判定" /> </div> </form>
- 1
- 2
お礼
すみません・・・最上部のお礼の補足の補足です。 「文字化けして」と書きましたが 正確には 「chromeだと文字化けして、IEとFirefoxでは文字化けせずにそのまま」 でした。 あせってお礼してしまったためすみません。 よろしくお願いいたします!