http://oshiete.goo.ne.jp/qa/8211303.html
上記質問の続きです。
Q1,Q2,Q3・・・と質問をいくつか用意し、
それぞれで選択したラジオボタンによって、最終ページに表示させる回答を変えたいです。
ひとつ前のページで選択したものを次ページに反映させることはなんとかできたのですが
何ページも前に選択した回答を、最終ページに反映させる方法がわかりません。
<input type="hidden"を使うところまでは教えていただいたのですが
具体的にどうしていいかわかりません。
参考サイト等ありましたら教えていただけますでしょうか。
よろしくお願いいたします!
ちなみに作成方法は以下のような感じです。
【Q1】
<form name="q1" action="com.cgi" method="POST">
<input type="hidden" name="stage" value="q1" />
<ol>
<li><input type="radio" name="q11" value="q11_a"> 犬がすき</li>
<li><input type="radio" name="q11" value="q11_b"> 猫がすき</li>
<li><input type="radio" name="q11" value="q11_c"> うさぎがすき</li>
</ol>
<ol>
<li><input type="radio" name="q12" value="q12_a"> 右利き</li>
<li><input type="radio" name="q12" value="q12_b"> 左利き</li>
</ol>
<input type="submit" value="次へ" />
【Q2】
<form name="q2" action="com.cgi" method="POST">
<input type="hidden" name="stage" value="q2" />
<ol>
<li><input type="radio" name="q21" value="q21_a"> 海がすき</li>
<li><input type="radio" name="q21" value="q21_b"> 山がすき</li>
<li><input type="radio" name="q21" value="q21_c"> 散歩がすき</li>
</ol>
<input type="submit" value="次へ" />
【Q3】
<form name="q3" action="com.cgi" method="POST">
<input type="hidden" name="stage" value="q3" />
<ol>
<li><input type="radio" name="q31" value="q31_a"> 男性</li>
<li><input type="radio" name="q31" value="q31_b"> 女性</li>
</ol>
<ol>
<li><input type="radio" name="q32" value="q32_a"> 既婚</li>
<li><input type="radio" name="q32" value="q32_b"> 未婚</li>
</ol>
<input type="submit" value="判定" />
【最終ページ】
「あなたは犬がすきで右利きですね」
「あなたは海がすきですね」
「あなたは女性で既婚ですね」
と表示させたいです。
実際には、Q1→Q2→Q3と順番にページが飛ぶのではなく、
この答えだったら次はこのページ、それ以外は別のページ、
といった感じで、様々なページに飛びます。
以下のような感じで条件分岐を書いています。
if ($stage eq "q1") {
if ($q11 eq "q11_a") {
Q2();
}
elsif ($q11 eq "q11_c") {
・・・;
}
elsif ($q12 eq "q12_b") {
Q3();
}
else {
・・・;
}
}
よろしくお願いいたします!
No.8ベストアンサー
- 回答日時:
ちょっと手を加えてみた。
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>
すみません・・・最上部のお礼の補足の補足です。
「文字化けして」と書きましたが
正確には
「chromeだと文字化けして、IEとFirefoxでは文字化けせずにそのまま」
でした。
あせってお礼してしまったためすみません。
よろしくお願いいたします!
No.12
- 回答日時:
>TESTファイルに.cgiとつけてみたら正常に動きました!
と言うことは、CGIは動作する。
そのディレクトリに
Options に +ExecCGI
が指定されていて、かつ、
AddHandler cgi-script .cgi
が指定されている。ということです。
この場合.htaccessに
AddType application/x-httpd-cgi TEST;
で、TESTというファイルはCGIとして動作するはずです。
ひょっとして、TESTの実行権限が666のままとか??
あるいは、
SetHandler cgi-script
を書く必要があるのかも/??
いずれにしても、拡張子は動作には関係ないのです。Windowsとは異なり、すべての動作は設定ファイルでディレクトリごとファイル名ごと、拡張子こどに指定できる物なのですよ。
拡張子の呪縛から解放されると良いですね。
ありがとうございます!
ひとつひとつ確認していってみたいと思います。
長々とお付き合いいただき、丁寧にお返事くださって本当に助かりました。
ありがとうございました!
No.11
- 回答日時:
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/htacc … )
[例]
<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とつけてみたら正常に動きました!
すっごくうれしいです!!!
コードじっくり見せていただき勉強します!
また質問させていただくことあると思いますが・・・
ありがとうございました!!!
No.10
- 回答日時:
>TESTファイルに書かれたコードが文字化けして出てきました!
エラーがテキストで出力されてきますから、UTF対応のブラウザなら文字コード、テキストエディタならUTFで見れば・・
そしたら、BEGIN{}の行を削除するとOKのはずです。
この回答への補足
何度もすみません。
自分なりに調べてみて、以下の作業をしてみました。
%ProgramFiles%/Apache Software Foundation/Apache2.2/conf/httpd.conf
をひらいて
なにやら英語だらけだったのですが、
真ん中へんに適当に
<FilesMatch "^[^\.]+$">
SetHandler cgi-script
</FilesMatch>
と書き込み、
「httpd.confの再起動」の方法がよくわからなかったので
パソコンをそのまま再起動して
また見てみたのですが、やはりコードがそのまま表示されてしまいました・・・。
.cgiにしないのと、.cgiとするのでは、
何か違いがあるんでしょうか?
私の理解の範疇を超えてしまっているので、
できれば.cgiでやりたいなーと今更思っているのですが・・・
またお手すきのときにお願いいたします!
早速ありがとうございます!
「文字化けして」と書きましたが
正確には
「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として動作させるのをやったことがないので
どこが悪いのかさっぱり理解できません・・・。
お手数おかけしますが、またお手すきのときにお願いいたします!
No.9
- 回答日時:
その時点でエラーがでるということは
perlへのパスが間違っているのでは??
telnet が使えれば、
> which perl
UTFにした時に、BOMが付いてしまった???
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
この回答への補足
すみません!
.htaccessファイルの漢字コードを修正するのを忘れていて
こちらも修正してアップロードし直して
http://***/TEST
にアクセスしたところ、
Internal Server Error
ではなく、
TESTファイルに書かれたコードが文字化けして出てきました!
お手数おかけして申し訳ありません。
引き続きよろしくお願いいたします!
何度もありがとうございます!
perlへのパスは、
#!/usr/local/bin/perl
です。
このパスでほかのcgiは正常に動作しています。
>UTFにした時に、BOMが付いてしまった???
まさにこのとおりでしたので、
漢字コードをUTF-8Nにして保存しなおしました!
しかしやはり
Internal Server Error
です・・・。
もしまたお気づきの点ありましたら教えてください!
No.7
- 回答日時:
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
と出てしまいました。
申し訳ありません。
またお返事お待ちしてます!
No.6
- 回答日時:
たびたびでスイマセン
> すみません、、、「大丈夫」というのの意味がわかりません。。。
> 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や変数を参照している以外考えられないからです
上記の点をご確認ください
No.5
- 回答日時:
ちょっと変なところがあったので・・
★文字コードはすべて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
になってしまい、正しく表示されませんでした。
修正点をおしえていただけますか?
たびたび申し訳ありません。
よろしくお願いいたします!
No.4
- 回答日時:
>いただいたコードはページは飛ばず、ひとつのページ内にいくつか質問が表示されているものなのかな?と思いました。
別々の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>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで集計したい。
-
apacheでPerl CGIが作動せず、5...
-
CGIについてです。教えて下さい...
-
フォームを再送信しますか?
-
入力フォーム(電話番号)
-
POSTメソッドの最大容量について
-
CGIでラジオボタンの選択結果を...
-
めちゃきれい
-
number 改行が追加できない
-
生成AI画像について
-
3DCG
-
ホームページにメールフォーム...
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
-
ホームページにCGIを設置したの...
-
ホームページにCGIを設置したの...
-
サーバーのエラーでおしえてく...
-
ホームページの事でおしえてく...
-
さくらサーバーにcgiフォームを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックボックスの返す値
-
別formのhidden項目を自form値...
-
チェックボックスで選択した内...
-
Error: No Recipient というエ...
-
hiddenで送ったデータの取り出し方
-
ボタンの処理
-
チェックボックスでのvalue値の...
-
フォームの入力内容の後ろに文...
-
掲示板の文字色指定について
-
CGI→CGI変数の引き継ぎは...
-
携帯用アンケートページを作成...
-
フォームの年号リストの自動更新
-
クリップボードに記憶した文字...
-
メールフォームで良いサイト
-
複数の検索のページをつくりたい
-
プルダウン&キーワードで
-
CGIに渡しているパラメータを表...
-
複数ボタンのvalueを送れない
-
CGIでチェックボックスを使...
-
テキストエリアのデータを隠し...
おすすめ情報