2017-02-14 2 views
0

ajax를 사용하여 페이지를 새로 고칠 필요가없는 동안 사용자가 저에게 이메일을 보낼 수 있도록 작동하는 연락처 양식이 있습니다.phpmailer & ajax : 메일 첨부 파일

내 사용자가 이메일에 파일을 첨부 할 수있는 옵션을 제공하고 싶지만 Ajax로 데이터를 처리하는 방법으로는 다소 분실했습니다. 여기

은 접촉 형태 :

<form id="contact-form" method="post" action="/handler.php?ajax=contact"> 

    <input type="email" name="contact-email" id="contact-email" /> 

    <select name="contact-category" id="contact-category"> 
     <option value="1">1</option> 
     <option value="2">2</option> 
     <option value="3">3</option> 
    </select> 

    <input type="text" name="contact-subject" id="contact-subject" /> 

    <textarea name="contact-message"></textarea> 

    <input type="file" name="contact-attachment" id="contact-attachment" /> 

    <button class="btn-classic btn-orange"><i class="fa fa-paper-plane"></i> send</button> 

</form> 

아약스 기능 :

$(function(contactSubmit) { 

    var contactForm = $('#tab-contact #contact-form'); 
    var contactCallback = $('#tab-contact #contact-callback'); 

    $(contactForm).submit(function(event) { 

     event.preventDefault(); 
     var contactData = $(contactForm).serialize(); 

     $.ajax({ 
      type: 'POST', 
      url: $(contactForm).attr('action'), 
      data: contactData, 
     }).done(function(response) { 
      $("#contact-callback").addClass("success"); 
     }).fail(function(data) { 
      $("#contact-callback").addClass("fail"); 
     }); 

    }); 


}); 

데이터를 확인하고 메일 전송하는 2 개 PHP 함수 그러나

<?php 

public static function contact() { 

    $mail_from_email = filter_var(trim($_POST['contact-email']), FILTER_SANITIZE_EMAIL); 
    $mail_from_name = 'User1'; 
    $mail_to_email = '[email protected]'; 
    $mail_to_name = 'Webmaster'; 
    $mail_subject = '['.$_POST['contact-category'].'] '.trim($_POST['contact-subject']); 
    $mail_body = trim($_POST['contact-message']); 
    $mail_attachment = $_FILES['contact-attachment']; 

    $sendMail = action::sendMail($mail_from_email, $mail_from_name, $mail_to_email, $mail_to_name, $mail_subject, $mail_body, $mail_attachment); 

} 

public static function sendMail($mail_from_email, $mail_from_name, $mail_to_email, $mail_to_name, $mail_subject, $mail_body, $mail_attachment) { 

    require $_SERVER['DOCUMENT_ROOT'].'/phpmailer/PHPMailerAutoload.php'; 

    $mail = new PHPMailer; 

    //$mail->SMTPDebug = 3;         // Enable verbose debug output 

    $mail->isSMTP();          // Set mailer to use SMTP 
    $mail->Host = config::get('mail_smtp_host');   // Specify main and backup SMTP servers 
    $mail->SMTPAuth = true;         // Enable SMTP authentication 
    $mail->Username = config::get('mail_smtp_username'); // SMTP username 
    $mail->Password = config::get('mail_smtp_password'); // SMTP password 
    $mail->SMTPSecure = config::get('mail_smtp_security'); // Enable TLS encryption, `ssl` also accepted 
    $mail->Port = config::get('mail_smtp_port');   // TCP port to connect to 

    $mail->setFrom($mail_to_email, $mail_from_name); 
    $mail->addAddress($mail_to_email, $mail_to_name);  // Add a recipient 
    $mail->addAddress('');         // Name is optional 
    $mail->addReplyTo($mail_from_email, $mail_from_name); 
    $mail->addCC(''); 
    $mail->addBCC(''); 

    $mail->addAttachment($mail_attachment);     // Add attachments 
    $mail->addAttachment('');        // Optional name 
    $mail->isHTML(true);         // Set email format to HTML 

    $mail->Subject = $mail_subject; 
    $mail->Body = $mail_body; 
    $mail->AltBody = ''; 

    if(!$mail->send()) { 
     return $mail->ErrorInfo; 
    } else { 
     return true; 
    } 

} 

?> 

을 1 단계에서 갇혀 있었어 : 내 PHP 함수는 파일 입력에서 데이터를 검색 할 수 없습니다, 그것은 아약스 것 같습니다 이 입력 필드에 관한 정보를 보내지 마십시오.
PHP는 Undefined index: contact-attachment을 반환합니다.

아무도 도와 줄 수 없습니까? 현재 코드에 어떤 문제가 있습니까?

답변

2

양식 태그에 모든 특성이 포함되어 있지 않습니다. `정의되지 않은 인덱스 :

내가 그것을 고정하지만 여전히 나에게 오류를 제공, 당신의 대답에 대한

<form id="contact-form" method="post" action="/handler.php?ajax=contact"> 

<form id="contact-form" method="post" action="/handler.php?ajax=contact" accept-charset="utf-8" enctype="multipart/form-data"> 

$(document).ready(function() { 
 
$('#contact-form').submit(function(e) { 
 
var formData = new FormData($(this)[0]); 
 

 
    $.ajax({ 
 
     url: window.location.pathname, 
 
     type: 'POST', 
 
     data: formData, 
 
     async: false, 
 
     success: function (data) { 
 
      alert(data) 
 
     }, 
 
     cache: false, 
 
     contentType: false, 
 
     processData: false 
 
    }); 
 
    return false; 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form id="contact-form" method="post" action="/handler.php?ajax=contact" accept-charset="utf-8" enctype="multipart/form-data"> 
 

 
    <input type="email" name="contact-email" id="contact-email" /> 
 

 
    <select name="contact-category" id="contact-category"> 
 
     <option value="1">1</option> 
 
     <option value="2">2</option> 
 
     <option value="3">3</option> 
 
    </select> 
 

 
    <input type="text" name="contact-subject" id="contact-subject" /> 
 

 
    <textarea name="contact-message"></textarea> 
 

 
    <input type="file" name="contact-attachment" id="contact-attachment" /> 
 

 
    <button class="btn-classic btn-orange"><i class="fa fa-paper-plane"></i> send</button> 
 

 
</form>

+0

감사를 교체 contact- 첨부 파일 ' – eloism

+0

바꾸기 var contactD ata = $ (contactForm) .serialize(); with var contactData = new FormData (contactForm); – Rahi

+0

지금 "불법 호출"을 받고 있습니다 – eloism