2011-08-04 6 views
-6

これは私がこのクエリを尋ねる4回目です。このスクリプトの問題点は何ですか?

私はインターネットから入手した添付ファイルを持った連絡フォームを持っています。エラーは表示されませんが、ファイルを添付してメールを送信しようとすると機能しませんでした。あなたは問題が何であるか教えてもらえますか、または添付ファイル付きの簡単な連絡フォームを提案できますか?私はすでに、インターネット上の添付ファイルでほとんどのコンタクトフォームを試しましたが、ほとんどのファイル添付部分は機能しません。

以下は、スクリプトの一部であるHTMLコードの一部です。私のサイトはオンラインで、これにより私は問題に直面しています。

<form action="" method="post" name="form1" enctype="multipart/form-data"> 
<input name="txtTo" type="text" id="txtTo"> 
<input name="txtSubject" type="text" id="txtSubject"> 
<textarea name="txtDescription" cols="30" rows="4" id="txtDescription"> 
<input name="txtFormName" type="text"> 
    <input name="txtFormEmail" type="text"> 
    <input name="fileAttach" type="file"> 
    <input type="submit" name="Submit" value="Send"> 
    </form> 

PHPスクリプト

<?php 
if(isset($_POST["submit"])){ 
$strTo = $_POST["txtTo"]; 
$strSubject = $_POST["txtSubject"]; 
$strMessage = nl2br($_POST["txtDescription"]); 

//*** Uniqid Session ***// 
$strSid = md5(uniqid(time())); 

$strHeader = ""; 
$strHeader .= "From: ".$_POST["txtFormName"]."<".$_POST["txtFormEmail"].">\nReply-To: ".$_POST["txtFormEmail"].""; 

$strHeader .= "MIME-Version: 1.0\n"; 
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n"; 
$strHeader .= "This is a multi-part message in MIME format.\n"; 

$strHeader .= "--".$strSid."\n"; 
$strHeader .= "Content-type: text/html; charset=utf-8\n"; 
    $strHeader .= "Content-Transfer-Encoding: 7bit\n\n"; 
    $strHeader .= $strMessage."\n\n"; 

//*** Attachment ***// 
    if($_FILES["fileAttach"]["name"] != "") 
    { 
    $strFilesName = $_FILES["fileAttach"]["name"]; 
    $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"] ["tmp_name"]))); 
    $strHeader .= "--".$strSid."\n"; 
    $strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
    $strHeader .= "Content-Transfer-Encoding: base64\n"; 
    $strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n"; 
    $strHeader .= $strContent."\n\n"; 
} 

$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error // 

if($flgSend) 
{ 
    echo "Mail send completed."; 
} 
    else 
{ 
echo "Cannot send mail."; 
} 
} 
?> 
+8

? – zerkms

+1

いくつかの重要なステップが欠落しています。あなたはそれについてもう少し研究する必要があります。あなたはほとんどそこにいます。 http://www.tizag.com/phpT/fileuploadをご覧ください。phpと http://php.net/move_uploaded_file – micha

+0

あなたの素晴らしい返信のためにmichaさんに感謝します – test

答えて

1

これは私の謙虚な答えです。私はあなたのコードを少し書式設定し、スタンドアローンのバージョンを作成しました(シンプルなスタイリングで^^)。

ライブデモ:それはそう簡単に言えばhttp://kopli.pri.ee/stackoverflow/6935517.php
(私の小さなメール送信サービスを乱用しないでください)

$_POST["submit"]が主な問題だったこと。しかし、私はいくつかの重要な側面を修正し、それを忘れることを忘れた可能性があります。

注:スクリプトはいくつかの点で機能していたかもしれませんが、電子メールプロバイダのスパム対策システムはスパムとしてマークしましたか?あなたのページが正しくエンコードされていなかった場合も、その後、電子メールのUTF-8形式との競合があったかもしれない...

