【发布时间】:2013-12-19 07:57:09
【问题描述】:
我确定人们以前遇到过这个问题,但我看不出哪里出错了。 (我检查了代码中的 isset() 函数,它看起来不错,但它仍然阻止发送电子邮件)
我已经在 Wordpress 上构建了我的自定义联系表单。所以一个表单调用一个连接到 PHP 文件的 jQuery AJAX 函数。我的 PHP 文件保存在 Wordpress 安装文件夹的根目录中(即在开头) 片段如下
jQuery
$('#contactForm').submit(function (event) {
event.preventDefault();
sendContactForm(); //Call the function
});
function sendContactForm(){
var dataString=$('#contactForm').serializeArray();
$.post("/contact.php", dataString, function(data) {
if(data.status == "1") {
alert('Message successfully sent');
}
else if(data.status=="2") {
alert('Please enter Antispam correctly');
}
else {
alert('Network error. Please try again');
}
},
"json"
);
};
PHP
header('Content-Type: application/json charset=utf-8');
$name = $_POST['name'];
$email = $_POST['email'];
$telephone = $_POST['telephone'];
$choice = $_POST['choice'];
$message = $_POST['message'];
$from = 'abc@mail.com';
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= 'From: ' . $from . "\r\n";
$to = 'myname@gmail.com';
$subject = $name . ' has sent you a message';
$human = $_POST['antispam'];
$body = "<html><body>";
$body.= "Change Request";
$body.= "<table style='border-color: #666;' cellpadding='2'>";
$body.= "<tr style='background: #eee;'><td><b>Name:</b> </td><td>" . $name . "</td></tr>";
$body.= "<tr style='background: #eee;'><td><b>Email:</b> </td><td>" . $email . "</td></tr>";
$body.= "<tr style='background: #eee;'><td><b>Contact:</b> </td><td>" . $telephone . "</td></tr>";
$body.= "<tr style='background: #eee;'><td><b>Service Type:</b> </td><td>" . $choice . "</td></tr>";
$body.= "<tr style='background: #eee;'><td><b>Message:</b> </td><td>" . $message . "</td></tr>";
$body.= "</table>";
$body.= "</body></html>";
if( !empty( $_POST['name']) &&
!empty( $_POST['email']) &&
!empty( $_POST['telephone']) &&
!empty( $_POST['choice']) &&
!empty( $_POST['message']) &&
$human == '4') {
if (mail ($to, $subject, $body, $headers)) {
echo '{"status":"1"}';
} else {
echo '{"status":"0"}';
}
}
else
{
echo '{"status":"2"}';
}
我在网络控制台响应中收到的错误是
通知:未定义索引:/clientdata/apache-www/k/i/mywebsite.com.au/www/contact.php 行 中的名称>3
通知:未定义索引:/clientdata/apache-www/k/i/mywebsite.com.au/www/contact 中的电子邮件。 php 上线 4
通知:未定义索引:电话在 /clientdata/apache-www/k/i/mywebsite .com.au/www/contact.php 上线 5
{“状态”:“2”}
如您所见,我已明确提到每个条目不应为空,并且在填写联系表时也会输入每个条目。它由于某种原因失败,然后进入状态 = 2 的最后一个条件。同样的代码之前在同一个托管服务器上工作。我不确定这是我的代码问题还是托管问题导致无法发送。
我的 HTML 表单也是如此(不确定这是否也有助于调查)
<form class="form" role="form" action="#" id="contactForm" name="contactForm" onsubmit="return false;">
<div class="form-group">
<label>Name</label>
<input type="text" class="form-control" required>
</div>
<div class="form-group">
<label>Email</label>
<input type="email" class="form-control" required>
</div>
<div class="form-group">
<label>Contact</label>
<input type="tel" class="form-control" required>
</div>
<div class="form-group">
<label>Request</label>
<select class="form-control" name="choice">
<option value="0" selected="selected">Choose...</option>
<option value="Basic Package">Basic</option>
<option value="Dynamic Request">Advanced</option>
<option value="Other">Other</option>
</select>
</div>
<div class="form-group">
<label>Message</label>
<textarea class="form-control" rows="6" name="message"></textarea>
</div>
<div class="form-group">
<label>Anti Spam</label>
<input type="text" class="form-control" name="antispam" placeholder="What is 2+ 2?" required>
</div>
<div class="form-group text-center">
<button class="btn btn-success btn-lg" type="submit">Submit</button>
</div>
</form>
有什么想法吗?
【问题讨论】:
-
我并没有表明您实际上是在 HTML 中为输入命名。
标签: php jquery ajax wordpress apache