HTMLで作成したお問い合わせフォームをcgiに渡すと
文字化けしたお問い合わせフォームページが返ってくる
HPのリニューアルに際して、
無料cgiライブラリを使ったお問い合わせフォームを作成しております。
初心者ですので前任者のコードのパスを書き換えただけですが上手に作動しません。
フォームチェック用のJavaScriptはHTMLに埋め込んでいます。
【送信前】
【確認画面へボタン押下後】
HTML
1<!DOCTYPE html> 2 3<html> 4 <head> 5 6 <meta charset="utf-8"> 7 <title>お問い合わせ</title> 8 <link rel="stylesheet" href="../base.css" type="text/css"> 9 10 <!--フォームチェック用JS--> 11 <script language="JavaScript"> 12<!-- 13 ////NINOオリジナルフォームチェック! 14 qNm = new Array(); 15 qJp = new Array(); 16 //Emailチェックするか? 17 EmailCheck=true; 18 //お電話番号lチェックするか? 19 PhoneCheck=true; 20 //必須項目設定 21 qNm[0] = 'name' ; 22 qJp[0] = 0; 23 ///////////////////// 24 function formCheck(){ 25 errFlag = 0; 26 messe = ''; 27 //足し算結果が2以上のものはエラーとみなす 28 for(m=0; m<qNm.length; m++){ 29 targetEle = document.myform.elements[qJp[m]].value; 30 if( targetEle == null || targetEle == ''){ 31 messe += '●'+qNm[m]+'を入力してください\n'; 32 errFlag = 1; 33 } 34 } 35 //メールチェック 36 if(EmailCheck == true){ 37 ml = /.+@.+\..+/; // チェック方式 38 mf = document.myform.elements['Email'].value; 39 if(mf){ 40 if(!mf.match(ml)) { 41 messe += '●E-mailが正しくありません\n'; 42 errFlag = 1; 43 } 44 }else{ 45 messe += '●E-mailを入力してください\n'; 46 errFlag = 1; 47 } 48 } 49 //お電話番号チェック 50 if(PhoneCheck == true){ 51 pf = document.myform.elements['tel'].value; 52 if(pf == null || pf == ''){ 53 messe += '●お電話番号を入力してください\n'; 54 errFlag = 1; 55 } 56 } 57 //エラーフラグがあれば、アラート表示 58 if(errFlag == 1){ 59 alert(messe); 60 return false; 61 } 62 } 63//--> 64</script> 65 </head> 66 67 <body> 68 <div class="content"> 69 <form id="entry" action="./form.cgi" method="POST" onSubmit="return formCheck();" name="myform"> 70 71 <dl> 72 <dt>お名前<span class="must">※</span></dt> 73 <dd><input type="text" name="name" id="name" required></dd> 74 75 <dt>企業名<span> </span></dt> 76 <dd><input type="text" name="company" id="company"></dd> 77 78 <dt>お住まいの都道府県<span class="must">※</span></dt> 79 <dd><input type="text" name="adress" id="adress" required></dd> 80 81 <dt>メールアドレス<span class="must">※</span></dt> 82 <dd><input type="email" name="Email" id="Email" required></dd> 83 84 <dt>電話番号<span class="must">※</span></dt> 85 <dd><input type="tel" name="tel" id="tel" required></dd> 86 87 <dt>お問い合わせ内容<span class="must">※</span></dt> 88 <dd><textarea name="detail" id="detail" required></textarea></dd> 89 </dl> 90 91 <p id="submit_buttom_wrap"> 92 <input type="submit" id="submit_buttom" value="確認画面へ"> 93 </p> 94 </form> 95 </div> 96 </body> 97 98</html>
cgi
1#!/usr/bin/perl 2 3require './form/jcode.pl'; 4 5$tempFile = './contact.html'; 6 7#■□■□■□■□■□■□■□■□■□ 8$hensin = 1; 9$kakunin_Gamen = 1; 10@hisuu = (); 11$hisuu_Email = 0; 12$thispl = 'form.cgi'; 13$mailprog = '/usr/sbin/sendmail'; 14$mailaddress = '受信用アドレスを入力しています'; 15$subject = 'HPよりお問い合せがあります'; 16$mailhead = "以下の内容が送信されてきました。"; 17$Ssubject = 'お問い合せありがとうございます'; 18$Smailhead = 'お問い合せありがとうございます 19$Smailfoot = ' 20 21'; 22 23#■□■□■□■□■□■□■□■□ 24#◆◆◆◆フォーム内容を確認 25if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } 26else { $buffer = $ENV{'QUERY_STRING'}; } 27 28 foreach(@hisuu){#---------チェックボックス・ラジオボタンの必須項目チェック用 29 $hisuu_check{$_} =0; 30 } 31@ERROR = (); 32@pairs = split(/&/, $buffer); 33foreach $pair (@pairs) { 34 ($name, $value) = split(/=/, $pair); 35 36 $name =~ tr/+/ /; 37 $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; 38 $value =~ tr/+/ /; 39 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; 40 $value =~ s/<!--(.|\n)*-->//g; #-------------------SSIの禁止用 41 &jcode'convert(*name,'sjis'); 42 &jcode'convert(*value,'sjis'); 43 44 $FORM{$name} = $value; 45 46 if($value ne ''){ 47 push(@NAME,$name); 48 push(@VALUE,$value); 49 } 50 #必須項目の記入判断 51$hisuu_check{$name} =1;#---------チェックボックス・ラジオボタンの必須項目チェック用 52if(!$value){#---------チェックボックス・ラジオボタン”以外”の必須項目チェック用 53 if($name ne 'Email'){ 54 foreach(@hisuu){ 55 if( $_ eq $name){ push(@ERROR,$name); } 56 } 57 } 58} 59 60}#foreach 61 62 63#◆◆◆◆確認画面を表示するのかメール送るのかの判断 64if (!$FORM{'kakunin'}){ 65 if($hisuu_Email){ 66 if($FORM{Email}){ 67 if( $FORM{Email} =~ /[^\x21-\x7E]/ || $FORM{Email} =~ /[\(\)<>,;:\\"\[\]]/ || $FORM{Email} !~ /^[^@]+@[^@]+$/ ) { 68 push(@ERROR,'E-mailが正しくありません(全角文字・スペースが含まれていないかご確認ください)'); 69 } 70 }else{ 71 push(@ERROR,'E-mail'); 72 } 73 } 74 while (($name, $value) = each(%hisuu_check)) {#---------チェックボックス・ラジオボタンの必須項目チェック用 75 if(!$value){ push(@ERROR,$name); } 76 } 77 if(!@ERROR){ 78 if($kakunin_Gamen){ &kakuninGamen; } 79 else{ &okuru; } 80 }else{ &error; } 81 82}else{ 83 &okuru; 84} 85 86 87#◆◆◆◆確認画面を表示 88sub kakuninGamen{ 89 $write = '<table border="0" width="667" height="349" cellpadding="0" cellspacing="0" align="center" style="margin-top:0px; background:url(images/bg_tamago.jpg) right top no-repeat;"><tr><td valign="top">'; 90 $write .= '<table border="0" width="400" cellpadding="0" cellspacing="0"><tr><td>'; 91 $write .= "<form action=\"$thispl\" method=\"post\">"; 92 $write .= '<tr><td colspan="2" height="50" varign="middle">以下の内容をご確認の上、よろしければ<b>「送信する」</b>ボタンをクリックして下さい。</td></tr>'; 93 $write .= '<tr><td colspan="2"><hr noshade size="1" style="margin:3px 0 3px 0;"></td></tr>'; 94 95 $x = 0; 96 foreach (@NAME) { 97 if($VALUE[$x]){ 98 $write .= "<tr>\n"; 99 $write .= "<input type=\"hidden\" name=\"$NAME[$x]\" value=\"$VALUE[$x]\">\n"; 100 $VALUE[$x] =~ s/\n/<br>/g; 101 $write .= "<td width=\"10%\" nowrap>$NAME[$x]:</td>\n"; 102 $write .= "<td width=\"90%\">$VALUE[$x]</td>\n"; 103 $write .= "</tr>\n"; 104 $write .= '<td colspan="2"><hr noshade size="1" style="margin:3px 0 3px 0;"></td>'; 105 $write .= "</tr>\n"; 106 } 107 $x++; 108 } 109 $write .= ' 110 </table> 111 <br /> 112 <table border="0" cellpadding="0" cellspacing="0" width="667"><tr><td> 113 <input type="hidden" name="kakunin" value="on" > 114 <input type="submit" value="- 送信する -" class="inp"> <input type="button" name="back" onClick="history.back()" value="- 戻る -" class="inp"> 115 </td></tr></table> 116 </form> 117 </td></tr></table> 118 '; 119 120 &pageWrite; 121} 122 123#◆◆◆◆確認画面を表示 124sub pageWrite{ 125 print "Content-Type: text/html; charset=Shift_JIS\n"; 126 print "Content-Language: ja\n"; 127 print "Pragma: no-cache;\n\n"; 128 129 #テンプレート読んで書き出し 130 open(TEMP,"$tempFile"); 131 @temp = <TEMP>; 132 close(TEMP); 133 #配列をひとつの変数にまとめる 134 $tempFlag = 1; 135 foreach (@temp){ 136 if($_ =~ /<!--__systemCheck__-->/){ 137 if($tempFlag){ 138 $tempFlag = 0; 139 $tempMatome .= "<!--__write__-->\n"; 140 }else{ 141 $tempFlag = 1; 142 } 143 } 144 if($tempFlag){ 145 $tempMatome .= $_; 146 } 147 } 148 149 $tempMatome =~ s/<!--__write__-->/$write/g; 150 151 print $tempMatome; 152 exit(0); 153 154}#sub kakuninGamen 155 156 157#◆◆◆◆メールを送ってサンクスページを表示 → 終了 158sub okuru{ 159require "mimew.pl"; 160 161open(MAIL,"|$mailprog -t"); 162 $mail_head = ""; 163 $mail_head .= "Content-type: text/plain; charset=ISO-2022-JP\n"; 164 $mail_head .= "Content-Transfer-Encoding: 7bit\n"; 165 $mail_head .= "MIME-Version: 1.0\n"; 166 $mail_head .= "Return-Path: $FORM{'Email'}\n"; 167 $mail_head .= "From: $FORM{'Email'}\n"; 168 $mail_head .= "To: $mailaddress\n"; 169 if($bccaddress){ $mail_head .= "Bcc: $bccaddress\n"; } 170 $mail_head .= "Subject: $subject\n\n"; 171 $mail_head = &mimeencode($mail_head); 172 173 $mail_message .= "$date\n"; 174 $mail_message .= "$mailhead\n\n"; 175 $mail_message .= "□□□□□□□□□□□□□□□□□□□□\n\n"; 176 177 for($x = 0; $x < $#NAME; $x++) { 178 if ($NAME[$x] ne 'kakunin'){ 179 $mail_message .= "【 $NAME[$x] 】 "; 180 $mail_message .= "$VALUE[$x]\n\n"; 181 } 182 } 183 $mail_message .= "□□□□□□□□□□□□□□□□□□□□\n\n"; 184 $mail_message .= "ホスト名:$host\n"; 185 $mail_message .= "IPアドレス:$addr\n"; 186 $mail_message .= "ブラウザ:$ENV{'HTTP_USER_AGENT'}\n"; 187 &jcode'convert(*mail_message,'jis'); 188 189 print MAIL $mail_head; 190 print MAIL $mail_message; 191close (MAIL); 192 193 194#print "Location: $thanks\n\n"; 195if($hensin && $FORM{'Email'}){ &Hensin; } 196 197$write = '<table border="0" width="667" cellpadding="0" cellspacing="0" align="center" style="margin-top:0px; background:url(images/bg_tamago.jpg) right top no-repeat;"> 198<tr><td><br /><p style="height:250px;">お問い合せありがとうございます。</p></td></tr></table>'; 199&pageWrite; 200 201exit; 202 203} 204 205#◆◆◆◆エラーの表示 206sub error{ 207print "Content-Type: text/html; charset=Shift_JIS\n"; 208print "Content-Language: ja\n"; 209print "Pragma: no-cache;\n\n"; 210print <<EOF; 211<HTML> 212<HEAD> 213<TITLE>エラー</TITLE> 214<style type="text/css"> 215<!-- 216td{font-size:12px;} 217--> 218</style> 219</head> 220<body bgcolor="#ffffff" text="#000000"> 221<center> 222<br><br><br> 223<table border="0" cellpadding="1" cellspacing="0" bgcolor="#ff6600"><tr><td> 224<table border="0" cellpadding="10" cellspacing="0" bgcolor="#ffffee"> 225 <tr> 226 <td class="hutuu"><font color="#009900">■</font> 恐れ入りますが、以下の項目は必ずご記入ください <font color="#009900">■</font></td> 227 </tr> 228 <tr> 229 <td class="hutuu"><br> 230EOF 231 232$xx = 0; 233foreach $Error(@ERROR){ 234 print "<font color=\"#cc0000\">【 $Error 】 </font>"; 235 } 236 237if(!@ERROR){ 238 if($Mlhusei){ 239 print "<font color=\"#cc0000\">E-mailの記入が正しくありません</font>"; 240 } 241} 242 243print <<EOF; 244 <br><br></td> 245 </tr> 246 <tr> 247 <td class="hutuu">ブラウザの戻るボタンで前のページに戻り、再度ご記入ください。</td> 248 </tr> 249</table> 250</td></tr></table> 251</center> 252</body> 253</html> 254EOF 255 256exit(0); 257} 258
【やりたいこと】
・”確認画面へ”押下後、確認画面を表示して、メール送信
【試したこと】
・サーバー上の実行権限を既存のものと同じにした
・パスの確認
簡単なミスを見逃しているだけかもしれませんが、どなたかご教授ください。
どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー