2015-07-21 91 views
0

我的表單不發送圖像到我的電子郵件。在表格上,用戶可以上傳圖片和所有必需的信息,但圖片沒有收到,我只收到上傳的文件名。表單不發送圖像文件到電子郵件

這是郵件是如何在我的電子郵件中收到:大衛·馬克斯韋爾
電子郵件:[email protected]
網站:08036240369

下面

commentName表格細節照片:David.jpg
評論:榮譽

這是形式的PHP代碼:

<?php 
if(isset($_POST['email'])) { 

    // CHANGE THE TWO LINES BELOW 
    $email_to = "[email protected]";   

    $email_subject = "form submission"; 

    function died($error) { 
     // your error code can go here 
     echo "We are sorry, Your comment couldn't be submitted. Please provide solution to error(s) below.<br /><br />"; 

     echo $error."<br /><br />"; 

     echo "Please go back and fix these errors.<br /><br />"; 
     die(); 
    } 

    // validation expected data exists 
    if(!isset($_POST['author']) || 
     !isset($_POST['email']) || 
     !isset($_POST['url']) || 
     !isset($_POST['photo']) || 
     !isset($_POST['comment']) 
     ) 
     { 
     died('We are sorry, but there appears to be a problem with the form you submitted.');  
    } 

    $commentName = $_POST['author']; // required 
    $email_from = $_POST['email']; // required 
    $website = $_POST['url']; // required 
    $photo = $_POST['photo']; 
    $comments= $_POST['comment']; // required 

    $error_message = ""; 
     $string_exp = "/^[A-Za-z .'-]+$/"; 
    if(!preg_match($string_exp,$commentName)) { 
    $error_message .= 'The Name is empty, or does not appear to be valid.<br />'; 
    } 
    $email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 
    if(!preg_match($email_exp,$email_from)) { 
    $error_message .= 'Email Address is missing, or does not appear to be valid.<br />'; 
    } 

     $string_exp = "/^[0-9+().-]+$/"; 
    if(!preg_match($string_exp,$website)) { 
    $error_message .= 'Phone No is omitted, or does not appear to be valid.<br />'; 
    } 

    if(strlen($comments) < 2) { 
    $error_message .= 'Comment field cannot be left blank. Please enter your comment.<br />'; 
    } 

    if(strlen($error_message) > 0) { 
    died($error_message); 
    } 
    $email_message = "Form details below\n\n"; 

    function clean_string($string) { 
     $bad = array("content-type","bcc:","to:","cc:","href"); 
     return str_replace($bad,"",$string); 
    } 

    $email_message .= "commentName: ".clean_string($commentName)."\n"; 
    $email_message .= "email: ".clean_string($email_from)."\n"; 
    $email_message .= "website: ".clean_string($website)."\n"; 
    $email_message .= "photo: ".clean_string($photo)."\n"; 
    $email_message .= "comments: ".clean_string($comments)."\n"; 

// create email headers 
$headers = 'From: '.$email_from."\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
@mail($email_to, $email_subject, $email_message, $headers); 
?> 

<!-- place your own success html below --> 

Your comment will be reviewed before posting within 48hours. <a href='blog_post.html' style='text-decoration:none;color:#ff0099;'> Click Here </a> to return back. 
<?php 
} 
die(); 
?> 

這是HTML代碼:

<html> 
<body> 

<!-- Comment Form --> 
    <div id="respond" class="eleven columns row alpha"> 
     <h4>Leave a comment</h4> 
     <form id="replyform" method="post" action="commentformprocessor.php"> 
     <div class="input_cm_wrapper"> 
      <h6 for="commentName">Name *</h6> 
      <input type="text" name="author" id="reply_name" class="requiredfield"/> 
     </div> 
     <div class="input_cm_wrapper"> 
      <h6 for="email">Email Address *</h6>    
      <input type="email" name="email" id="reply_email" class="requiredfield"/> 
     </div> 
     <div class="input_cm_wrapper last"> 
      <h6 for="website">Phone No. *</h6> 
      <input type="text" name="url" id="reply_website" class="last"/> 
     </div> 

      <span class="clear"></span> 
      <h6 for="commentsText">Message * 
     <span>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 
      Upload Photo. * &nbsp&nbsp&nbsp 
      <input type="file" name="photo" id="reply_photo" class="requiredfield" required style=""/> 
      </span> </h6> 
      <textarea name="comment" id="reply_message" class="requiredfield"></textarea> 

      <span class="clear"></span><br> 
      <button type="submit" onclick="alert ('Thank you for your comment. Please make sure all required fields are completed.')" name="send">Send</button> 

     </form> 
    </div> 
</body> 
</html> 

回答

1

你不能指定圖像的變量,並用郵件發送。你需要做的幾個步驟

  1. 檢查圖像是否是格式無效(JPG,PNG ...)
  2. 然後上傳斷絕
  3. 然後把它附加

和在<form>你應該使用enctype="multipart/form-data"

<form id="" method="post" action="" enctype="multipart/form-data"> 

確認圖像格式有效

<?php 
    $target_dir = "uploads/"; 
    $target_file = $target_dir . basename($_FILES["photo"]["name"]); 
    $status = 1; 
    $FileType = pathinfo($target_file,PATHINFO_EXTENSION); 

// Allow certain file formats 
    if($FileType != "jpg" && $FileType != "png" && $FileType != "jpeg") 
    { 
     echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
     $status = 0; 
    } 