私はあなたにいくつかのポインタを与えることを望むでしょう:

  • $ _POST ["submit"]に重大な問題がありました。フォームにそのような入力がありません。有効なトリガーではありません。
  • <textarea>は閉じられておらず、問題を引き起こしていました。
  • 私は<input>年代は、PHPのため<input>で/
  • で終了する必要があるので、あなたはありid="txtSubject"(JSを扱う際のidのが便利です)
  • を持って必要はありませんが、私の例では、XHTMLを使用していますには<form>
  • のポイントはありませんあなたのPHPコードには奇妙な空間がありました。例:$_FILES["fileAttach"] ["tmp_name"]。これはあまり正しいコードではありません!
  • 文字列の最後に. ""を追加する非常に

無意味完全スタンドアロンコードです:あなたはあなたのためだけにそれを行うために誰かを雇うしていないのはなぜ

<?php 

if (isset($_POST["submit_trigger"])) { 
    $strTo = $_POST["txtTo"]; 
    $strSubject = $_POST["txtSubject"]; 
    $strMessage = nl2br($_POST["txtDescription"]); 

    //*** Uniqid Session ***// 
    $strSid = md5(uniqid(time())); 

    $strHeader = ""; 
    $strHeader .= "From: " . $_POST["txtFormName"] . "<" . $_POST["txtFormEmail"] . ">\nReply-To: " . $_POST["txtFormEmail"]; 

    $strHeader .= "MIME-Version: 1.0\n"; 
    $strHeader .= "Content-Type: multipart/mixed; boundary=\"" . $strSid . "\"\n\n"; 
    $strHeader .= "This is a multi-part message in MIME format.\n"; 

    $strHeader .= "--" . $strSid . "\n"; 
    $strHeader .= "Content-type: text/html; charset=utf-8\n"; 
    $strHeader .= "Content-Transfer-Encoding: 7bit\n\n"; 
    $strHeader .= $strMessage . "\n\n"; 

    //*** Attachment ***// 
    if ($_FILES["fileAttach"]["name"] != "") { 
     $strFilesName = $_FILES["fileAttach"]["name"]; 
     $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 
     $strHeader .= "--" . $strSid . "\n"; 
     $strHeader .= "Content-Type: application/octet-stream; name=\"" . $strFilesName . "\"\n"; 
     $strHeader .= "Content-Transfer-Encoding: base64\n"; 
     $strHeader .= "Content-Disposition: attachment; filename=\"" . $strFilesName . "\"\n\n"; 
     $strHeader .= $strContent."\n\n"; 
    } 

    // @ = No Show Error // 
    $flgSend = @mail($strTo, $strSubject, null, $strHeader); 

    if ($flgSend) { 
     $posting_message = '<div class="success_message">Mail send completed :)</div>'; 
    } else { 
     $posting_message = '<div class="error_message">Cannot send mail :(</div>'; 
    } 
} 

