-1

おそらく私の意見ではすべてです!

基本的に自分が何をしているのかわかりません。これまで .cgi ファイルを作成したことはありませんが、いくつかのチュートリアルに基づいてスクリプトを作成しました...そのうちの 1 つがこれです... http://www.yourhtmlsource.com/cgi/processingforms.html

HTMLフォームを処理し、ユーザーのデータを収集し、ユーザーがSUBMITを押したときにThank you.htmlファイルを返信してメールに送信するPerlスクリプトが必要です。

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);

if ($ENV{'REQUEST_METHOD'} eq 'POST') {

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$name} = $value;

}

if( $FORM{magazine} ){
    $magazine_flag ="ON";
}else{
    $magazine_flag ="OFF";
}

if( $FORM{internet} ){
    $internet_flag ="ON";
}else{
    $internet_flag ="OFF";
}

if( $FORM{distributor} ){
    $distributor_flag ="ON";
}else{
    $distributor_flag ="OFF";
}

if( $FORM{yes1} ){
    $yes1_flag ="ON";
}else{
    $yes1_flag ="OFF";
}

if( $FORM{no1} ){
    $no1_flag ="ON";
}else{
    $no1_flag ="OFF";
}

if( $FORM{twofifty} ){
    $twofifty_flag ="ON";
}else{
    $twofifty_flag ="OFF";
}

if( $FORM{fivehundred} ){
    $fivehundred_flag ="ON";
}else{
    $fivehundred_flag ="OFF";
}

if( $FORM{thousand} ){
    $thousand_flag ="ON";
}else{
    $thousand_flag ="OFF";

}

if( $FORM{twofivehundred} ){
    $twofivehundred_flag ="ON";
}else{
    $twofivehundred_flag ="OFF";
}

if( $FORM{fivethousand} ){
    $fivethousand_flag ="ON";
}else{
    $fivethousand_flag ="OFF";

}

if( $FORM{tenthousand} ){
    $tenthousand_flag ="ON";
}else{
    $tenthousand_flag ="OFF";
}

if( $FORM{fifteenthousand} ){
    $fifteenthousand_flag ="ON";
}else{
    $fifteenthousand_flag ="OFF";
}

if( $FORM{yes2} ){
    $yes2_flag ="ON";
}else{
    $yes2_flag ="OFF";
}

if( $FORM{no2} ){
    $no2_flag ="ON";
}else{
    $no2_flag ="OFF";
}

if( $FORM{yes3} ){
    $yes3_flag ="ON";
}else{
    $yes3_flag ="OFF";
}

if( $FORM{no3} ){
    $no3_flag ="ON";
}else{
    $no3_flag ="OFF";
}


$Magazine-name = $FORM{magazine-name};
$Name = $FORM{name};
$Title = $FORM{title};
$Job = $FORM{job};
$Company = $FORM{company};
$Address = $FORM{address};
$City = $FORM{city};
$State = $FORM{state};
$Zip = $FORM{zip};
$Telephone = $FORM{telephone};
$E-mail = $FORM{e-mail};




open (MESSAGE,"| /usr/sbin/sendmail -t");

print MESSAGE "To: aalmeida\@aemc.com\n"; 
print MESSAGE "From: " . $Name . ", reader\n";
print MESSAGE "Reply-to: " . $E-mail . "(" . $Name . ")\n";

print MESSAGE "Subject: NECA 2013 Registration to win from $Name \n\n";

