• ベストアンサー

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

いつもお世話になっております。 お問い合わせフォーム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
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • TA-HT81S
  • ベストアンサー率39% (72/184)
回答No.1

$err_flg = 0; if($op_value9 ne ""){ $err_flg++; } : if($op_value12 ne ""){ $err_flg++; } if($err_flg > 0){ &error("項目を一つ以上選択してください"); } ってこと?

CHI-512
質問者

お礼

ご回答ありがとうございました。 ご記入いただいたソースを当てはめてみました。 無事、解決です。 とても助かりました。 また、今までは私が記入したようなエラーメッセージの出し方しか知りませんでしたが、ご記入いただいたソースをじっくり観察し、0を1や2に変えたり、>を<に変えたり、neをepにしたりすることでフォームの入力内容チェックに関して、色々なパターンでエラーメッセージを出すことが出来るようになりました。 一歩前進しました。 本当にありがとうございました。

その他の回答 (1)

  • maura
  • ベストアンサー率46% (48/104)
回答No.2

$op_value11 eq "" だと $op_value11 に 値が入っていない場合なので $op_value11 に値が入っている場合は $op_value11 ne "" と書きます。 eq -> ne に変更しましょう。

CHI-512
質問者

お礼

ご回答ありがとうございました。 私が思っていた箇所とは異なる箇所に原因があるとは思いませんでした…。 無事、問題が解決いたしました。 CGIは奥が深い上に難しいですね。 是非勉強したいと思っている分野ですが、敷居が高くて中々どこから手をつけていいか分かりません。 精進いたします。 本当にありがとうございました。

