PHP表单无法正常工作
问题描述:
我在我的网站上有一个PHP表单,并设法让它工作。问题是,它发回我的HTML文件,发生错误。我检查了邮件中的消息,他们通过罚款。PHP表单无法正常工作
我想这可能是因为在控制台中使用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 protected]';
$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";
}
}
?>
答
$data
没有在您的示例代码中定义和你传递的是作为第二个参数,第二个参数应该是一个主题行,不确定是否在页面的前面设置了它,而您刚刚没有进入在这里包含它?
你可以只用像一个占位符测试:
$data = 'My subject line';
答
有几件事情错了你的脚本。
你两次调用邮件功能,在日志中所得到的错误是从您对mail
与未定义的变量作为第二个参数和不正确的第三个参数类型的第一个电话:
mail('emails.contactus', $data , function($message) use ($toEmail, ...)
{
$message->to($toEmail, $toName);
$message->from($fromEmail, $fromName);
$message->subject($subject);
});
由于这个错误仅仅是一个警告,脚本将继续,并通过第二个电话发送邮件,你必须mail()
:
if(mail($toEmail, $subject, $themessage, $headers))
我怀疑你想删除第一mail()
呼叫COMPLE它看起来应该是一个其他函数的调用,它恰好也被称为邮件(或者你没有改变它的名字到正确的名称)
什么是错误? –
我不确定为什么它会在邮件通过时抛出错误。但它回来了,并在AJAX行if(response ==“success”){它不会成功返回,因此显示在网页上尝试失败, – Sam
[您是否观看过浏览器的开发人员工具中的AJAX请求/响应?你有没有在项目中包含jQuery库?是否有任何错误报告?你是否在网络服务器上运行这个服务器?](http://jayblanchard.net/basics_of_jquery_ajax.html) –