jQuery Ajax表单发布到PHP空白信息

时间:2014-01-21 08:46:26

标签: php ajax json jquery

我正在使用以下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;

6 个答案:

答案 0 :(得分:1)

  1. 首先,您应该在表单中添加一些CAPTCHA

  2. 确保您的验证正常运作

  3. 在您的PHP代码中,您应该添加一些条件,无论数据是否已发布

    if(count($_POST)){   // or if(isset($_POST['sub'])) //  some parameter
      // all code in between
    }
    
  4. 在服务器端代码中添加一些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))
{

}
相关问题