CGIでチェックボックスのエラーチェック

このQ&Aのポイント
  • CGIを使用してチェックボックスのエラーチェックを行いたいです。チェックボックスの選択がされていない場合には、「未選択があります」とメッセージボックスに表示したいです。
  • javascriptではなくCGIを使用してコードを書きたいです。
  • 具体的なコード例として、以下のように書いてみましたがうまく動作しませんでした。elsif ($q1 eq "" && $q2 eq "") { &error($error = "すべての項目に回答して下さい"); }
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

エラーログを読むとか、CGI::Carpを使うとかして、エラーの内容を確認してください。 http://perldoc.jp/docs/modules/CGI-2.89/CGI/Carp.pod おそらく elsif ($q1 eq "" || $q2 eq "") { &error($error = "すべての項目に回答して下さい"); } のelsifが成立して、「&error($error = "すべての項目に回答して下さい");」を実行する際になんらかのエラーが発生したと思われます。

masunona
質問者

お礼

ありがとうございます!エラーの確認やってみます!

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

これだと、 「$q1が"" であり、 $q2も"" である」場合にメッセージが表示されます。 andとorを間違えてないですか?

masunona
質問者

お礼

ありがとうございます! &&を||に修正してみましたが Internal Server Error となってしまい動作しませんでした・・・。 引き続きよろしくお願いいたします!

