2017-02-14 20 views
0

ajaxを使用して、ページを更新しなくてもメールを送信できるように、連絡先フォームがあります。phpmailer&ajax:メール添付ファイル

私は自分のメールにファイルを添付するオプションがあることを希望しますが、Ajaxでデータを処理する方法としては迷っています。しかしながら

<?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; 
    } 

} 

?> 

<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> 

AJAX機能:

$(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関数ここ

は接触形であります私はステップ1で立ち往生してきました:私のPHP関数は、ファイル入力からデータを取得することができません、それはajaxのようですこの入力フィールドに関する情報を送信しません。
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(); と var contactData = new FormData(contactForm); – Rahi

+0

私は今、「違法呼び出し」を取得しています – eloism

関連する問題