• ベストアンサー

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
  • 回答数4
  • ありがとう数3

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

unless は if の逆で「与えられた条件が成り立たないときにブロックを実行する」という文です. 今条件として $in{pre} とだけ書いてありますが, これだと「空文字列か (数値の) 0, あるいは (文字列の) "0" のときに偽, その他のときに真」となります. つまり, unless ($in{pre}) と書くと結果的に 「$in{pre} が空文字列か数値の 0, もしくは文字列の "0" のときに以下のブロックを実行する」という意味になります.

takumana20
質問者

お礼

2度も(補足にまで)回答いただきありがとうございました。 これから色々つかっていきます!

その他の回答 (3)

  • snowize
  • ベストアンサー率27% (68/245)
回答No.3

if ($in{'pre'} eq "" || '0') { …… } これについてちょっと丁寧に説明しますと、インタプリタの解釈としては、 $in{'pre'} は "" か '0' とイコール(eq)か? ではなく、 $in{'pre'} は "" とイコール(eq)もしくは '0' か? という解釈になってしまうんですね。 ちょっとPerlから離れて久しいので「'0'は長さのある文字列と見なされてtrue」となるのか「'0'は数値0と見なされてfalse」となるのかは忘れてしまいましたが、どっちにしろ定数値となってしまうってわけです。 ちょっと詳しい本ならば||や&&の使い方で詳しく説明されていると思うので、もう一度確認しなおすか、もしくは今後の課題としてメモしておくといいと思いますよ。

takumana20
質問者

お礼

意味もわかりました。ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

あっさり unless ($in{'pre'}) { &error("都道府県の選択!!"); } とか.

takumana20
質問者

補足

OKでしたけど unless は value="" value="0" だけに適用になるって事なのですか? セレクトoptionですけど 空欄が       "" 選択して下さいが "0"  都道府県が    "1"-"47"

回答No.1

未検証 if (($in{'pre'} eq "") || ($in{'pre'} eq '0') ) { &error("都道府県を選択!!"); }

takumana20
質問者

お礼

素早い回答ありがとうございました。

takumana20
質問者

補足

できました!!!! ちなみに ""とか''で区切っちゃいましたけど どっちでもいいですか?