// Check if $status is set to 1 
    if ($status == 1) 
    { 
     // if everything is ok, try to upload file 
     if (move_uploaded_file($_FILES["photo"]["tmp_name"], $target_file)) 
     { 
      echo "The file has been uploaded."; 
     } else 
     { 
      echo "Sorry, there was an error uploading your file."; 
     }  

    } 
    else 
    { 
     echo "Sorry, your file was not uploaded."; 
    } 
?> 

然後獲取文件路徑

<?php 

$path = "uploads/".$_FILES["photo"]["tmp_name"]; 

?> 

郵件

<img src="<?php echo $path ;?>" alt=""> 

包含此電子郵件標頭

$header = "From:".$email_from."\nMIME-Version: 1.0\nContent-Type: text/html; charset=utf-8\n"; 
+0

非常感謝@阿卜杜拉。請你花一分鐘來解釋我可以如何或者將這個新代碼添加到現有代碼中的位置。在此先感謝,我等待你的迴應 –

+0

此外,我試圖通過添加enctype =「multipart/form-data」>來跟蹤你的指令,這是用戶提交表單時的迴應:我們很抱歉,請提交。請爲下面的錯誤提供解決方案。我們很抱歉,但您提交的表單看起來有問題。請返回並修復這些錯誤。 –

1

下面是完整的解決方案。我保持它簡單。您可以稍後添加其他代碼。我已經測試了代碼,它的工作非常好。

PHP部分

<?php 
$error_message = ""; 
if(isset($_POST['send'])) { 


// CHANGE THE TWO LINES BELOW 
$email_to = "[email protected]"; 


$email_subject = "form submission"; 

$commentName = $_POST['author']; // required 
$email_from = $_POST['email']; // required 
$website = $_POST['url']; // required 
//$photo = $_POST['photo']; 

$photoname=$_FILES['photo']['name']; 
$tmp_name=$_FILES['photo']['tmp_name']; 
$comments= $_POST['comment']; // required 

if($commentName==""){ 
    echo "Empty author name"; 
}else if($email_from==""){ 
    echo "Empty email"; 
} 
else{ 
//create a folder name called img 
$destinationpath="img/".$photoname; 
$moveimage=move_uploaded_file($tmp_name,$destinationpath); 


if(!$moveimage){ 
    die("Error in uploading"); 
} 

    $message = "Form details below\n\n"; 


    $message .= "commentName: ".$commentName."\n"; 
    $message .= "email: ".$email_from."\n"; 
    $message .= "website: ".$website."\n"; 

    $message .= "comments: ".$comments."\n"; 


    // boundary 
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 



    // preparing attachments    
     $file = fopen($destinationpath,"rb"); 
     $f_contents = fread($file,filesize($destinationpath)); 
     $f_contents = chunk_split(base64_encode($f_contents)); 
     fclose($file); 
     # Get a random 32 bit number using time() as seed. 
    $num = md5(time()); 

    # Define the main headers. 
    $header = "From:[email protected]\r\n"; 
    $header .= "MIME-Version: 1.0\r\n"; 
    $header .= "Content-Type: multipart/mixed; "; 
    $header .= "boundary=$num\r\n"; 
    $header .= "--$num\r\n"; 

    # Define the message section 
    $header .= "Content-Type: text/plain\r\n"; 

    $header .= "$message\r\n"; 
    $header .= "--$num\r\n"; 

    # Define the attachment section 
    $header .= "Content-Type: multipart/mixed; "; 
    $header .= "name=\"$photoname\"\r\n"; 
    $header .= "Content-Transfer-Encoding:base64\r\n"; 
    $header .= "Content-Disposition:attachment; "; 
    $header .= "filename=\"$photoname\"\r\n\n"; 
    $header .= "$f_contents \r\n"; 
    $header .= "--$num--"; 

     mail($email_to, $email_subject, $message, $header); 
      } 
     ?> 

     <!-- place your own success html below --> 

    <h2>Your comment will be reviewed before posting within 48hours. 
    </h2> 
    <?php 
    } 

    ?> 

和身體標記中的HTML部分

<!-- Comment Form --> 
    <div id="respond" class="eleven columns row alpha"> 
    <h4>Leave a comment</h4> 
    <form id="replyform" method="post" action="" enctype="multipart/form-data"> 
    <div class="input_cm_wrapper"> 
    <h6 for="commentName">Name *</h6> 
    <input type="text" name="author" id="reply_name" class="required"/> 
</div> 
<div class="input_cm_wrapper"> 
    <h6 for="email">Email Address *</h6> 
    <input type="email" name="email" id="reply_email" class="required"/> 
</div> 
<div class="input_cm_wrapper last"> 
    <h6 for="website">Phone No. *</h6> 
    <input type="text" name="url" id="reply_website" class="last"/> 
</div> 
<span class="clear"></span> 
    <h6 for="commentsText"> 
    Message * <span>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 
    Upload Photo. * &nbsp&nbsp&nbsp 
    <input type="file" name="photo" id="reply_photo" class="requiredfield" required /> 
    </span> </h6> 
<textarea name="comment" id="reply_message" class="requiredfield"></textarea> 
<span class="clear"></span><br> 
<button type="submit" name="send">Send</button> 
</form> 
</div> 

歡呼

+0

@藍玫瑰,謝謝你!有效。 –

+0

美好的一天,我是否需要在stackoverflow上投票才能提高您的問題的回答率 –

+0

請使用向上箭頭和勾號:) –