アンケート集計フォーム、チェックボックスでのデータ取得について

このQ&Aのポイント
  • アンケート集計フォームで、チェックボックスを使用してデータを取得する方法について詳しく教えてください。
  • 質問文章の中で、テキストボックスとプルダウンを使用する場合とチェックボックスを使用する場合の違いについて教えてください。
  • チェックボックスのvalue属性がある場合の挙動についても教えてください。
回答を見る
  • ベストアンサー

アンケート集計フォーム、チェックボックスでのデータ取得

フォームから、テキストボックスと、プルダウンを使用してデータを取得するcgiに、 チェックボックスを加えようと思うのですが、うまくいきません。 どなたかご教授お願い致します。 入力が適切ならば、hiddenで書き込み 不適切ならばフォームを表示。 テキスト入力の場合 # email if ($e_email){ $t_email = "<input type=\"text\" size=\"20\""; }else{ $t_email = "$email<input type=\"hidden\""; } $t_email .= "name=\"email\" value=\"$email\">\n"; プルダウンの場合 # way if ($e_way){ $t_way = "<select size=\"1\" name=\"way\">\n"; $t_way .= "<option selected>連絡方法を選択して下さい\n"; $t_way .= "<option>E-mail\n"; $t_way .= "<option>電話\n"; $t_way .= "</select>\n"; }else{ $t_way = "$way<input type=\"hidden\" name=\"way\" value=\"$way\">\n"; チェックボックスでの分岐、value属性のある場合はどうなるのでしょうか?

  • izaq
  • お礼率43% (19/44)
  • CGI
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • rokujiro
  • ベストアンサー率53% (17/32)
回答No.3

それでは、簡単に要点となる部分のscriptを記述したいと思いますので参考にしてscriptを作成してみて下さい。 1.最初の入力form(htmlでOK!!) <html><body> <form method="POST" action="test.cgi"> <hr> お名前を入力して下さい。<br> <input type="text" name="name" size="20" value=""> メールアドレスを入力して下さい。<br> <input type="text" name="mail" size="20" value=""> <hr> <input type="submit" value="送信" name="b"></center> </form> </body></html> --------------------------------------- 2.入力有無の確認 if($in{name} eq ''){ &notinput; } if($in{mail} eq ''){ &notinput; } OK処理...... --------------------------------------- 3.error処理 sub notinput{ print<<"END" <html><body> <form method="POST" action="test.cgi"> <hr> END if($in{name} eq ''){ print <<"END"; お名前を入力して下さい。<br> <input type="text" name="name" size="20" value=""> END } else{ print <<"END"; <input type="hidden" name="name" size="20" value="$in{name}"> END } if($in{name} eq ''){ print <<"END"; メールアドレスを入力して下さい。<br> <input type="text" name="mail" size="20" value=""> END } else{ print <<"END"; <input type="hidden" name="mail" size="20" value="$in{mail}"> END } <hr> <input type="submit" value="送信" name="b"></center> </form> </body></html> END } --------------------------------------- っと、こうなります。 pulldown等もhiddenの記述は同じでvalue内に入力項目を叩き込めばOKです。 もう一つの親切な方法としてはhiddenを使用せずにtext内のvalueに入力内容を叩き込んで一応表示して入力エラーの項目に*印等を付加し入力の再要求をするって手も有ります。 例) if($in{name} eq ''){ print <<"END"; *メールアドレスを入力して下さい。<br> <input type="text" name="mail" size="20" value="$in{mail}"> END } else{ print <<"END"; メールアドレス<br> <input type="text" name="mail" size="20" value="$in{mail}"> END } 自分に有った方法を選んで親切なscriptを作りましょう。

izaq
質問者

お礼

rokujiroさん 返事がおくれてすいませんでした。 rokujiroさんのご説明大変参考になりました。 教えていただいた方法を元に 作っていこうとおもいます。 あと最後に聞きたいのですが、 上記の場合の、チェックボックスの場合だと どうなるんでしょうか? よろしければ教えていただけないでしょうか? 自分でも調べてはいるのですが、 どうもたどりつけないのです。 なんども申し訳ないですが、 お願い致します。

その他の回答 (2)

  • rokujiro
  • ベストアンサー率53% (17/32)
回答No.2

