if文を利用してリストの表示をしようとしています

このQ&Aのポイント
  • if文を使ってドロップダウンリストで指定したタイプに応じてリストの表示を制御する方法を教えてください。
  • ドロップダウンリストでタイプA系列を選択した場合は「s_1」「s_2」にチェックが入っている物のみ表示し、タイプB系列を選択した場合は「s_3」「s_4」「s_5」にチェックが入っている物のみ表示したいです。
  • 現在のコードでは全てのリストが表示されてしまいます。どのように修正すればいいでしょうか?
回答を見る
  • ベストアンサー

if文について

if文を利用してリストの表示をしようとしています。 ドロップダウンリストは <SELECT name="type"> <OPTION value="all">指定しない </OPTION> <OPTION value="1">タイプA系列</OPTION> <OPTION value="2">タイプB系列</OPTION> となっています。 データはチェックボックスで1か空白で保存されていて、A系列は「s_1」「s_2」、B系列は「s_3」「s_4」「s_5」にチェックが入っているかどうかを振り分けしたいんです。 なので、ドロップダウンリストで「タイプA系列」を選択したら「s_1」「s_2」に1が入っている物のみ表示するというものです。 現在のところこの形です。 if ($FORM{'type'} ne 'all') { if ($FORM{'type'} eq '1'){ if ($s_7 || $s_8 eq 1) { ; } else { next; } }else{ if ($s_9 || $s_10 || $s_11 eq 1) { ; } else { next; } } } このようにやってみましたが全部表示されてしまいます。 どのように直したらOKでしょうか? お願いします。

  • Perl
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

