【发布时间】:2017-05-23 23:14:15
【问题描述】:
我的网站上有一个 PHP 表单,并且已成功运行。问题是它会向我的 HTML 文件发回发生错误的信息。我已经检查了 webmail 中的消息,它们都可以通过。
我认为这可能与使用 XAMPP 的控制台中显示的这一行有关:
Warning</b>: mail() expects parameter 3 to be string, object given in
mail('emails.contactus', $data , function($message) use ($toEmail, $toName, $fromEmail, $fromName, $subject)
{
$message->to($toEmail, $toName);
$message->from($fromEmail, $fromName);
$message->subject($subject);
});
我也可以看到这个错误:
Undefined variable: data in
我没有邮件服务器,所以很难在 XAMPP 上进行全面调试。但是使用实时站点,邮件会通过。
HTML:
<div class="col-md-8 contact-form-wrapper">
<div class="alert alert-style-1 information-box-home success-alert">
<div class="alert-icon"><i class="ico-ok"></i></div><!-- end of alert thumb -->
<div class="alert-contents">
<h6 class="alert-title">Success Message</h6>
<p>Thank you for contacting us, you will hear from us soon!</p>
</div><!-- end of alert contents -->
</div><!-- end of alert -->
<div class="alert alert-style-1 information-box-home fail-alert">
<div class="alert-icon"><i class="ico-cancel"></i></div><!-- end of alert thumb -->
<div class="alert-contents">
<h6 class="alert-title">Failure Message</h6>
<p>Your message has not come through please contact for more details</p>
</div><!-- end of alert contents -->
</div><!-- end of alert -->
<form action="contact-form.php" method="POST" class="contact-form">
<ul class="row">
<li class="col-md-6 form-item">
<label for="contact-name"><i class="ico-male"></i></label>
<input type="text" name="contact-name" class="contact-name" id="contact-name" value="Your Name" onblur="if(this.value=='')this.value='Your Name'" onfocus="if(this.value=='Your Name')this.value=''">
</li>
<li class="col-md-6 form-item">
<label for="contact-email"><i class="ico-email"></i></label>
<input type="email" name="contact-email" class="contact-email" id="contact-email" value="Your Email" onblur="if(this.value=='')this.value='Your Email'" onfocus="if(this.value=='Your Email')this.value=''">
</li>
<li class="col-md-12 form-item">
<label for="contact-message"><i class="ico-bubble"></i></label>
<textarea name="contact-message" class="contact-message" id="contact-message" data-placeholder="Your message"></textarea>
</li>
<li class="col-md-12 form-item">
<input type="submit" name="contact-btn" class="contact-btn general-link" id="contact-btn" value="Send Your Message">
</li>
</ul>
</form><!-- end of contact form -->
</div><!-- end of contact form wrapper -->
阿贾克斯:
<!-- Ajax Contact Form -->
jQuery(document).ready(function($){
// send message
var form = $(".contact-form");
$('.fail-alert').hide();
$('.success-alert').hide();
form.on( "submit", function( event ) {
$(".contact-btn").button('loading');
event.preventDefault();
$.ajax({
type: "POST",
url: form.attr( 'action' ),
data: form.serialize(),
success: function( response ) {
console.log(response)
if(response == "success"){
$('.fail-alert').slideUp();
$('.success-alert').slideDown();
}
else{
$('.success-alert').slideUp();
$('.fail-alert').slideDown();
}
console.log( response );
$(".contact-btn").button('reset');
}
});
});
});
PHP:
<?php
if(!isset($_POST['submit'])) {
$fromEmail = strip_tags($_POST['contact-email']);
$fromName = strip_tags($_POST['contact-name']);
$themessage = strip_tags($_POST['contact-message']);
$themessage = $themessage."The Sender Is ( ".$fromName." )" ;
$toEmail = 'email@email.com';
$toName = 'Name';
$subject = 'Enquiry';
mail('emails.contactus', $data , function($message) use ($toEmail, $toName, $fromEmail, $fromName, $subject)
{
$message->to($toEmail, $toName);
$message->from($fromEmail, $fromName);
$message->subject($subject);
});
$headers = 'From:' .$fromName . "\r\n" .
'Reply-To:' .$fromEmail. "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($toEmail, $subject, $themessage, $headers))
{
// Send
echo "success";
}
else{ echo "An error has be occured";
}
}
?>
【问题讨论】:
-
错误是什么?
-
我不确定为什么它在邮件通过时会抛出错误。但它回来了,在 AJAX 行 if(response == "success"){ 它没有作为成功回来,所以在网页上显示了一次不成功的尝试,
-
您应该考虑将您的 php 邮件设置为日志而不是电子邮件,因为您没有设置电子邮件服务器
-
不确定你为什么使用匿名函数作为
mail的第三个参数?mail('emails.contactus', $data , function($message)php.net/manual/en/function.mail.php