関連するQ&A

  • perl if文 助けて~

    perl初心者ながら暇見て住所CGIフォームを作っています。 だんだん完成してきましたが今一歩です(T_T)ご指導下さい! 名前、電話、都道府県、住所、の4つの項目があります。 {'nam'} {'tel'} {'pre'} {'add'} {'pre'}はSELECToption 他はtextFORM 全部記入した時には、次に進めてOKなのです。 if ((($in{'nam'}) && ($in{'tel'}) && ($in{'add'}) && ($in{'pre'} > "0")) { print 全部未記入時でも、次に進んでも無記入なのでOKです。 エラー時に&errorのエラー画面に飛ばす事も出来ました。 ただ、書き忘れ時が困るので {'nam'} {'tel'} {'pre'} {'add'}の内、1~3つとか記入して 他が抜けてたりした時だけエラーにしたいのです。 でも間違って空スペースとかでエラーが出て欲しくないし・・・ まずは下記でやってもまだダメです、($in{'pre'} > "0")が未選択時がダメです(T_T) 色々やってみたのですが、何か良い方法ありませんか? #### ($in{'pre'} > "0")は、"1"以上が「真」の条件です。 if ((($in{'nam'} eq "") || ($in{'tel'} eq "") || ($in{'add'} eq "")) && ($in{'pre'} > "0")) { &error("エラー"); }

    • ベストアンサー
    • Perl
  •  IF文 教えて下さい。

    例 if (($in{'pre'} ne "0") && ($in{'pre'} ne "-1")) { 不要なoptin valueを 0と-1。必要が1-47。 value="1" から value="47" までを真にしたいのですが 例を簡単にするには [1-47] 1< とかどう書けば良いのでしょう?・・・ -------------------------------------------- if ($in{'nam'} && $in{'tel'} && ($in{'pre'} ne "0") && ($in{'pre'} ne "-1") && $in{'add'}) { 今はこんな感じでやってるのです・・・ 全部揃ったら真って感じです。条件文が毎回長くなってw(≧m≦)w

    • ベストアンサー
    • Perl
  • 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
  • if () { &error("エラー"); }

    セレクトoptionフォーム、都道府県の選択で 最上部が「選択してください」から始まります。 都道府県を選べばそのまま住所に転記されるのですが 最上部の「選択してください」のままなら 「選択してください」と転記されてしまいます・・・ if (選択してください) { &error("都道府県を選択して下さい!"); } こんな感じのエラーを作りたいのですが何か方法はありますか?

  • 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>

  • 入力内容のチェック・・・『または』の場合

    いつもお世話になっております。 お問い合わせフォームCGIで未入力のチェックを行っています。 CGIは前任者が作ったもので、引き継いだ私自身はCGI初心者です。 sub sendmail { if ($namecheck eq "1" && $in{'name'} eq "") { &error("お名前は必ずご記入ください"); } elsif ($op_value1 eq "") { &error("フリガナは必ずご記入ください"); } ・ ・ ・ ↑こんな感じです。 $op_value9~$op_value12の値(フォーム上ではチェックボックスを使用)についても入力チェックを行いたいのですが、9~12を1グループと考え、いずれかに値が入っていた場合はエラーを出さずにOKとしたいと思います。 そこで、初心者なりにネットを調べ elsif ($op_value9 eq "" || $op_value10 eq "" || $op_value11 eq "" || $op_value12 eq "") { &error("項目を一つ以上選択してください"); } &&を||にすればいいのでは・・・?という結論にいたったのですが、 ダメでした。 どうしたらいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • 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文

    入力フォームセレクトボタンで◆ラバー素材を選択した時のみ、カラーに青色をセットしたい。 以下の様に入力フォームを作成しましたが、なかなか上手く動作せずたいへん困っております。 どなたかご教授いただけますと幸いでございます。 <FORM action="postmail.cgi" method="POST"> 素材を選んでください<br> ◆ベースの素材を選んでください<br> <select name="◆ベースの素材"> <option selected>◆ラバー起毛素材</option> <option>◆ラバー素材</option> <option>◆ジャージ起毛素材</option> <option>◆ジャージ素材</option> </select> <SCRIPT Language="JavaScript"> $name = $_POST["◆ベースの素材"]; if ($name == "◆ラバー素材") { <INPUT type="text" name="カラー" size="79" value="青色"><BR> } </SCRIPT>

  • php セレクトボックス 値取得

    現在phpでフォームを作成しています。 都道府県選択のフォームがあり、データベースに都道府県のマスタが管理されています。 都道府県には北海道~沖縄まで順番にIDが振られています。 選択フォームはセレクトボックスになります。 ソースは簡単ですが <option value="<?php echo $prefid; ?>"><?php echo $prefname; ?></option> とループさせて下記の状態になります。 <select name="pref"> <option value="1">北海道</option> <option value="2">青森県</option> <option value="13">東京都</option> <option value="20">愛知県</option> <option value="47">沖縄</option> </select> とあり、選択された(例:北海道を選択)のち確認画面では1と表示されます。 これを北海道と表示させたいのですが、どのように作ったらよろしいでしょうか? sessionは使用しています。 $_SESSION['pref'] = $_REQUEST['pref']; で値受け取っています。 おわかりの方がいらっしゃいましたらご教示お願いします。

    • 締切済み
    • PHP
  • 入力フォームでのIF文

    現在、入力フォームを作っているのですが、思った動作にならず、たいへん苦慮しております。どなたか良きアドバイスいただけますと幸いでございます。 <内容> ベースの素材選択部分でで◆オリジナル素材を選択した場合のみ、次のベースカラーの選択でオリジナルしか選択できない様にしたい。 うまく動作せず困り果てています。 どなたかご教授いただけますとたいへん助かります。 どうぞ宜しくお願い致します。 ********************************************************** 以下がうまく動作しないソースです。 ********************************************************** ◆ベースの素材を選んでください<br> <select name="base_material" onChange="javascript:test();"> <option selected>◆ラバー起毛素材</option> <option>◆オリジナル素材</option> <option>◆ジャージ起毛素材</option> <option>◆ジャージ素材</option> </select><br> ベースカラー<BR> <select name="aaa"> <option selected>◆青色</option> <option>◆オリジナル</option> <option>◆赤色</option> <option>◆白色</option> </select> <SCRIPT Language="JavaScript"> function test() { if (document.getElementsByName("base_material")[0].selectedIndex == 1) { document.getElementsByName("aaa").item(0).value = "◆オリジナル"; } else { document.getElementsByName("aaa")[0].style.backgroundColor="white"; } } </SCRIPT>