?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <title>Can you tell me what is the problem with this script - Kalle H. Väravas</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <style> 
     html, body {margin: 0px; padding: 0px; background: #B3D9FF;} 
     label {font-weight: bold; width: 140px; display: inline-block; padding: 10px;} 
     .success_message, 
     .error_message {display: inline-block; padding: 2px 5px; font-weight: bold; margin-bottom: 5px;} 
     .success_message {background: #A9F5AB;} 
     .error_message {background: #FF8080;} 
     #main_container {width: 500px; -moz-border-radius: 5px; background: #FFFFFF; margin: 20px auto; padding: 20px;} 
    </style> 
</head> 
<body> 
    <div id="main_container"> 
     <?php echo $posting_message; ?> 
     <form action="" method="post" enctype="multipart/form-data"> 
      <input name="submit_trigger" value="1" type="hidden" /> 
      <label>To:</label><input name="txtTo" type="text" /><br /> 
      <label>Subject:</label><input name="txtSubject" type="text" /><br /> 
      <label>Message:</label><textarea name="txtDescription" cols="30" rows="4"></textarea><br /> 
      <label>From name:</label><input name="txtFormName" type="text" /><br /> 
      <label>From email</label><input name="txtFormEmail" type="text" /><br /> 
      <label>Attachment:</label><input name="fileAttach" type="file" /><br /> 
      <input type="submit" name="Submit" value="Send" /><br /> 
     </form> 
    </div> 
</body> 
</html> 
0
file name = "php_sendmail_upload1" 
     <form action="#" method="post" name="form1" class="blocks" enctype="multipart/form-data" class="blocks"> 
     <p> 
      <label>Name</label> 
      <input name="txtFormName" class="text" type="text"> 
     </p> 
     <p> 
      <label>Email</label> 
      <input name="txtFormEmail" type="text" class="text"> 
     </p> 
     <p> 
      <label>Position Applying For</label> 
      <input type="text" name="txtDescription" id="txtDescription" class="text"> 
     </p> 
     <p class="area"> 
      <label>Upload CV</label> 
      <input name="fileAttach" type="file" > 
     </p> 
     <p> 
      <label>&nbsp;</label> 
      <input type="submit" class="submit" name="Submit" value="SEND" /> 

     </p> 
    </form> 



    <? 
$strTo = "[email protected]"; 
$strSubject = $_POST["txtSubject"]; 
$strMessage = nl2br($_POST["txtDescription"]); 

//*** Uniqid Session ***// 
$strSid = md5(uniqid(time())); 

$strHeader = ""; 
$strHeader .= "From: ".$_POST["txtFormName"]."<".$_POST["txtFormEmail"].">\nReply-To: ".$_POST["txtFormEmail"].""; 

$strHeader .= "MIME-Version: 1.0\n"; 
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n"; 
$strHeader .= "This is a multi-part message in MIME format.\n"; 

$strHeader .= "--".$strSid."\n"; 
$strHeader .= "Content-type: text/html; charset=utf-8\n"; 
$strHeader .= "Content-Transfer-Encoding: 7bit\n\n"; 
$strHeader .= $strMessage."\n\n"; 

//*** Attachment ***// 
if($_FILES["fileAttach"]["name"] != "") 
{ 
    $strFilesName = $_FILES["fileAttach"]["name"]; 
    $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 
    $strHeader .= "--".$strSid."\n"; 
    $strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
    $strHeader .= "Content-Transfer-Encoding: base64\n"; 
    $strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n"; 
    $strHeader .= $strContent."\n\n"; 
} 


$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error // 

if($flgSend) 
{ 
    echo ""; 
} 
else 
{ 
    echo "Cannot send mail."; 
} 
?> 



file name="php_sendmail_upload2" 


    <? 
$strTo = "[email protected]"; 
$strSubject = $_POST["txtSubject"]; 
$strMessage = nl2br($_POST["txtDescription"]); 

//*** Uniqid Session ***// 
$strSid = md5(uniqid(time())); 

$strHeader = ""; 
$strHeader .= "From: ".$_POST["txtFormName"]."<".$_POST["txtFormEmail"].">\nReply-To: ".$_POST["txtFormEmail"].""; 

$strHeader .= "MIME-Version: 1.0\n"; 
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n"; 
$strHeader .= "This is a multi-part message in MIME format.\n"; 

$strHeader .= "--".$strSid."\n"; 
$strHeader .= "Content-type: text/html; charset=utf-8\n"; 
$strHeader .= "Content-Transfer-Encoding: 7bit\n\n"; 
$strHeader .= $strMessage."\n\n"; 

//*** Attachment ***// 
if($_FILES["fileAttach"]["name"] != "") 
{ 
    $strFilesName = $_FILES["fileAttach"]["name"]; 
    $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 
    $strHeader .= "--".$strSid."\n"; 
    $strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
    $strHeader .= "Content-Transfer-Encoding: base64\n"; 
    $strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n"; 
    $strHeader .= $strContent."\n\n"; 
} 


$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error // 

if($flgSend) 
{ 
    echo "Mail send completed."; 
} 
else 
{ 
    echo "Cannot send mail."; 
} 
?>   
+0

変更内容を説明できますか? – Korcholis

関連する問題