関連するQ&A

  • CGIでラジオボタンの選択結果を保持する

    http://okwave.jp/qa/q8211303.html 上記質問の続きです。 Q1,Q2,Q3・・・と質問をいくつか用意し、 それぞれで選択したラジオボタンによって、最終ページに表示させる回答を変えたいです。 ひとつ前のページで選択したものを次ページに反映させることはなんとかできたのですが 何ページも前に選択した回答を、最終ページに反映させる方法がわかりません。 <input type="hidden"を使うところまでは教えていただいたのですが 具体的にどうしていいかわかりません。 参考サイト等ありましたら教えていただけますでしょうか。 よろしくお願いいたします! ちなみに作成方法は以下のような感じです。 【Q1】 <form name="q1" action="com.cgi" method="POST"> <input type="hidden" name="stage" value="q1" /> <ol> <li><input type="radio" name="q11" value="q11_a"> 犬がすき</li> <li><input type="radio" name="q11" value="q11_b"> 猫がすき</li> <li><input type="radio" name="q11" value="q11_c"> うさぎがすき</li> </ol> <ol> <li><input type="radio" name="q12" value="q12_a"> 右利き</li> <li><input type="radio" name="q12" value="q12_b"> 左利き</li> </ol> <input type="submit" value="次へ" /> 【Q2】 <form name="q2" action="com.cgi" method="POST"> <input type="hidden" name="stage" value="q2" /> <ol> <li><input type="radio" name="q21" value="q21_a"> 海がすき</li> <li><input type="radio" name="q21" value="q21_b"> 山がすき</li> <li><input type="radio" name="q21" value="q21_c"> 散歩がすき</li> </ol> <input type="submit" value="次へ" /> 【Q3】 <form name="q3" action="com.cgi" method="POST"> <input type="hidden" name="stage" value="q3" /> <ol> <li><input type="radio" name="q31" value="q31_a"> 男性</li> <li><input type="radio" name="q31" value="q31_b"> 女性</li> </ol> <ol> <li><input type="radio" name="q32" value="q32_a"> 既婚</li> <li><input type="radio" name="q32" value="q32_b"> 未婚</li> </ol> <input type="submit" value="判定" /> 【最終ページ】 「あなたは犬がすきで右利きですね」 「あなたは海がすきですね」 「あなたは女性で既婚ですね」 と表示させたいです。 実際には、Q1→Q2→Q3と順番にページが飛ぶのではなく、 この答えだったら次はこのページ、それ以外は別のページ、 といった感じで、様々なページに飛びます。 以下のような感じで条件分岐を書いています。 if ($stage eq "q1") { if ($q11 eq "q11_a") { Q2(); } elsif ($q11 eq "q11_c") { ・・・; } elsif ($q12 eq "q12_b") { Q3(); } else { ・・・; } } よろしくお願いいたします!

    • ベストアンサー
    • CGI
  • チェックボックス(CGI)のズレをなくすにはどうすればよいでしょうか?

    現在メールフォームを勉強中です。チェックボックスの項目を1つだけ設定していますが、チェックを外せば下の項目が上に一段ズレて送信されてきます。 チェックが外されていてもその項目だけ“空白”もしくは“チェックなし”とかに出来ますでしょうか?お手数ですが、ご教授ください。 【html側】 <form method="POST" action="mail.cgi"> <input type="text" name="01"> <input name="checkbox" type="checkbox" value="on"> <input type="text" name="02"> <input type="text" name="03"> <input type="submit" value="確認画面"> </form> 【cgi側】 $form0 = "01"; $form1 = "チェック"; $form2 = "02"; $form2 = "03"; if($form0 eq ""){ $form_input0 = ""; } else { $form_input0 = "<p class=\"text\">$form0 = $VALUE_DATE[0]</p>";} if($form1 eq ""){ $form_input1 = ""; } else { $form_input1 = "<p class=\"text\">$form1 = $VALUE_DATE[1]</p>";} if($form2 eq ""){ $form_input2 = ""; } else { $form_input2 = "<p class=\"text\">$form2 = $VALUE_DATE[2]</p>";} if($form3 eq ""){ $form_input3 = ""; } else { $form_input3 = "<p class=\"text\">$form3 = $VALUE_DATE[3]</p>";} <FORM method="post" action="mail.cgi"> <INPUT type="hidden" name="$form0" value="$VALUE_DATE[0]"> <INPUT type="hidden" name="$form1" value="$VALUE_DATE[1]"> <INPUT type="hidden" name="$form2" value="$VALUE_DATE[2]"> <INPUT type="hidden" name="$form3" value="$VALUE_DATE[3]"> <INPUT type="submit" value="この内容で送信する"></FORM> $mbody .= "\n"; $mbody .= "フォームより以下の内容が送信されました。\n"; $mbody .= "\n"; $mbody .= "=============================================================\n"; $mbody .= "\n"; $mbody .= "・$form0:$VALUE_DATE[0]\n"; $mbody .= "\n"; $mbody .= "・$form1:$VALUE_DATE[1]\n"; $mbody .= "\n"; $mbody .= "・$form2:$VALUE_DATE[2]\n"; $mbody .= "\n"; $mbody .= "・$form3:$VALUE_DATE[3]\n"; $mbody .= "=============================================================\n"; $mbody .= "\n"; ソースは文字制限の関係で省略しています。解りにくいですが、宜しくお願いします。

    • 締切済み
    • CGI
  • CGIでチェックボックスを使う方法

    チェックボックスをCGI(C言語)で使用する方法を教えて下さい。 例えば、HTMLで <input type="checkbox" name="Check1" value="Sel11" /> チェック1 選択1<br /> <input type="checkbox" name="Check1" value="Sel12" /> チェック1 選択2<br /> <input type="checkbox" name="Check1" value="Sel13" /> チェック1 選択3 <hr /> <input type="checkbox" name="Check2" value="Sel21" checked /> チェック2 選択1<br /> <input type="checkbox" name="Check2" value="Sel22" /> チェック2 選択2<br /> <input type="checkbox" name="Check2" value="Sel23" checked /> チェック2 選択3 というプログラムはCGI(C言語)ではどの様に記述すれば良いでしょうか?

    • ベストアンサー
    • CGI
  • 複数あるチェックボックスの入力チェックするには?

    チェックボックスの入力チェックスクリプトを探しており、下記のようなスクリプトをネット検索で見つけました。 <!-- <script type="text/javascript"> function chNull(msg,obj) { if(!obj) return true; if((obj.type || obj[0].type) == 'checkbox'){ var flag = 0; if(obj.length){ for(var i=0; i<obj.length; i++) { if(obj[i].checked) flag = 1; } } else { if(obj.checked) flag = 1; } if(flag == 0) { alert(msg + 'を選択してください。'); return false; } } return true; } --> </script> <form method="POST" action="■.cgi" onSubmit="return chNull('チェックボックス',a);"> <input type="checkbox" name="a" value="A1" />A1 <input type="checkbox" name="a" value="A2" />A2 </form> 同じnameのチェックボックス群がひとつしかないときはこれで問題ないのですが、 下記のようにnameが複数ある場合にはこのスクリプトのどの部分を変えればよいのでしょうか? <input type="checkbox" name="a" value="A1" />A1 <input type="checkbox" name="a" value="A2" />A2 <input type="checkbox" name="b" value="B1" />B1 <input type="checkbox" name="b" value="B2" />B2 <input type="checkbox" name="c" value="C1" />C1 <input type="checkbox" name="c" value="C2" />C2 できればこのスクリプトをベースとして使用したいと思っています。どなたかお分かりの方がいらっしゃいましたらお教え下さいませ。 よろしくお願い致します。

  • 最も多くチェックされた項目を調べる

    javascriptで最も多くチェックされた項目を調べて それぞれのページに分岐するようにしたいです。 以下はサンプル <form onSubmit="return color(this)"> 好きな動物は? <label><input type="radio" name="q1" value="A">うさぎ</label> <label><input type="radio" name="q1" value="B">カメ</label> <label><input type="radio" name="q1" value="C">イルカ</label> <label><input type="radio" name="q1" value="D">くま</label> 好きな場所は? <label><input type="radio" name="q2" value="A">空</label> <label><input type="radio" name="q2" value="B">森</label> <label><input type="radio" name="q2" value="C">海</label> <label><input type="radio" name="q2" value="D">畑</label> 好きな食べ物は? <label><input type="radio" name="q3" value="A">豆腐</label> <label><input type="radio" name="q3" value="B">ブロッコリー</label> <label><input type="radio" name="q3" value="B">なす</label> <label><input type="radio" name="q3" value="D">ハンバーグ</label> <input value="診断"> </form> 答えは以下のようにしたいです。 Aにもっとも多くチェックされた=あなたは白が好き Bにもっとも多くチェックされた=あなたは緑が好き Cにもっとも多くチェックされた=あなたは青が好き Dにもっとも多くチェックされた=あなたは茶色が好き これはどういった計算で書けばいいのでしょうか? 本やネットを探してみましたが自分ではわかりませんでした。 初歩的な質問かもしれませんが何かヒントをくれると幸いです。

  • チェックに応じて違うチェックボックスをアクティブにしたい

    次のHTMLのように、大分類、小分類のような構成のチェックボックス グループがあります(初期設定は全部チェック無しです) 普段は[a][b][c][d]をdisableとしておき、(1) にチェックが入った 場合に[d]以外([a][b][c])アクティブ(?とにかくチェックを入れる ことができる)ようにするにはどうしたらいいでしょうか。 よろしくお願い致します。 <form id="Form1"> : <INPUT TYPE="CHECKBOX" NAME="food" value="果物">(1) 果物 <INPUT TYPE="CHECKBOX" NAME="food" value="野菜">(2) 野菜 <INPUT TYPE="CHECKBOX" NAME="food" value="肉魚">(3) 肉魚 <br> <INPUT TYPE="CHECKBOX" NAME="fruit" value="りんご">[a] りんご <INPUT TYPE="CHECKBOX" NAME="fruit" value="みかん">[b] みかん <INPUT TYPE="CHECKBOX" NAME="fruit" value="ぶどう">[c] ぶどう <INPUT TYPE="CHECKBOX" NAME="fruit" value="バナナ">[d] バナナ : </form>

  • 複数のチェックボックスの値を、ひとつの変数に入れて表示したい。

    Perlで質問です。 下記のようなフォームで、A~Fまでのチェックボックスを選んで「test.cgi」にデータを送ります。 <HTML> <BODY> <FORM action="test.cgi"> <input name="q6_1" type="checkbox" value="A">A<br> <input name="q6_2" type="checkbox" value="B">B<br> <input name="q6_3" type="checkbox" value="C">C<br> <input name="q6_4" type="checkbox" value="D">D<br> <input name="q6_5" type="checkbox" value="E">E<br> <input name="q6_6" type="checkbox" value="F">F<br> <input name="q6_7" type="checkbox" value="G">G<br> <INPUT type="submit"> </FORM> </BODY> </HTML> 次の画面で、選ばれた物の確認画面を変数「$work6」を呼び出して表示したいと思っています。 <HTML> <BODY> A / B / C / D / E / F </BODY> </HTML> この処理をperlを使ってやりたいのですが、どうやったらいいのかわかりません。 for を使って「q6_1~7」を呼び出し、それぞれの最後に「 / 」を追加したあとファイルハンドルを使って、変数「$work6」に追加上書きして表示、と言うことをすれば良いのだろうと、下記のソースを書いて見ましたが、うまくいきませんでした。 (たぶん間違いだらけだと思いますが…。) open(IN, ">>$work6"); for ($q6 = 1; $q6 < 7; $q6++){ if ($FORM{'q6_$q6'} ne '') { print IN "$FORM{'q6_$q6'}." / ""; } } close(IN); つたない質問だと思いますが、 よろしくお願いします。

    • ベストアンサー
    • Perl
  • ラジオボタンの内容を受けてCGIでコメント表示

    あるhtmlページにラジオボタンを設置しています。 このボタンを選択したらこのページ、このボタンの場合はこのページ、 と、CGIを使って、選択したボタンによってさまざまなページにジャンプさせています。 最後に、判定結果を掲載するページとして、 インラインフレームを設置し、そのなかにcgiを読み込ませて 選択したラジオボタンによってそのなかに表示させるコメントを変えたいです。 Q1でaを選んだ場合はこのコメント、 Q2でbを選んだ場合はこのコメント、 と、拾ってくる質問が記載されているhtmlページが複数にわたります。 以下でいう、test2.cgiは、どのように記述したらいいでしょうか? サンプルコードなど掲載されているサイトがあったら教えてください。 <ラジオボタンが設置してあるhtmlページ> <form name="q1" action="test1.cgi" method="POST"> 質問 <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 <input type="submit" value="判定" /> <コメントを表示させるhtmlページ> 判定結果をお知らせします <div id="frame"> <iframe src="test2.cgi" title="判定結果"> </iframe>

    • ベストアンサー
    • CGI
  • チェックボックスの複数選択の値をCGIで取得する方法

    お世話になります。 表記の通りチェックボックスで複数選択するHTMLを次のように作成しました。 ======== 送信元HTML ========= <FORM action='******.cgi' method='POST'> <INPUT type='checkbox' name='Q6_ans' value='1'> <INPUT type='checkbox' name='Q6_ans' value='2'> <INPUT type='checkbox' name='Q6_ans' value='3'> <INPUT type='checkbox' name='Q6_ans' value='4'> <INPUT type='checkbox' name='Q6_ans' value='5'> <input type=submit value='実  行'> </FORM> これを受取るPerl-CGIのコードをこうしました。 ======== 受信するcgi ========= my @files_2 = split(/\0/,$in{'Q6_ans'}); for($i=0;$i<=4;$i++){ if($files_2[$i] ne ""){$d[6].=$files_2[$i]." , ";} } 例えばチェックボックスで2と3を選ぶと$d[6]の値は「2 , 3 ,」となるつもりだったんですが、意に反し「23 ,」となります。 配列の値を調べると$files_2[0]に「23」が代入されて、$files_2[1]から$files_2[4]は空です。つまり「split(/\0/,$in{'Q6_ans'})」での分割がされていないようなのです。 何が原因で、どこが間違いなのでしょう。チェックボックスの値は\0で区切られていると思っているのですが、間違いでしょうか?

  • チェックボックスの表示・非表示 動作

    はじめまして。 初めて掲示板を利用させていただきます。javascriptを勉強しまだ日が浅いのでご存知の方がいらっしゃれば教えてください。 今、チェックボックスを選択し選択した項目がアクティブになるようにしたいのですが、選択項目が重複すると以下のようになってしまいました。 A+AB=AB A+AB+E=ABE 個々までは問題なし。 既に全てのチェックが付いた上体で、ABCE-A=BCE となってしまい、 ABのチェックが入っていても、Aが消えてしまいます。 以下に現在のコードを張ります。 <script type='text/javascript'> <!-- function fchk2(obj, name) { var frm=obj.form; if(obj.checked==true) { /* チェックボックスが選択されている場合は、   テキストボックスを有効化(false)*/ for(var i=1; i<=3; i++){ frm.elements[name+i].disabled=false; } } else { for(var i=1; i<=3; i++){ /* 無効化する前に、入力値をクリア */ if(name=='t'){ /* テキストボックスの場合 */ frm.elements[name+i].value=''; }else{ /* チェックボックスの場合 */ frm.elements[name+i].checked=false; } /* 無効化(true) */ frm.elements[name+i].disabled=true; } } } //--> </script> <form name='form2' action='#'> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t")' checked>A<br> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t");fchk2(this,"b");' checked>AとB<br> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t");fchk2(this,"e");' checked>AとE<br> <input type='checkbox' name='chk2' value='1' onclick='fchk2(this,"c");fchk2(this,"e");' checked>CとE<br> <br> A<input type='text' name='t1' value='テキストA'><br> A<input type='text' name='t2' value='テキストB'><br> A<input type='text' name='t3' value='テキストC'><br> <br> B<input type='text' name='b1' value='テキストA'><br> B<input type='text' name='b2' value='テキストB'><br> B<input type='text' name='b3' value='テキストC'><br> <br> <input type='checkbox' name='c1' value='1'> 選択肢C<br> <input type='checkbox' name='c2' value='1'> 選択肢C<br> <input type='checkbox' name='c3' value='1'> 選択肢C<br> <br> <input type='checkbox' name='e1' value='1'> 選択肢E<br> <input type='checkbox' name='e2' value='1'> 選択肢E<br> <input type='checkbox' name='e3' value='1'> 選択肢E </form> よろしくお願いいたします。