我正在使用以下jQuery和PHP,其中人们填写表单,jQuery然后遍历字段,验证有内容,如果所有内容都正确填写,它将发送给PHP,然后格式化电子邮件并发送。
问题在于,当我正在试用它时,它运行正常,但我收到了包含Name:
和Email:
等行标题的电子邮件,但用户输入内容为空白。
搜索引擎是否有可能抓取网站并遇到PHP文件,这就是它发送空白数据的原因?
的jQuery
$('body').on('click','.sendmail',function(){
var arr = [];
$('.form input').each(function(index, element) {
var i = $(this).prop('id');
var v = $(this).val();
var obj = {key: i, val: v};
arr.push(obj);
});
arr.push({key:"subject", val: $('.subject .active').text()});
arr.push({key:"comments", val: $('#comments').val()});
var param = {};
$.each(arr, function() {
param[this.key] = this.val;
});
var sValid;
var isValid = !$('#name, #company, #tel, #comments').filter(function() {return !this.value;}).length;
var eValid = validateEmail($('#email').val());
if ($('.subject span').hasClass("active")) {
sValid = true;
} else {
sValid = false;
}
if (isValid && sValid && eValid){
$.ajax({
type: "POST",
url: "/assets/inc/contact.php",
data: param,
dataType: "json",
success: function(data) {
$('.form span').removeClass('active');
$('.form-response').removeClass('green');
$('.form-response').removeClass('red');
if (data.sent == 1){
$('.form-response h1').text('Form is sent! We\'ll be in touch soon');
$('.form-response').addClass('green');
} else {
$('.form-response h1').text('Form not sent! Please check all fields are filled in.');
$('.form-response').addClass('red');
}
$('.form-response').slideDown().delay(3000).slideUp();
$('.form input, .form textarea').val('');
$('.form label').css({'opacity':1, 'display':'block'});
$('.form span').removeClass('active');
}
});
} else {
$('.form-response h1').text('Form not sent! Please check all fields are filled in.');
$('.form-response').addClass('red');
$('.form-response').slideDown().delay(3000).slideUp();
}
});
PHP
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$company = $_POST['company'];
$tel = $_POST['tel'];
$subject = $_POST['subject'];
$comments = $_POST['comments'];
$to = 'info@domain.com';
$subject = $subject;
$message = '
Name: '.$name.'<br>
Email: '.$email.'<br>
Company: '.$company.'<br>
Tel: '.$tel.'<br><br><hr><br><br>
Comments: '.$comments.'<br>
';
$headers = 'From: noreply@domain.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$headers .= 'Content-Type: text/html; charset=utf-8';
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
// Additional headers
$headers .= 'From: '.$name.' <'.$email.'>' . "\r\n";
$sent = mail($to, $subject, $message, $headers);
if($sent){
$sent = 1;
} else {
$sent = 0;
}
$post_data = json_encode(array('sent' => $sent));
echo $post_data;
答案 0 :(得分:1)
首先,您应该在表单中添加一些CAPTCHA
。
确保您的验证正常运作
在您的PHP代码中,您应该添加一些条件,无论数据是否已发布
if(count($_POST)){ // or if(isset($_POST['sub'])) // some parameter
// all code in between
}
在服务器端代码中添加一些PHP代码验证。 就像姓名或电子邮件是空的一样,不要发送电子邮件,但会向用户发送错误
答案 1 :(得分:0)
我建议您查看访问日志并比较时间。但我怀疑是这种情况。
我还注意到你没有在服务器端进行任何检查。修复它,你可以看到你是否从jQuery获得空字符串。至少它会指出问题的方向。
答案 2 :(得分:0)
验证码可能更安全,但它提高了大多数用户填写表单的门槛。如果这是一个问题,您可以尝试使用蜜罐策略进行服务器端验证。
您可以通过在表单中添加一个复选框并使用css隐藏它来完成此操作。如果检查,你几乎可以肯定它不是填写表格的人。它对用户来说不那么具有侵入性,因为他们没有遇到比他们想要的更多的领域。
Als查看了您的$_POST
数据。您没有先查看用户的输入。您可以(并且应该)“引导”用户前端的有效数据,但更重要的是应该始终在服务器端对其进行验证。
答案 3 :(得分:0)
我发现直接转到执行上述文件的.php文件会发送文件。我认为它已被抓取或有人直接查看我的代码并检查了PHP文件。
我已经通过使用以下
包装我的PHP来解决这个问题if (!empty($name) and !empty($email) and !empty($company) and !empty($tel) and !empty($subject) and !empty($comments)) {
// my code to send the form
} else {
$post_data = json_encode(array('sent' => 'no'));
echo $post_data;
}
答案 4 :(得分:0)
使用JQuery将数据发送到PHP
if(check_flag == 0){$.post('PHP/common.php?action=newempcontact',
{
name: name,
email: email,
company: company,
tel: tel,
subject: subject,
comment: comment,
},
function(info){
$("#validate_msg").html(info).addClass('validatectrl');
$('html, body').animate({ scrollTop: 0 },'slow');
clear_fields();
});
答案 5 :(得分:0)
之一:
if($_POST)
{
}
2:
header('content-type=text/json');
3
if(mail($to, $subject, $message, $headers))
{
}