【发布时间】:2017-01-10 21:30:53
【问题描述】:
我有一个联系表单,通过电子邮件将提交的联系信息发送给我自己,但有时我收到一个空的 $_POST 数组,这导致我收到一封空的电子邮件。我使用验证器 JavaScript 文件来确保输入的字段不为空,并且我收到空电子邮件的唯一方法是让 $_POST 为空。我包含了包含表单、JavaScript 文件和 PHP 文件的代码。
我的表格:
<div class="row contact-wrap">
<div id="error-message" style="display: none;" ><p>ERROR</p></div>
<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php" data-toggle="validator" role="form">
<div class="col-sm-5 col-sm-offset-1">
<div class="form-group">
<label for="inputname" class="control-label">NAME</label>
<input type="text" name="name" id="inputname" class="form-control" data-error="Name required!" required>
</div>
<div class="form-group">
<label for="inputemail" class="control-label">EMAIL</label>
<input type="email" name="email" id="inputemail" class="form-control" data-error="Email required!" required>
</div>
</div>
<div class="col-sm-5">
<div class="form-group">
<label for="inputsubject" class="control-label">SUBJECT</label>
<input type="text" name="subject" id="inputsubject" class="form-control" data-error="Subject required!" required>
</div>
<div class="form-group">
<label for="inputmessage" class="control-label">MESSAGE</label>
<textarea name="message" id="inputmessage" class="form-control" rows="8" data-error="Message required!" required></textarea>
</div>
<div class="form-group">
<button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">SUBMIT</button>
</div>
</div>
</form>
</div>
<script src="js/main.js"></script>
<script src="js/validator.min.js"></script>
main.js JavaScript 文件来验证我的字段:
jQuery(function($) {'use strict',
var form = $('#main-contact-form')
var message = $('#error-message')
form.validator().on('submit', function (e) {
if (e.isDefaultPrevented()) {
message.fadeIn();
} else {
e.preventDefault();
$.ajax({
type: "POST",
url: $(this).attr('action'),
data: form.serialize(),
beforeSend: function(){
form.prepend(
message
.html('<p>Sending...</p>')
.fadeIn()
);
}
}).done(function(data){
message.html('<p>' + data.message + '</p>').delay(2000).fadeOut();
form.delay(2000).fadeOut();
console.log("DONE");
});
}
})
});
sendmail.php 文件我用来向自己发送表单数据:
<?php
// configure
$from = $_POST['email'];
$sendTo = 'my@email.com';
$fields = array('name' => 'Name', 'email' => 'Email', 'subject' => 'Subject', 'message' => 'Message');
try
{
$emailText = "\n=============================\n";
foreach ($_POST as $key => $value) {
if (isset($fields[$key])) {
$emailText .= "$fields[$key]: $value\n";
}
}
mail($sendTo, $subject, $emailText, "From: " . $from);
$responseArray = array('type' => 'success', 'message' => $okMessage);
}
catch (\Exception $e)
{
$responseArray = array('type' => 'danger', 'message' => $errorMessage);
}
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$encoded = json_encode($responseArray);
header('Content-Type: application/json');
echo $encoded;
}
else {
echo $responseArray['message'];
}
【问题讨论】:
-
您是在发送这些消息,还是它们似乎是随机发生的?
-
我随机得到空消息,也就是说$_POST是空的。
-
尝试使用 PHP 验证消息。用户可以删除您所做的验证或绕过它。 PHP 会让你抓住它。
-
客户端验证是改善用户体验的好方法,但它不能替代服务器端验证。双方应始终进行验证。
-
我很确定问题不在于用户没有输入任何数据,因为即使字段为空,我仍然会在收到的电子邮件中收到一些内容。问题是 $_POST 为空。
标签: javascript php forms post