print MESSAGE "$Name wrote:\n\n";
print MESSAGE "Where do you look most often for test instrumentation?:\n\n"; 
print MESSAGE "$magazine_flag\n\n";
print MESSAGE "$magazine-name\n\n";
print MESSAGE "$internet_flag\n\n";
print MESSAGE "$distributor_flag\n\n";
print MESSAGE "$representative_flag\n\n";
print MESSAGE "I have a need for insulation testing:\n\n";
print MESSAGE "$yes1_flag\n\n";
print MESSAGE "$no1_flag\n\n";
print MESSAGE "What test voltage is important?:\n\n";
print MESSAGE "$twofifty_flag\n\n";
print MESSAGE "$fivehundred_flag\n\n";
print MESSAGE "$thousand_flag\n\n";
print MESSAGE "$twofivehundred_flag\n\n";
print MESSAGE "$fivethousand_flag\n\n";
print MESSAGE "$tenthousand_flag\n\n";
print MESSAGE "$fifteenthousand_flag\n\n";
print MESSAGE "Is the ability to store test results from the 
    instrument important?:\n\n";
print MESSAGE "$yes2_flag\n\n";
print MESSAGE "$no2_flag\n\n";
print MESSAGE "Do you plan to purchase within the next 6 months?:\n\n";
print MESSAGE "$yes3_flag\n\n";
print MESSAGE "$no3_flag\n\n";
print MESSAGE "Name: $FORM{name}\n\n";
print MESSAGE "Title: $FORM{title}\n\n";
print MESSAGE "Job Function: $FORM{job}\n\n";
print MESSAGE "Company: $FORM{company}\n\n";
print MESSAGE "Address: $FORM{address}\n\n";
print MESSAGE "City: $FORM{city}\n\n";
print MESSAGE "State: $FORM{state}\n\n";
print MESSAGE "Zip: $FORM{zip}\n\n";
print MESSAGE "Telephone: $FORM{telephone}\n\n";
print MESSAGE "E-mail: $FORM{e-mail}\n\n";



close (MESSAGE);


exit(0);

ブラウザから送信すると、次のエラーが表示されます。

ソフトウェア エラー:

\boswinfs05\home\users\web\b465\whl.caadmin\www\HTML-email\SP_ToolKitPROMO_NECA2013\functions\formmailer.cgi の 117 行目の "}" 付近のスカラー割り当ての減算 (-) を変更できません。\boswinfs05\home\users\web\b465\whl.caadmin\www\HTML-email\SP_ToolKitPROMO_NECA2013\functions\formmailer.cgi 行 180 に右中括弧または角括弧がありません。\boswinfs05\home\ の行末構文エラーです。 users\web\b465\whl.caadmin\www\HTML-email\SP_ToolKitPROMO_NECA2013\functions\formmailer.cgi 180 行目、EOF で \boswinfs05\home\users\web\b465\whl.caadmin\www\HTML-email の実行\SP_ToolKitPROMO_NECA2013\functions\formmailer.cgi はコンパイル エラーにより中止されました。

ヘルプが必要な場合は、このエラー メッセージとエラーの日時を記載して、このサイトのウェブ マスターにメールを送信してください。

スクリプトを機能させるにはどうすればよいですか?

どんな洞察も大歓迎です。または、より詳細なチュートリアルへのリンクも素晴らしいでしょう。

ありがとう!

4

3 に答える 3

6

これらの識別子にハイフンを使用しています。

$Magazine-name = $FORM{magazine-name};
$E-mail = $FORM{e-mail};

それらをアンダースコアに変更します。

エディターで構文の強調表示を有効にします。これにより、コンパイル前であっても、そのようなエラーをすばやく見つけることができます。

于 2013-09-13T15:18:27.483 に答える
0

チップ:

  • 常に使用してuse strict; use warnings;ください!

  • CGI を自分で処理する代わりに、次を使用します。

    use CGI qw( );
    
    my $cgi  = CGI->new();
    my $form = $cgi->Vars();
    
    # Use $form->{...} instead of $FORM{...}
    
  • if( $form->{magazine} ){
        $magazine_flag ="ON";
    }else{
        $magazine_flag ="OFF";
    }
    
    if( $form->{internet} ){
    ...
    

    次のように書くことができます

    $form->{$_} = $form->{$_} ? "ON" : "OFF"
       for qw(
          magazine
          internet
          ...
       );
    
于 2013-09-13T16:19:20.137 に答える