- ベストアンサー
アンケート集計フォーム、チェックボックスでのデータ取得について
- アンケート集計フォームで、チェックボックスを使用してデータを取得する方法について詳しく教えてください。
- 質問文章の中で、テキストボックスとプルダウンを使用する場合とチェックボックスを使用する場合の違いについて教えてください。
- チェックボックスのvalue属性がある場合の挙動についても教えてください。
- みんなの回答 (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 ''){ ¬input; } if($in{mail} eq ''){ ¬input; } 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を作りましょう。
その他の回答 (2)
- rokujiro
- ベストアンサー率53% (17/32)
私も時間が有りませんので貴方の記述したprogramを解読していませんが要はformで入力された内容で必須項目を入力されていない場合は入力されていない必須項目のみのfieldを表示して入力を催促すると言う事ですね!! その場合のフローチャートは 全てのformを表示する。 ↓ 入力チェック*1 ↓ 入力されていない項目を表示 ↓ *1に戻る というパターンになりますよね!! ここで、入力されていない項目を表示の所で入力済みの項目をhiddenで隠すと言う事ですが簡単だと思います。
お礼
rokujiroさん 返事がおくれましてすみません。。。 コメントどうもありがとうございます。 そうなんですよ~ rokujiroさんのおっしゃるとうりのことがしたいのです! よろしかったら、scriptを教えていただけないでしょうか? よろしくお願い致します。
- rokujiro
- ベストアンサー率53% (17/32)
すこし、この質問の内容では何が聞きたいのか分かりませんのでもう少し詳しくお願いします。 まず、フォーム記述に問題が有ると思います。 テキスト入力の場合 # 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 } --------------------------------------↑ 簡単にですが以上の様になると思います。 以上の点を踏まえて質問宜しくお願いします。
補足
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; } 以下省略
お礼
rokujiroさん 返事がおくれてすいませんでした。 rokujiroさんのご説明大変参考になりました。 教えていただいた方法を元に 作っていこうとおもいます。 あと最後に聞きたいのですが、 上記の場合の、チェックボックスの場合だと どうなるんでしょうか? よろしければ教えていただけないでしょうか? 自分でも調べてはいるのですが、 どうもたどりつけないのです。 なんども申し訳ないですが、 お願い致します。