関連するQ&A

  • 未入力のチェックをするには?

    「とほほのwww入門」さんのwwwmailというメールフォームcgiを使わせてもらっています。 このメールフォームに未入力のチェックをさせたいのですが、どうしてもうまくいきません。 例えば「名前」を入力必須項目にしたいので、未入力だった場合、エラーを表示させたいのです。 他のサイトなどを参考に、 #名前がないときの処理 if ($FORM{'NAME'} eq "") { &err('名前が記入されていません。'); } と入れてみたりしたのですが、Internal Server Error がでてしまいます。 また、現在配布されているものと違ったりするようです。 CGIに関してはあまり詳しくなく、本当に簡単な改造をしたことがある程度です。どなたかご存知の方がいらっしゃいましたらぜひ宜しくお願いいたします!

    • ベストアンサー
    • CGI
  • チェックボックスの入力チェック

    フォームメール用のCGIを作成しているのですが、チェックボックスの入力チェックをCGIでおこないたい場合、どのようにすればよいのでしょうか? 複数選択可で1つも選択されていない場合エラーメッセージを出すようにしたいと思っており、チェックボックスには1個づつ個別の変数を用意しています。 if ($name eq "") { print "Content-type: text/html;charset=euc-jp\n\n"; print "お名前を入力してください。"; exit(0); } テキストボックスはこのように入力チェックをおこなっています。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • フォームの入力チェック

    こんにちは、今回はホームページのワザについて教えて下さい~。 今フォームを作成してアンケートを回答してもらうページを作成中なのですが、そこで躓いてしまいました。 CGIでフォームを作成しているのですが、そのフォームの中の回答で必須項目を作りたいのです。回答していないで送信ボタンを押すとダイヤログが出て「××をご記入ください」のようなメッセージを出す・・・こんなのが理想なのです。 今普通にCGIでフォームだけは完了したのですが、そのチェック機能をjavaでつけても動いてくれないのです(泣)。全くjavaが働かず、普通に送信されてしまいます。 CGIを外してjavaだけでやろうとするとアドレスを予め設定していないという事でエラーになりますし・・・。今は <SCRIPT language="JavaScript"> <!-- function Check(){ if(document.myform.ks.value==""){ alert("必須項目を記入してください。"); return false; } ・ ・ ・ // --> </SCRIPT> </HEAD> <BODY><!--××× CGI Program--> <FORM action=http://www.CGIのテキストまでのパス.txt method=post onSubmit="return Check()"><INPUT type=hidden value=××@×× name=sendto><INPUT type=hidden value=/mail/××.htm name=success><!--ここまで--><A name=TOP></A> としてあります・・・。 すみません!どなたかわかる方!ぜひ教えて下さい、お願いいたします!

    • ベストアンサー
    • HTML
  • elsif フォーム内のカーソルを右端に

    初心者です。よろしく、お願いいたします。 フォームに入力された値を $value として、 正解 hello が フォームへ 入力されたら 「正解です」 と 表示するようにしました。 my $ans = "hello"; #省略 if($value eq $ans){ print "正解です"; そして、herro と 入力されたら、「heまでOK」 と 表示するようにしました。 elsif ($value =~ /^he/){ print ('he までOK'); } このとき、herro と入力して、Enter すると フォームのカーソル(ピコピコ動くところ)が、フォームの一番左へ行ってしまいます。 これを避けて、カーソルが、フォームの右端に行くようにしたいのですが、無理でしょうか? 次の入力を容易にしたいのです。 お教えください。よろしく、お願いいたします。

    • ベストアンサー
    • Perl
  • 入力フォームをCGIでエラーチェック→PHPにデータを送る

    CGIでフォームの入力をチェックした後、データをphp に送ろうと思います。 今まで使用してた、エラーチェックした後、データを、管理者にメールでデータを送信させるCGIをカスタマイズして、エラーチェックの後に、PHPへデータを送ることは可能なのでしょうか? どなたか御教授お願いいたします。 以下はエラーチェック後の部分です。 $errNum = chkFormInput(); fixTags(); open HTML, $template or err("$templateが開けません"); @html = <HTML>; close HTML; if ($errNum > 0){ # エラーメッセージの先頭のカンマをはずす $errMsg =~ s/^,//; $errMsg = "<font color=\"red\">$errMsg (計$errNumヶ所)"; $errMsg .= "に未入力、又は不適当な入力があります。<br></font>\n"; }elsif (sendmail() && stockData()){ $errMsg = "ありがとうございました。以下の内容で$adminName($adminMail)に送信しました。"; } replaceTags(); showHTML(); exit();

    • 締切済み
    • CGI
  • cgi の入力チェック

    ***** HTML ***** <TD> <INPUT type="radio" name="ABC_*" value="登録する">登録する  <INPUT type="radio" name="ABC_*" value="登録しない">登録しない </TD> ***** CGI ***** $family = "ABC"; if($name eq "$family"){ $family=$value; } 現在、上記のような記述で作っているのですが、 チェックを入れても、入れなくても、「入力エラー」 になりません。 他の項目については、OKなんですが。。。 どのように、入力チェックをすればいいのですか? **ちなみに、OKな項目の記述です。** ***** HTML ***** <TD>登録カテゴリー:</TD> <TD> <select name="カテゴリー_*"> <option value="" selected>選  択 <option value="自動車関連">自動車関連 <option value="お役立ちサイト">お役立ちサイト <option value="HP作成支援">HP作成支援 <option value="お店のHP">お店のHP <option value="個人のHP">個人のHP <option value="その他">その他 </select></TD> ***** CGI ***** $catego = "カテゴリー"; if($name eq "$catego"){ $catego=$value; }

    • ベストアンサー
    • CGI
  • フォームメールの入力チェック

    HTML側にJavaScriptでチェックを行うのではなく、 nameの値の前にアンダーバーを付けて、cgi側で入力チェックをいたいと思っています。 <input type="text" name="_email">としておけば、 メールアドレスが入力されていなければエラーになります。 これをselect の場合<select name="_time">としてもチェックがかからないのは何故でしょうか? もちろん、option value のdefaultはblankにしてあります。ここで、いづれかのoption value を選ばないと 入力チェックがかかるようにしたいのです。 初歩的な質問で申し訳ありませんが、よろしくお願い致します。

    • ベストアンサー
    • HTML
  • PERL sendmailセキュリティ対策について

    cgiを直接呼び出して、メールを送信されてしまうエラーについて質問させてください。 以下のように、sendmailを利用するサブルーチンを呼び出しています。 if ($query->param('confirm')) { #←初期値は""で一番下のelseに飛ぶ # input data check my @err_lst = (); #←入力チェックしてエラーメッセージを蓄積 if (&InputCheck($query, \@err_lst)) {#←入力内容をチェック # ok &NextPage($query); #←確認画面を表示 } else { # error &SamePage($query); #入力内容にエラーがある場合、入力画面に戻す } } elsif ($query->param('send') eq "送信") { # send mail & make log &SendMail($query); #メール送信用サブルーチン } else { # make init form &InitPage($query); #CGI起動直後はこのサブルーチンから入力フォームを表示 } この書き方ですと、 <input type="hidden" name="confirm" value=""> <input type="hidden" name="send" value="送信"> で、直接「&SendMail($query);」が起動してメール送信されてしまいます。 メール本文やアドレスの文字エスケープ処理は動いているのですが、 sendmailを呼び出す前には、必ず入力内容をチェックするサブルーチンを通る事を 強制する方法はないでしょうか。 当方、この修正の為にこの2週間突貫でPERLを独学している素人の為、 上記事例について読んでおくべき参考書などがあれば、お教えいただけますと とてもとても助かります。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 何れかが入力されていれば全て入力

    お世話になっております。 http://odn.okwave.jp/kotaeru.php3?q=1948331 の質問に一部関連しているので続けてお伺いしておけばよかったのですが、 締め切ってしまいましたので申し分けありませんが新たに質問させて頂きました。 cgi/perlを使用したメールフォームで製品登録を行えるものを作成中です。 一つの製品についてkounyuu_01,shouhin_01,price_01という3つの入力項目があり、 何れかの項目が入力されていれば他の項目も必須。 という条件を設けたいと思っています。上記「入力規則をまとめて定義」(リンク)の質問でがるさんにアドバイスいただいた記述を少し変えればできるかなと思い試したのですが力及ばずでした。 置き換えなどが良くわからないので直に以下のようにも書いてみたのですが、全て入力してもエラーが返ってきてしまいます。 if(($form{kounyuu_01} eq "") && ($form{shouhin} eq "") && ($form{price_01} eq "")){ &error('機器#2の情報を入力してください'); }elsif(($form{kounyuu_01} eq "") | ($form{shouhin} eq "") | ($form{price_01} eq "")){ &error('機器#2の何れかの情報が未入力です'); } また、 「入力規則をまとめて定義」(リンク) でEtherskyさんに(共通項目_数字)の場合まとめて定義する方法をご教授頂いたので、 応用して上記を「(xxxx_01)だった場合」 のように今度は01をキーにまとめて定義できたらと思うのですがこちらもさっぱりです。。 どうぞアドバイスのほどよろしくお願いいたします。m(__)m

    • ベストアンサー
    • CGI
  • CGIでチェックボックスのエラーチェック

    下記のような感じで チェックボックスをいくつか配置し、CGIで動かしています。 それぞれの質問に関して未選択がある場合、 メッセージボックスで「未選択があります」と表示させたいです。 できればjavascriptでなくCGIでやりたいです。 どのようにコードを書けばいいですか? ためしに以下のように書いてみましたがだめでした。 ・・・ elsif ($q1 eq "" && $q2 eq "") { &error($error = "すべての項目に回答して下さい"); } ・・・ お願いいたします! <form name="q1" action="test.cgi" method="POST"> Q1 <input type="radio" name="q1" value="q1_a"> A <input type="radio" name="q1" value="q1_b"> B <input type="radio" name="q1" value="q1_c"> C Q2 <input type="radio" name="q2" value="q2_a"> D <input type="radio" name="q2" value="q2_b"> E <input type="radio" name="q2" value="q2_c"> F </form>

    • ベストアンサー
    • CGI

専門家に質問してみよう