配列の中身がイコールならば

このQ&Aのポイント
  • フォームを使って色を三色選んでもらい、選んだ3つがイコールの場合に「貴方は素敵ですね」と表示されるようにしたい
  • 現在の実装では、どの色を選んでも必ず「貴方は素敵ですね」と表示される
  • 配列をeq演算子で比較しているため、選んだ3つの色がイコールになっていないことが原因と考えられる
回答を見る
  • ベストアンサー

配列の中身がイコールならばとしたいです。

こんばんわ。ホームページのフォームを使って色を三色選んでもらい、それに対して貴方はこんな方ですね、としたいのですが、 好きな色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つがイコールの場合、貴方は素敵ですねと表示されるようにしたいです。自分でも調べていますが、よろしかったら是非お教えください。 でわ。

  • xphp
  • お礼率53% (24/45)
  • CGI
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

if (@check1 eq "黄","紫","黒"){ print "貴方は素敵ですね。";} これがまずいんでは? 以下のようにすればどうでしょう。 my $check = join "," ,@check1; if ($check =~ /黄/ && $check =~ /紫/ && $check =~ /黒/) { print "貴方は素敵ですね。"; }

xphp
質問者

お礼

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

関連するQ&A

  • チェックボックス 横並びに保存

    htmlファイルから、 <form action="./ppp.cgi" method="POST"> <table border="1"> <tr> <td> 好きな色(複数選択可):</td> <td> <input type="checkbox" name="color" value="white">白 <input type="checkbox" name="color" value="red">赤 <input type="checkbox" name="color" value="green">緑 <input type="checkbox" name="color" value="pink">桃色 <input type="checkbox" name="color" value="yellow">黄色 <input type="checkbox" name="color" value="purple">紫 <input type="checkbox" name="color" value="orange">橙色 <input type="checkbox" name="color" value="blue">青 <input type="checkbox" name="color" value="black">黒</td></tr> </table><br> <input type="submit" value=" 送信 "> <input type="reset" value=" クリア "> でデータを送信して、 ------------------------------------- #!/usr/bin/perl require './jcode.pl'; $file = "houkoku.txt"; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } open( WRITE, "+< $file" ); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); # タグ処理 $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/\t//g; $value =~ s/\r\n/\n/g; $value =~ s/\r/\n/g; $value =~ s/^\s+//; $value =~ s/\s+$//; $FORM{$name} .= (defined $FORM{$name}) ? "," . $value : $value; @value = $value; print WRITE"@value\n"; } foreach ( keys %FORM ) { if( $FORM{$_} eq '' ) { $FORM{$_} = '入力がありません'; } } if ( $FORM{'color'} eq '' ) { $FORM{'color'} = '入力がありません'; } print "Content-Type: text/html\n\n"; print <<END_HTML; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <center> <table border="1"> <td> あなたの好きな色</td> <td> $FORM{'color'}</td></tr> </table> </center> </body> </html> END_HTML exit; ---------------------------------- でデータを受け取って、houkoku.txtに書き込みをしたいのですが、 一応書き込みはされていますが、縦にデータが並んでいます。 横にカンマ仕切りで、white,yellow,redと保存するにはどうしたらよいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • チェックボックスから配列を使って値を受け取る方法

    チェックボックスから配列を使って値を受け取る方法について、 以下の通りに試してみたのですが、上手く行かず、 配列$fCに値が入りません。 どなたか原因を教えていただけないでしょうか。 ------------------------------------------------ hoge.html <form action="hoge.php"> <input type="checkbox" name="fC[]" value="hoge"> hoge <br> <input type="checkbox" name="fC[]" value="foo"> foo <br> <input type="checkbox" name="fC[]" value="bar"> bar <br> <input type="submit" value="OK"> </form> ---------------------------------------------------------- ------------------------------------------------- hoge.php <? for( $i=0; $i<count($fC); $i++ ) { print $i ." ::: " . $fC[$i] . "<br>\n"; } ?> ----------------------------------------------------------

    • ベストアンサー
    • PHP
  • チェックボックスからの値を受け取る

    つたなくもperlを使ってCGIスクリプトを作っている者です。 <input type="checkbox" name="test" value="1">1 <input type="checkbox" name="test" value="2">2 <input type="checkbox" name="test" value="3">3 上記のように、nameは全て同じ名前にして、データを受け取りたいと思っています。 ただ、 if($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{CONTENT_LENGTH}); } require './jcode.pl'; @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # 文字コードをS-JIS変換 &jcode'convert(*value, "sjis", "", "z"); $data{$name} = "$value"; と、最初に$data{test}に格納をしています。 現在は全ての項目にチェックをいれても、 3 と表示されてしまいます。 なんとかjcode.lib以外のモジュールを使わないで、 $data{test}に選択された全ての項目を入れることはできないでしょうか。 ご教授いただけましたら幸いです。

    • ベストアンサー
    • Perl
  • 携帯用のフォームで、チェックボックス複数回答の件

    ご質問になりますかどうか、、、なのですが、 携帯用にCGIのフォームを作りました。 自分で作成できませんので、http://www.kurohama.net/c5.shtml のものを利用させていただきました。 が、チェックボックスの複数回答させたいものがあり、設定をしましたところ、複数チェックをした、最後のチェックボックスのみ、表記されます。 たぶん、HTMLページ上の設定は、いろいろなもので、見直して大丈夫かと思うのですが、CGIの部分で、どこをなおせばよいのか、まったくわからずにおります。 HTMLページ <input name="answer" type="checkbox" id="tel" value="電話"> 電話  <input name="answer" type="checkbox" id="fax" value="ファックス">ファックス  <input name="answer" type="checkbox" id="mail" value="E-mail">E-mail  <input name="answer" type="checkbox" id="keitai" value="携帯電話">携帯電話 CGIページ(どこを表記すればよいかわからないのですが、一部書きだします) #■入力 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } if ($buffer eq "") { &err1('エラーです。'); } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/, $pair); $name2 = $name; $value2 = $value; $FORM2{$name} = $value; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; if($convert2 eq "1"){ $sjis = '[\x81-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF]'; $emoji = '[\xF8\xF9][\x40-\x7E\x80-\xFC]'; $value =~ s/\G((?:$sjis)*)($emoji)/$1.'&#'.unpack('n',$2).';'/ego; $value =~ s/&#(63\d{3});/pack('n',$1)/eg; &jcode'h2z_sjis(*value); &jcode'convert(*value, 'sjis'); } $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/,//g; $value =~ s/\n/<br>/g; $value =~ s/\r//g; $value =~ s/\t//g; #フォーム変数へ $FORM{$name} = $value; } ・・・ $answer = $FORM{'answer'}; ・・・ #確認画面のレイアウト ・・・ <font color="$collar3">$answer</font> ・・・ <input type="hidden" name="answer" value="$answer"> ・・・ #自分に送信されるメール print MAIL "■ご希望の返答方法\n"; print MAIL "$answer\n"; ・・・ CGIの部分は、どこをペーストさせていただいてよいのかわからずに、ご質問にならないかもしれないのですが、もし、お分かりになります方がおりましたら、アドバイスいただけましたら幸いです。 どうぞ よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • PHPで配列をPOSTデータで送った場合の取り出し方を教えてください。

    PHPで配列をPOSTデータで送った場合の取り出し方を教えてください。 知恵袋でも質問したのですか、使い方をよくわかっておらず、補足が追加出来なくって、回答者の方に返事が出来なくなってしまいました。申し訳ありません。 プログラム初心者です。始めたばかりで、自分で考えて知っている範囲で組もうとしているのですが、 例えば <form method="POST" action="○○○"> <input type="checkbox" name="color[]" value="赤" />赤<br /> <input type="checkbox" name="color[]" value="青" />青<br /> <input type="checkbox" name="color[]" value="緑" />緑<br /> <input type="submit" value="送信" /> とこのように書いてすべてにチェックを付けて送った配列のデータはどのように取り出したら良いのでしょうか? foreachで下記のように、 $x = $_POST['color']; foreach( $x as $value ){ echo "色 = ". $value."<br />\n"; } exit; $_POST['color']の配列を取り出そうすると Invalid argument supplied for foreach() と表示されてしまいます。 var_dumpで配列を表示させると、 string(3) "Array" と表示され確かに配列として届いていると思います。 確かにチェックはいれて送信もしています。 print "{$_POST['color']}"で表示してみると、"A"と"r"と"r"でした。 チェックボックスを10個に増やして、それぞれ$_POST['color'][0]~[9]まで 表示させてみたところ、はじめの5個はArrayも文字がいつつ表示され、残りは空白でした。 知恵袋のほうで、取り出し方が間違っているとの指摘をいただきましたが、どのように取り出したら良いのでしょうか。 どなたかお手数ですが、教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • POSTで配列のデータを渡す方法は?

    初歩的な質問で申し訳ございません。配列でデータを入力し、POSTで配列のデータを渡す方法を知らなくて困っています。いろいろ調べましたが、見つかりません。 だれか、教えてください。 ..... &ReadParse(*in); for ($i = 0 ; $i <=10 ; $i++){    $data[$i] = $in{'data[$i]'}; } sub main { 。。。以下修正部分・。。。 print "<form method=\"POST\" action=\"$userpro\">"; print " <input type=\"hidden\" name=\"mode\" value=\"miss1\"><p>"; print " <input type=\"text\" name=\"data[1]\" size=\"20\" value=\"$data[1] \">"; print " <input type=\"text\" name=\"data[2]\" size=\"20\" value=\"$data[2] \">"; print " <input type=\"text\" name=\"data[3]\" size=\"20\" value=\"$data[3] \">"; ...... print " <p><input type=\"submit\" value=\"修正\" name=\"B1\"></p>\n" ; print "</form>\n" ; ・・・・ } #Submit後実行される関数 sub miss1 { print "Content-type: text/html\n\n"; for ($i = 0 ; $i <=10 ; $i++){ print "$i-$data[$i]<br>"; } exit; } 結果は 0-空(空白) 1-空(空白) 2-空(空白) 。。。 にです。 何が間違っているでしょうか。よろしくお願いします。

    • ベストアンサー
    • Perl
  • コーディングについて

    http://www.aimix.jp/cgi/accformkioku.html 上のサイトを参考にログイン画面を作っていまして、 この例の場合のようにセレクトする値が3つ、4つならこの書き方でもよいと思うのですが、 セレクトする値が10個、15個…となればソースが長くなり、とても見づらいものとなってしまいます。もうちょっとスマートな 書き方はあるのでしょうか?(一部略してあります) print "Content-type: text/html\n\n"; print "<html>\n"; print "<head>\n"; print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n"; print "<title></title>\n"; print "</head>\n"; print "<body>\n"; &analysis; &auth; sub analysis{ if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\r//g; $FORM{$name} = $value; } $pass1 = $FORM{'user_name'}; return; sub login{ if($pass1 eq '1'){ $check1 ="selected"; } elsif($pass1 eq '2'){ $check2 ="selected"; } else{ $check3 ="selected"; } print <<HEADER; <center> <caption><h1>ログイン</h1></cption> <table border="5" bgcolor="cfcfcf" width="300" height="150"> <tr> <td align="center" valign="center"> <form name="form" method="post" action="./xxx.cgi"> ユーザー名: <select name="user_name"> <option value="1" $check1>A</option> <option value="2" $check2>B</option> <option value="3" $check3>C</option> </select> <br><br> パスワード: <input type="password" name="password"> <br> <center> <input type="submit" name="submit" value="ログイン"> </center> </form> </td> </tr> </table> </center> HEADER } print "</body>"; print "</html>"; 1;

    • ベストアンサー
    • Perl
  • 配列で渡されたチェックボックスの値の処理

    POST元のページから <input type="checkbox" name="hoge[23]" value="1"> <input type="checkbox" name="hoge[31]" value="0"> <input type="checkbox" name="hoge[33]" value="1"> ・・・ のような形でデータが渡されます。 要素一つに付き、ONなのか、OFFなのか、表示されていないのかの判別が必要なため、このような形になっています。 受けるPHP側で、hogeの配列番号と一致したものがあればそれに対する処理を行う必要があります。 $buff=array(20,30,31); となっているとして、 $_POST["hoge"]の配列の値と$buff内の数字が一致したら~ (上記例だと31が一致) の書き方はどう書けばいいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 配列をWHEREで検索できますか。

    こんにちは。私はMysql4.1,PHP5を使用しています。 いまチェックボックスを使った配列の検索で悩んでおりました。 <input type="checkbox" name="chiiki[]" value="1">北海道 <input type="checkbox" name="chiiki[]" value="2">青森県 という形でhtmlからPOSTで値を受けとり検索したいと考えています。 テーブルには ---------------- chiiki ---------------- 1,2,4 というように配列で登録しています。 http://oshiete.nikkeibp.co.jp/kotaeru.php3?q=1496449 を参考にさせていただいたのですが、結果がうけとれません。 今まで配列を処理するときは while($col = mysql_fetch_array($rst)){ $chiiki = split(",",$col['chiiki']); } としていましたが、これは結果の値を受け取ったあとなので whereを使って配列と一致させる方法がわかりません。 どなたかご教授いただけないでしょうか。よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • JavaScriptでcheckboxの入力個数制限

    以下のようなチェックボックスがあります。 3つ以上チェックできないようにしたいのですが、JavaScriptで可能でしょうか? <FORM method=POST action="aaa.cgi" name="FORM1"> <input type="checkbox" name="Q1" value="1">1<br> <input type="checkbox" name="Q2" value="1">2<br> <input type="checkbox" name="Q3" value="1">3<br> <input type="checkbox" name="Q4" value="1">4<br> <input type="checkbox" name="Q5" value="1">5<br> </form>

専門家に質問してみよう