• 締切済み

チェックボックス(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"; ソースは文字制限の関係で省略しています。解りにくいですが、宜しくお願いします。

みんなの回答

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.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 $_ = ''; }

noname#90865
質問者

補足

ご返答有難うございます。 パラメーター処理はこうなっています。 ############################################## &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; } ###############################################

関連するQ&A