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>
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函數來驗證數據和發送郵件:
<?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函數無法從文件輸入中檢索數據,它看起來像ajax不發送關於該輸入字段的信息。
Php返回Undefined index: contact-attachment
。
任何人都可以通過這個指導/幫助我嗎?我現在的代碼有什麼問題?
謝謝您的回答,我固定的,但它仍然給我的錯誤:'未定義指數:非接觸附件' – eloism
替換 var contactD ata = $(contactForm).serialize(); 與 var contactData = new FormData(contactForm); – Rahi
我現在正在「非法調用」 – eloism