if($type eq 'all') {  #全部表示 } elsif($type eq '1') {  if ($s_1 or $s_2) {   # 表示  } } elsif($type eq '2') {  if ($s_3 or $s_4 or $s_5) {   # 表示  } } 何のひねりもなく書いてみました。 インデントは全角スペースです。 #表示のところにフラグを立てて後で表示させるのもあり。 IF文しかないので、表示をどうやってるのかわからんけども。

その他の回答 (1)

  • 9arabi
  • ベストアンサー率32% (140/433)
回答No.1

ちょっと説明が分かりにくいので何ともいえないのですが cgiでWEBページを作られているのですよね? ドロップダウンリストのあるページと、チェックボックスのあるページは別ですか? もし同じであれば、同ページでしかもPOSTしない状態でのデータの取得はcgiではできません。 JavaScriptを使って実装するのが一番よいと思います。

master-3rd
質問者

補足

あ、説明が足らなくてすみません。 自分で登録して他の人が結果を見るという物です。 データベースになるんでしょうか? で、自分が登録するページにはいくつかのチェックボックスが並んでいて、それぞれタイプA系列とタイプB系列に分かれるんです。 簡単に言うと、CD系とDVD系みたいなものでしょうか。 保存時に、これはCD-ROM、これはCD-R、これはDVD-ROM、これはDVD-RAM~というようにどれか1つにチェックを入れます。もちろんこれをファイルに保存ですね。 で、そのファイルを読み込み他の人に見せるときに1つ1つ分けると検索するのに手間になると思うのでCDとDVDの2つに分け、CD系列を選択するとCD-ROM.CD-R.CD-RW~が出力されるってのを実現させたいんです。 こんな説明でOKでしょうか?

関連するQ&A

  • javaScriptのif文について…

    以下のようなプログラムを作成しました。作ったのはサンプルで、本当に作りたいのはもっと条件が多いのを作りたいのですが、かなりifの羅列となってしまいます。他に何か良い方法はありませんか?教えてくださいm(__)M <html> <script type="text/javascript"> function hoge(){ var v1=document.getElementById('s1').value; var v2=document.getElementById('s2').value; var rslt; if (v1==1 && v2==1) { rslt=36; } else { if (v1==1 && v2==2) { rslt=29; } else { if (v1==1 && v2==3) { rslt=22; } else { if (v1==1 && v2==4) { rslt=14; } else { if (v1==1 && v2==5) { rslt=7; } else { if (v1==1 && v2==6) { rslt=0; } else { rslt='?'; }} document.getElementById('txt').value=rslt; } </script> <body> <select id="s1" onChange="hoge()"> <option value="1">1 <option value="2">2 <option value="3">3 <option value="4">4 </select>   <select id="s2" onChange="hoge()"> <option value="1">1 <option value="2">2 <option value="3">3 <option value="4">4 <option value="5">5 <option value="6">6 </select><p> <input type="text" id="txt" value=""> </body> </html>

  • if構文でAND検索

    サイト内検索で”空白で区切った単語が全て含まれるページを表示”する「AND検索」を、簡単なサイト登録型の検索エンジンのカテゴリ検索で同じようなことを実行したいのです。 たとえば、@list内に サイトA,素材,壁紙, サイトB,素材,リンク, というような2つのサイトが登録されていたとして、 下のように処理します。(一部略 print <<EOD; <select name="s1"> <option value="素材">素材 <option value="壁紙">壁紙 <option value="リンク">リンク </select> <select name="s2"> <option value="素材">素材 <option value="壁紙">壁紙 <option value="リンク">リンク </select> <input type="submit"> EOD require 'cgi-lib.pl'; &ReadParse(*form); $s1=$form{'s1'}; $s2=$form{'s2'}; foreach(@list){ ($site,$content1,$content2)=split(/\,/); *** } ここで「OR検索」なら、***の部分に if(($s1 eq $content1)|| ($s1 eq $content2)|| ($s2 eq $content1)|| ($s2 eq $content2)){ print "$site<br>"; } このようにすれば、例えばセレクトボックスで 「素材」を選択→「サイトA」「サイトB」 「壁紙」を選択→「サイトA」 「壁紙」と「リンク」を選択→「サイトA」「サイトB」 が表示されます。 ですが、「AND検索」はif構文をどのように組めばいいのでしょうか? 結果的には 「素材」を選択→「サイトA」「サイトB」 「素材」と「壁紙」を選択→「サイトA」 「壁紙」と「リンク」を選択→(なし) としたいのですが、どうすればいいのか分かりません。 初心者で説明不足かもしれませんが、よろしくお願いします。

  • if 文  わかんない・・・

    都道府県セレクトoptionフォームにて 都道府県を選択しない場合のエラーを なんとか2行で出せるようになったのですが 選択して下さい = value="0" if ($in{'pre'} eq '0') { &error("都道府県の選択!!"); } if ($in{'pre'} eq "") { &error("都道府県の選択!!"); } これを1行にするにはどうしたらいいのでしょう? ↓↓はダメでした(≧m≦) if ($in{'pre'} eq "" || '0') { &error("都道府県を選択!!"); }

    • ベストアンサー
    • Perl
  • 「ne」の使い方

    検索CGIを改造中です。 チェックボックスにチェックがあれば確答する物のみを表示する、という部分を構築しているのですが、頭がこんがらがってしまったので教えてください。 $value1の値はチェックボックスで、チェック時にonそうでない時は空白(データなし)として保存されています。 if ($FORM{'value1'} ne '') {  if ($value1) { ; } else { next; } } と if ($FORM{'value1'}) {  if ($value1) { ; } else { next; } } これは全く同じ働きをしてくれるのでしょうか? 上が改造前の他の項目用をコピッて来たもので、下が自分で「これでもいけるのでは?」と考えた方です。 大丈夫でしょうか?

    • ベストアンサー
    • Perl
  • if文を簡単に

    CGIを改造中です。 オプションメニューを設置しました。 ただ、検索などに利用したかったので、名前と値を別のものにしています。(犬=1,猫=2のように) データ入力画面の方はリストを入力したのですが、名前が50を超えるのでリスト表示画面や検索結果表示画面でif文を大量に書くのは面倒です。 (if($name eq1){print "犬\n";elsif~) どうにかしてこれを簡潔にすることは出来ないものでしょうか?

  • if文を使用すると表示されません。

    フォームに年月日を入力してもらい、下記のスクリプトで 入力画面を表示させようとしています。 年月日を入力するフォームにはhiddenをいれ、if文でサブルーチン &newFormを表示させようとしているのですが、うまくいきません。 <input type=hidden name=mode value="data"> if文を使用せずに、&newFormを直接呼び込むと表示するのですが・・・。 ぜひご教授願えればと思います。 よろしくお願いします。 ===================================================================== &query; # 初期設定 if($in{'mode'} eq "date"){ &newForm; } sub newForm{ print"Content-type:text/html\n\n"; print <<EOF; <html> <head> <title></title> </head> <body> <textarea name="diary" rows="30" cols="70"></textarea><br> <input type="submit" value="書き込み"> </body> </html> EOF } sub query{ $ENV{'REQUEST_METHOD'}=~ tr/a-z/A-Z/; 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; $in{$name} = $value; } }

    • ベストアンサー
    • CGI
  • データベースCGIでの検索方法

    某データベースCGIを改造して何とか使えるようにしようとしています。 検索してヒットしたもののみ表示させる部分なのですが、どのようにしたら実現できるかさっぱりです。 やりたいことは数値でヒットした物のみ表示です。 検索フォームにドロップダウンリストとして 1 ; ~10 2 ; 11~50 3 ; 51~100 … 10 ; 2,000~ と言う風にセットします。 データは3桁区切りのカンマが入ったものが保存されています。 どのようにして検索させればいいのでしょう? 普通にif文で if($FORM{'data'} eq '1'){ if($data =< 10){ ; } else { next; } } elseif($FORM{'data'} eq '2'){ if($data => 10 && $data =< 50 ){ ; } else { next; } } ~~ という書き方であっているのでしょうか? そのものずばりの回答がとてもありがたいですけど、 参考となるCGIがあったらそれの紹介もあわせてお願いします。

  • Javascriptでセレクトメニューの選択チェックの方法

    Javascriptでセレクトメニューのフォームをチェックしたいのですが、 リストメニューの「選択して下さい」を選んだままだと、「番号を選択して下さい。」とエラーを出したいのですが、下記の様に書いてみたのですが、うまく動きません…どのように書けばいいか教えて下さい。宜しくお願いします。 <script language=\"JavaScript\"> <!-- function Check() { var str = document.form.a.value; if(document.form.a.value == "0") { alert("番号を選択して下さい"); } //--> </script> <form id="form" name="form" method="post" action="##"> <select name="a" onblur="Check();"> <option value="0">選択して下さい</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <input type="submit" name="Submit" value="登録" onClick="Check();"> </form>

  • if文で質問です。

     初めまして!初めてこの掲示板にきました。 今後ともよろしくお願いします。 今、研修で会議室の予約システムを作っています。 お昼休み(12~13時)を空欄にしたいのですが、 if文が解らなくて困っています。 本も見てみたのですが、載っていません。 どなたか教えてください。 書いてみた方法では、エラーになる上、欲しい物とは程遠い物が出来てしまいます。 s_timeは選択された開始時間、e_timeは選択された終了時間です。 このように作っています。 function gomon(){ if((document.form1.e_time.value - document.form1.s_time.value) > 5){ alert("利用時間は5時間までです。"); } if((document.form1.e_time.value - document.form1.s_time.value) < 6){ sanmon(); } }

  • コーディングについて

    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

専門家に質問してみよう