• 締切済み

フォームメールの項目表示について

CGI(perl)のフォームメールを使用していますが、 レンタルサーバの仕様変更により、 perlバージョンのアップ(4から5)に伴い、 現在までは、フォーム項目のうち、記載のあった項目のみ その後の確認画面、メール送信内容に含まれていたものが、 未記入項目全て表示、送信されるようになってしまいました。 できれば、プログラム内の構文を一部修正、もしくは追加することにより、 記入のある項目のみを判断させ、確認、メール送信といった内容に 変更できないものでしょうか?他の構文の都合もあり、 可能ならば汎用的な判断項目の追加のようなソースが理想なのですが… 何卒、どなたかよろしくお願いいたします。

みんなの回答

  • golive001
  • ベストアンサー率54% (20/37)
回答No.1

下記を補足してください。 ・仕様がどう変更されたのか? ・該当プログラムのソースは?

hokuto142
質問者

補足

ご回答ありがとうございます。なにぶん超初心者のため、ソースの解析ができませんので、長文ソースのどこをカットして載せたらよいか、判りません。とりあえず適当にカットして載せさせていただきます。 このソースで、今迄は、フォーム値の入力のある項目のみ表示されておりましたが、現在は、空白の項目も全て表示されるようになってしまいました。 よろしくお願いします。 切り出したソースの場所が全然違っていたらすみません。(>_<) #!/usr/bin/perl -- ~省略~ my $nkf = '/usr/local/bin/nkf'; my $sendmail = '/usr/lib/sendmail'; ~省略~ @COMMAND_READ_CONFIG = ($nkf,'-em0'); ~省略~ $MAIL_FROM =~ s/\r?\n$//g; $MAIL_SUBJECT =~ s/\r?\n$//g; $MAIL_TO =~ s/\r?\n$//g; $COMMAND_SENDER = "| $nkf -jm0 | $sendmail -t -f$MAIL_SENDER"; ~省略~ my @show_words=(); my @data_words=(); &enname2jpname(\@show_words,\@data_words,\%IN); if (!@USER_ERROR_LIST) { if (($OPT_USE_CONFIRM != 0 && $IN{$FORMMAIL_MODE} eq "CONFORM_OK") || ($OPT_USE_CONFIRM == 0)) { &output_mail(@show_words); } } ~省略~ sub output_mail { my @words = @_; open(MAIL,$COMMAND_SENDER); print MAIL &mail_header(); if ($COMMENT_KEY && $COMMENT_VALUE) { printf MAIL $DATA_FORM, $COMMENT_KEY, $COMMENT_VALUE; } while (@words) { my $key = shift @words; my $val = shift @words; printf MAIL $DATA_FORM, $key, $val; } close(MAIL); if ($@ ne '') { push(@USER_ERROR_LIST,$ERROR_SENDMAIL1,$ERROR_SENDMAIL2); } } ~省略~ sub user_message { my $file = shift; my @rarray_list = @_; open(INPUT,"<$file") or die "$file"; open(HTMLOUT,"|-") or exec(@COMMAND_HTML_OUT); select((select(HTMLOUT),$|=1)[0]); print HTMLOUT "$CONTENT_TYPE\r\n\r\n"; TemplateBlock: { OutputTemplate: while (<INPUT>) { if (/<!--/ && /-->/) { if (/\bRoopFormat\b/i && /\bStart\b/i) { last OutputTemplate; } } print HTMLOUT $_; } my $roop_form = ''; ReadFormat: while (<INPUT>) { if (/<!--/ && /-->/) { if (/\bRoopFormat\b/i && /\bEnd\b/i) { my $rarray = shift @rarray_list; my @in = @$rarray; while (@in) { my $c1 = shift @in; my $c2 = shift @in; $c1=~ s/\&/\&/g; $c1=~ s/\"/\"/g; $c1=~ s/\</\</g; $c1=~ s/\>/\>/g; $c1=~ s/\r?\n/\<BR\>\n/g; $c2=~ s/\&/\&/g; $c2=~ s/\"/\"/g; $c2=~ s/\</\</g; $c2=~ s/\>/\>/g; $c2=~ s/\r?\n/\<BR\>\n/g; printf HTMLOUT $roop_form,$c1,$c2; } redo TemplateBlock; } } $roop_form .= $_; } } close(HTMLOUT); close(INPUT); } sub input_value_syntax_check { my($key,$val); if ($OPT_CHECK_VALUE) { while (($key,$val) = each %IN) { if ($key =~ /^OPT:(\w+):(.+)/) { my $prog_key = $1; my $form_key = $2; if (ref($PROG{$prog_key}) eq 'CODE' && &{$PROG{$prog_key}}($IN{$form_key}) != 0) { push(@USER_ERROR_LIST,$val,$MESSAGE{$prog_key}); } } } } } ~省略~ __END__

関連するQ&A

専門家に質問してみよう