一回も披露したことのない豆知識

こんばんわ。ホームページのフォームを使って色を三色選んでもらい、それに対して貴方はこんな方ですね、としたいのですが、
好きな色3色選んでください。

<form method="post" action="hoge.cgi">

 <input type="checkbox" name="q1" value="赤">赤
 <input type="checkbox" name="q1" value="青">青
 <input type="checkbox" name="q1" value="黄">黄色
 <input type="checkbox" name="q1" value="紫">紫
 <input type="checkbox" name="q1" value="黒">黒
 <input type="checkbox" name="q1" value="白">白
 <input type="checkbox" name="q1" value="ピンク">ピンク
 <input type="checkbox" name="q1" value="緑">緑

<br>
<br>
<input type="submit" value="結果を見る!!">
<input type="reset" value="取消"></form>

とフォームから3つ選んでもらい、送信します。

そして、perlで記述したCGIで、

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
$buffer .= $ENV{'QUERY_STRING'};

@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {

($name,$value) = split(/=/,$pair);
$out{$name} = $value;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
if ($name eq "q1") {
push (@check1,$value);
}
}

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>$title</title></head>\n";
print "<body>\n";

#配列の数個を数える。3個以外はプログラムを中止。

$num = $#check1;

if ($num ne 2){
print "3個選んでね。";
exit;
}

#もし配列の中身が次の3つだったら、"貴方は素敵ですね"と答える。

if (@check1 eq "黄","紫","黒"){ print "貴方は素敵ですね。";}
#elsif (){;}
else { print "ごめんね。データがないよ。";}


print "</body>\n";
print "</html>\n";

exit;

と、したのですが、どの色を選んでも、貴方は素敵ですね。としか、表示されません。赤と紫と黒を選んでも、同じです。配列を eq としている時点でどうかと思いますが、選んだ3つがイコールの場合、貴方は素敵ですねと表示されるようにしたいです。自分でも調べていますが、よろしかったら是非お教えください。

でわ。

A 回答 (1件)

if (@check1 eq "黄","紫","黒"){ print "貴方は素敵ですね。

";}

これがまずいんでは?
以下のようにすればどうでしょう。

my $check = join "," ,@check1;
if ($check =~ /黄/ && $check =~ /紫/ && $check =~ /黒/) { print "貴方は素敵ですね。"; }
    • good
    • 0
この回答へのお礼

ありがとうございました。早速これに変えたところ、まったく正常に動きました。しかも、色の順番を入れ替えても、まったく正常に動きました!!まるで魔法のようです。早く勉強したいです。ありがとうございました。

お礼日時:2009/02/01 08:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報