私も時間が有りませんので貴方の記述したprogramを解読していませんが要はformで入力された内容で必須項目を入力されていない場合は入力されていない必須項目のみのfieldを表示して入力を催促すると言う事ですね!! その場合のフローチャートは 全てのformを表示する。 ↓ 入力チェック*1 ↓ 入力されていない項目を表示 ↓ *1に戻る というパターンになりますよね!! ここで、入力されていない項目を表示の所で入力済みの項目をhiddenで隠すと言う事ですが簡単だと思います。

izaq
質問者

お礼

rokujiroさん 返事がおくれましてすみません。。。 コメントどうもありがとうございます。 そうなんですよ~ rokujiroさんのおっしゃるとうりのことがしたいのです! よろしかったら、scriptを教えていただけないでしょうか? よろしくお願い致します。

  • rokujiro
  • ベストアンサー率53% (17/32)
回答No.1

すこし、この質問の内容では何が聞きたいのか分かりませんのでもう少し詳しくお願いします。 まず、フォーム記述に問題が有ると思います。 テキスト入力の場合 # email if ($e_email){ $t_email = "<input type=\"text\" size=\"20\""; }else{ $t_email = "$email<input type=\"hidden\""; } ---------------------------------↓ ・上記の物は最後の>が無いですしnameの指定が有りません!! 通常は(私式にメールの記入が有るかって判断で....) if($e_mail eq ''){ print <<"END"; メールアドレスを入力してください。<br> <input type="text" name="in_mail" size="20" value="$in_mail"> END } else{ print <<"END"; <input type="hidden" name="in_mail" value="$in_mail"> END } --------------------------------------↑ $t_email .= "name=\"email\" value=\"$email\">\n"; --------------------------------------↓ この最後の一行も意味不明です。 この最後の一行で今までのif分の作業が意味無しになると思います。 --------------------------------------↑ プルダウンの場合 # way if ($e_way){ $t_way = "<select size=\"1\" name=\"way\">\n"; $t_way .= "<option selected>連絡方法を選択して下さい\n"; $t_way .= "<option>E-mail\n"; $t_way .= "<option>電話\n"; $t_way .= "</select>\n"; }else{ $t_way = "$way<input type=\"hidden\" name=\"way\" value=\"$way\">\n"; --------------------------------------↓ またまた私的に if ($e_way eq ''){ print <<"END"; 連絡方法を選択してください。<br> <select name="way" size="1"> <option selected value="e-mail">e-mail</option> <option value="tel">電話</option> </select> END } else{ pritnt <<"END"; <input type="hidden" name="way" value="$e_way"> END } --------------------------------------↑ 簡単にですが以上の様になると思います。 以上の点を踏まえて質問宜しくお願いします。

izaq
質問者

補足

