こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

チェックボックス(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";

ソースは文字制限の関係で省略しています。解りにくいですが、宜しくお願いします。

投稿日時 - 2009-07-06 15:54:14

QNo.5103132

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

省略されたソース中に CGIパラメーターを変数($form0 ~ $form3) に格納する処理があるんですね? そこが問題です。

まず、あなた自身がCGIパラメーターの取扱を出現順序をもとに考えるのをやめましょう。 パラメーター名をもとに考えるのが普通です。


use CGI;
my $q = new CGI;
$form01 = $q->param("01");
$formCk = $q->param("checkbox");
$form02 = $q->param("02");
$form03 = $q->param("03");
foreach($form01,$formCk,$form02,$form03) {
defined($_) or $_ = '';
}

投稿日時 - 2009-07-06 17:22:48

補足

ご返答有難うございます。
パラメーター処理はこうなっています。

##############################################

&method;

if (@preta eq "" || $f_mod eq "") { &errorhtml($no = 0); }
foreach $umail (@useremail) {
$umail =~ s/ //g;
$umail =~ s/ //g;
#if ($umail eq "" || $umail ne "" && $umail !~ /(.*)\@(.*)\.(.*)/) { &errorhtml($no = 2); }
}
foreach $kyou (@refs) {
if ($kyou ne "" && $ref =~ /$kyou/i) { $okcount = 1; }
}
if($okcount eq "0"){ &errorhtml($no = 1); }
if ($f_mod eq "sendk") { &sendkakunin; }
elsif ($f_mod eq "send") { &sendmail; }

###############################################

投稿日時 - 2009-07-06 17:34:01

あなたにオススメの質問