OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.226192
  • 閲覧数304
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 43% (19/44)

フォームから、テキストボックスと、プルダウンを使用してデータを取得する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属性のある場合はどうなるのでしょうか?
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル8

ベストアンサー率 53% (17/32)

それでは、簡単に要点となる部分の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

お礼率 43% (19/44)

rokujiroさん

返事がおくれてすいませんでした。
rokujiroさんのご説明大変参考になりました。
教えていただいた方法を元に
作っていこうとおもいます。

あと最後に聞きたいのですが、
上記の場合の、チェックボックスの場合だと
どうなるんでしょうか?
よろしければ教えていただけないでしょうか?
自分でも調べてはいるのですが、
どうもたどりつけないのです。

なんども申し訳ないですが、
お願い致します。
投稿日時 - 2002-03-26 13:07:45
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル8

ベストアンサー率 53% (17/32)

すこし、この質問の内容では何が聞きたいのか分かりませんのでもう少し詳しくお願いします。 まず、フォーム記述に問題が有ると思います。 テキスト入力の場合 # email if ($e_email){ $t_email = "<input type=\"text\" size=\"20\""; }else{ ...続きを読む
すこし、この質問の内容では何が聞きたいのか分かりませんのでもう少し詳しくお願いします。

まず、フォーム記述に問題が有ると思います。


テキスト入力の場合
# 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

お礼率 43% (19/44)

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;
}
以下省略
投稿日時 - 2002-02-27 22:03:16


  • 回答No.2
レベル8

ベストアンサー率 53% (17/32)

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

その場合のフローチャートは

全てのformを表示する。

入力チェック*1

入力されていない項目を表示

*1に戻る
というパターンになりますよね!!

ここで、入力されていない項目を表示の所で入力済みの項目をhiddenで隠すと言う事ですが簡単だと思います。

お礼コメント
izaq

お礼率 43% (19/44)

rokujiroさん

返事がおくれましてすみません。。。
コメントどうもありがとうございます。

そうなんですよ~
rokujiroさんのおっしゃるとうりのことがしたいのです!

よろしかったら、scriptを教えていただけないでしょうか?
よろしくお願い致します。
投稿日時 - 2002-03-14 17:24:13
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