rokujiroさん 回答ありがとうございます。 たしかに、説明不足でした。すみません。 フォームメールで、ログを蓄積するのと、 空白の場合、再度フォームを表示させ入力をうながすのですが、 今回追加しようとしている、チェックボックスの部分は必須項目ではないので、単に入力されたものだけを、 hidden属性にして、送ろうととおもうのですがうまくいかないのです。 素人考えで、sub fixTagsの部分に問題があるのかとおもったりもするのですが、、、 ご教授お願いします。 form.html部分 <form method="POST" action="http://www.777.co.jp/cgi-bin/form.cgi"> <INPUT TYPE="checkbox" name="low" value="low"> formaleart.html部分 <form method="POST" action="http://www.777.co.jp/cgi-bin/form.cgi"> <CGI:low> form.cgi部分 use strict; use CGI; require 'jcode.pl'; ------------- 省略 ------------- my $template = '../htdocs/0/alertform.html'; my @html = (); my $location = 'http://www.777.co.jp/0/formthanks.html'; my $query = new CGI; my $low = $query->param('low'); my $errNum = 0; my $errMsg = ''; my $e_low = 0; my $t_low = ''; $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()){ print "Location: $location\n\n"; } replaceTags(); showHTML(); exit; sub fixTags { # low else{ $t_ low = "$ low<input type=\"hidden\" name=\" low\" value=\"$ low\">\n"; } return 1; } sub replaceTags { foreach (@html){ s/<CGI:low>/$t_low/i; if ($errNum > 0){ s/<CGI:submit>/<input type="submit" value="送信">/i; }else{ s/<CGI:submit>//i; } } return 1; } sub showHTML { print $query->header; foreach (@html){ print; } } sub sendmail { my $line = "X-Mailer: U got Mail\n"; $line .= "ロウ\t$low\n"; $line = jcode::jis($line); open MAIL,'>mail.txt' or err('mail.txtが開けません。'); open MAIL,"| $sendmail -t" or err("$sendmailが開けません。"); print MAIL $line; close MAIL; return 1; } 以下省略

関連するQ&A

  • セレクトボックスとチェックボックスを使った絞込み検索

    Yomi-Searchについての質問なのですがタイトルの通りの質問でチェックボックスを使った絞り込み検索では 01_03 04_01 と検索結果に表示されるのですがセレクトボックスとチェックボックスを組み合わせて絞り込み検索をしてみると 01_0304_01 とこのようにカテゴリとカテゴリの間にスペースが入らず絞り込み検索が出来ません‥ タグはこのように書きました。 <FORM action="http://www..." method="get" target="" name="form1"> <INPUT type="hidden" name="mode" value="search"> <INPUT type="hidden" name="page" value="1"> <INPUT type="hidden" name="sort" value="mark"> <INPUT type="hidden" name="engine" value="pre"> <INPUT type="hidden" name="kn" value="30"> <SELECT size="1" name="word"> <OPTION type="selected" value="">--------</OPTION> <option value="01_01" name="word1">○○○</option> <option value="01_02" name="word2">○○○</option> <option value="01_03" name="word3">○○○</option> </SELECT><BR> <BR> <INPUT type="checkbox" name="word4" value="04_01">○○○<BR> <INPUT type="checkbox" name="word5" value="04_02">○○○<BR> <INPUT type="checkbox" name="word6" value="04_03">○○○<BR> <BR> <INPUT type="submit" value=" 検 索 "> <INPUT type="reset" value="リセット"> &nbsp; </FORM> 全くの初心者ですいませんが良きアドレスなどをお願いします。

  • チェックボックスが1つ以上チェックされたかチェックしたい

    以下のフォームで、 p_cdのチェックボックスが1つ以上選択されたかチェックしたいのですが、良い方法ございますでしょうか? <form name='test'> <input type="hidden" name="p_name[]" value='xx'> <input type="checkbox" name="p_cd[]" value='1'> <input type="hidden" name="p_name[]" value='yy'> <input type="checkbox" name="p_cd[]" value='1'> </form>

  • チェックボックス(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
  • 他フォームの入力データの引継ぎ

    入力フォームを2つ用意し 第1フォームの入力欄の1部を第2フォームの入力欄のデータとして submitさせたいのですが <INPUT TYPE="radio">と<SELECT>の入力値がうまく引継げません。 下記のようなJavaスクリプトとHTMLなのですが Javaスクリプトで「value」を=にすると 「radio」のほうはundefin、 「SELECT」で複数選択した場合は、一つ目の選択肢のみしか 引継げませんでした。 Javaスクリプトでうまくいく方法がありましたら ご教示ください。 ----Javaスクリプト-------------------------------- function aaa() { document.FROM2.A.value = document.FROM1.A.value; document.FROM2.B.value = document.FROM1.B.value; document.FROM2.C.value = document.FROM1.C.value; document.FROM2.submit(); } ----HTML-------------------------------- <FORM NAME="FROM1" METHOD="POST" ACTION="***"> <SELECT NAME="A" MULTIPLE> <OPTION VALUE="aa">セレクトa <OPTION VALUE="bb">セレクトb <OPTION VALUE="cc">セレクトc <OPTION VALUE="dd">セレクトd </SELECT> <INPUT TYPE="radio" NAME="B" VALUE="" CHECKED>選択なし <INPUT TYPE="radio" NAME="B" VALUE="1" CHECKED>ラジオ1 <INPUT TYPE="radio" NAME="B" VALUE="2" CHECKED>ラジオ2 <INPUT TYPE="text" NAME="C"> <INPUT TYPE="text" NAME="D"> <INPUT TYPE="submit" NAME="OK_BTN" VALUE="OK"> </FORM> <FORM NAME="FROM2" METHOD="POST" ACTION="***"> <INPUT TYPE="hidden" NAME="A"> <INPUT TYPE="hidden" NAME="B"> <INPUT TYPE="hidden" NAME="C"> <INPUT type="button" onClick="JavaScript:aaa();" name="OK_BTN" value="OK"> </FORM>

  • チェックボックス&セレクトボックスからの検索

    htmlからチェックボックス&セレクトボックスを使って postgresで検索し、phpで表示するフォームを作っています。 チェックボックスで検索されたデータをセレクトボックスで 絞り込みたいのですがうまくいきません。 or の部分を and に変えたりしたのですが検索結果が 変わってしまいます。 どなたか教えてもらえないでしょうか。 HTML <input type="checkbox" name="chk1" value="1">chk1 <input type="checkbox" name="chk2" value="1">chk2 <select name="add">  <option value="北海道">北海道</option>  <option value="沖縄">沖縄</option> </select> PHP  if ($chk1 != "") {   $sqlSelect .= "abc = '" . $chk1 . "' or ";  }  if ($chk2 != "") {   $sqlSelect .= "abc = '" . $chk2 . "' or ";  }  if ($add != "") {   $sqlSelect .= "add = '" . $add . "' ;  }

    • ベストアンサー
    • PHP
  • フォーム内の値のチェックについて

    このようなフォーム(aspでセレクトボックスの数は可変になります。)にてSubmit時に 同じ値が選ばれていたらalertを出すJavaScriptを作りたいのですが、 どのようなものを作ればよろしいでしょうか? <FORM name="TestForm" action="" method="POST" target=""> <TABLE border="1" cellspacing="0" cellpadding="0" width="100%"> <TR> <td>1位</td> <TD> <select name="Select1"> <OPTION value="449">[選択なし]</OPTION> <OPTION value="465">あ</OPTION> <OPTION value="466">い</OPTION> <OPTION value="467">う</OPTION> </select> <td>2位</td> <TD > <select name="Select1"> <OPTION value="449">[選択なし]</OPTION> <OPTION value="465">あ</OPTION> <OPTION value="466">い</OPTION> <OPTION value="467">う</OPTION> </select> <td>3位</td> <TD> <select name="Select1"> <OPTION value="449">[選択なし]</OPTION> <OPTION value="465">あ</OPTION> <OPTION value="466">い</OPTION> <OPTION value="467">う</OPTION> </select> </TR> </TABLE> <TR><TD> <INPUT type="submit" value=登録 name=B1 onClick=""> </TD></TR> </FORM>

  • JSP→JSP フォームチェック

    困っているので助けてください。 まずプログラムの説明をさせてもらいます。 JSPからfromをつかってJSPにフォーム情報を送ります。 プログラムはこんな感じです。 <form action="abcdefg.jsp" method="post"> <input type="hidden" name="abc" value="abc"> <input type="hidden" name="def" value="def"> <input type="checkbox" name="aa" value="aa"> <input type="checkbox" name="bb" value="bb"> <input type="checkbox" name="cc" value="cc"> <input type="submit" value="次へ"> </form> これをabcdefg.jspで受け取る場合 String hidden_abc = request.getParameter("abc"); String hidden_def = request.getParameter("def"); とhiddenは必ず値が入っているのでこれで受け取れるのですが チェックボックスは選択しているかどうかわからないので上の記述では だめなようなのですがどのようなプログラムを書いたらいいのですか? 説明がうまく出来なく申し訳ないです。よろしければ教えてください。

    • ベストアンサー
    • Java
  • 一つのチェックボックスでテキストフィールドとプルダウンリストを制御

    現在以下のようなテキストフィールドとプルダウンがあります。 <form name="register" action="register_kakunin.php" method="post"> <input type="checkbox" name="name_check" onclick="fchk(this,1);" /> <input name="revenue" onChange="keisan()" type="text" id="revenue" size="6" readOnly="true"/> <input type="checkbox" name="chk" onclick="fchk2(this)" /> <select name="paymethod" disabled="disabled"> <option value="">Pay Method</option> <option value="cash">cash</option> <option value="card">card</option> <option value="point">point</option> <option value="coupon">coupon</option> </select> </form> これを function fchk(obj, name_check){ var frm=document.register; if(!obj.checked){ /* チェックされたら、テキストボックスを有効化 */ frm.revenue.readOnly=true; }else{ /* チェックが外されたら、テキストボックスを無効化 */ frm.revenue.readOnly=false; } } function fchk2(obj) { var frm=obj.form; var len=frm.elements.length; /* フォームの要素数 */ if(obj.checked==true){ /* チェックボックスが選択されている場合、   プルダウンを有効化(disabled=false) */ frm.elements["paymethod"].disabled=false; }else{ /* チェックボックスが選択されていない場合、   プルダウンを無効化(disabled=true) */ frm.elements["paymethod"].disabled=true; } } という2つのスクリプトで制御しているのですが、前者を操作するときには必ず後者も操作することになるため、一つのチェックボックスで2つとも制御できるようにしたいのですが、どうしたらいいのでしょうか? 上記のjavascriptはネットから拾ってきたもので、自作ではありません。 宜しくお願いします。

  • チェックボックスがundefinedと表示します

    下記のように入力すると、チェックボックスがundefinedと表示されてしまいます。 どのように変更すればよいのでしょうか? 教えてください <script type="text/javascript"> <!-- function CheckForm() { //****************送信内容の取得**************** var data = new Array(); var namesArray = new Array( 'Name', 'Sex', 'Age', 'Address' , 'Tel', 'Email'); var f = document.forms[0]; for (var i in namesArray) { var n = namesArray[i]; if (n == 'Sex') { data[n] = ''; for (var j = 0; j < f[n].length; j++) { if (f[n][j].checked) { data[n] = f[n][j].value; break; } } } else { data[n] = f[n].value; } } //****************名前のチェック**************** if (data.Name.length == 0) { alert('名前が入力されていません。'); f.Name.focus(); return false; } //***********確認ダイアログによる確認*********** return confirm('下記の内容で送信して' + 'よろしいですか?\n\n' + '選んでください:\t\t' + data.Course1 + '\n' + data.Course2 + '\n' + data.Course3 + '\n' + '名前:\t\t' + data.Name + '\n' + '性別:\t\t' + data.Sex + '\n' + '年齢:\t\t' + data.Age + '\n' + '住所:\t\t' + data.Address + '\n' + '電話番号:\t' + data.Tel + '\n' + 'E-Mailアドレス:\t' + data.Email); } //--> </script> <form action="/kantan-cgi/formmail.pl?id=*********" method="post" onSubmit="return CheckForm();"> <dl> <dt><span class="mainBp">【選んでください】</span></dt> <dd><input type="checkbox" name="Course1" value="コース1" />コース1 <input type="checkbox" name="Course2" value="コース2" />コース2 <input type="checkbox" name="Course3" value="コース3" />コース3</dd> <dt>名前(必須)</dt> <dd><input type="text" name="Name" /></dd> <dt>性別</dt> <dd> <input type="radio" name="Sex" value="男性" />男 <input type="radio" name="Sex" value="女性" />女 </dd> <dt>年齢</dt> <dd><input type="text" name="Age" size="2" /></dd> <dt>住所</dt> <dd><input type="text" name="Address" size="70" /></dd> <dt>電話番号</dt> <dd><input type="text" name="Tel" /></dd> <dt>E-Mailアドレス</dt> <dd><input type="text" name="Email" size="50" /></dd> </dl> <input type="submit" value="送信" /> </form>

  • 読み込む外部スクリプトをセレクトボックスを使って選べないでしょうか?

    お世話になります。 フォーム内に配置した、1から5までの数字を選べるセレクトボックスを使って、そのフォーム内に読み込む.jsファイルを選択することは出来ないでしょうか? 外部ファイルには、UsualSet.js、EmergencySet.js、PauseSet.jsなどがあって、そのスクリプトファイルの中身は document.write("<input name=\"youbi\" type=\"hidden\" value=\"土曜\"><input name=\"codenumber\" type=\"hidden\" value=\"732\"><input name=\"busho\" type=\"hidden\" value=\"経理\">"); とかいった感じになっています。 つまり、セレクトボックスで何番を選ぶかによって、CGIに渡す値を$youbiと$codenumberと$bushoとの3つ全ていっぺんに変更出来るようにしたい訳です。 しかし、そのセレクトボックスにどういう仕掛けをしたら良いかわからなくて困っています。 まさか、 <FORM ACTION="pro.cgi" METHOD="POST">  <select name="kazu">   <option value="<script language="javascript" src="UsualSet.js>" selected>1</option>   <option value="<script language="javascript" src="EmergencySet.js>" >2</option>   <option value="<script language="javascript" src="PauseSet.js>" >3</option>   <option value="<script language="javascript" src="MorningSet.js>" >4</option>   <option value="<script language="javascript" src="FulleSet.js>" >5</option>  </select>   <input type="hidden" name="kaijou" value="22890">  <input type="hidden" name="boxnumber" value="62">  <input type="submit" name="Submit" value="送信"> </FORM> なんてわけに行かないですもんね。 どうしたらいいかおわかりの方がいらっしゃいましたら、どうかよろしくお願い致します。

専門家に質問してみよう