在页面刷新之前,MySQL对表单日期验证的AJAX调用不会再次工作


AJAX call on form date validation from MySQL wont work again until page refresh

我是AJAX的新手,但能够对MySQL数据库中的现有值进行一些表单验证检查。除了我的 AJAX 日期验证之外,一切正常。它只正确验证一次。如果我刷新页面,它会再次正确验证。我将新的 Date().getTime() 分配给 url,因为我认为这可能是缓存问题,但我仍然有相同的结果。我在同一表单上对数字和电子邮件使用相同的验证类型,它们每次都可以工作而无需刷新页面。这是我的测试表格。数据库中的现有日期是 2013 年 10 月 14 日、15 日、16 日和 17 日。数据库中的日期格式为 0000-00-00 或 2013-10-14 现有数字 1、2、3 和 4。现有电子邮件 you@me.com 且 me@you.com。如果数据库中存在值,我不希望表单过期。这是我的JS代码。

    $(document).ready(function(){
$('#fb-submit-button').attr('disabled','disabled');
var emailok = false;
var numberok = false;
var boxes = $(".fb-item");
var myForm = $("#docContainer"), 
number = $("#item3_number_1"), 
 email = $("#item4_email_1"), 
 numberInfo = $("#numberInfo"), 
 emailInfo = $("#emailInfo");

   //send ajax request to check email
email.blur(function(){
    $.ajax({
        type: "POST",
        data: "email="+$(this).attr("value"),
        url: "../../formcheck_email.php",
        beforeSend: function(){
            emailInfo.html("<font color='blue'>Checking Email...</font>");
        },
        success: function(data){
            if(data == "invalid")
            {
                emailok = false;
                emailInfo.html("<font color='red'>Invalid Email</font>");
            $('#fb-submit-button').attr('disabled','disabled');
            }
            else if(data != "0")
            {
                emailok = false;
                emailInfo.html("<font color='red'>Email Already Exist</font>");            
               $('#fb-submit-button').attr('disabled','disabled');
            }
            else
            {
                emailok = true;
                emailInfo.html("<font color='green'>Email OK</font>");
               $('#fb-submit-button').attr('disabled','');
            }
        }
      });
   });  


    //send ajax request to check number
number.blur(function(){
    $.ajax({
        type: "POST",
        data: "number="+$(this).attr("value"),
        url: "../../formcheck_number.php",
        beforeSend: function(){
            numberInfo.html("<font color='blue'>Checking Number...</font>");
        },
        success: function(data){
             if(data != "0")
            {
                numberok = false;
                numberInfo.html("<font color='red'>Number Already Exist</font>");
               $('#fb-submit-button').attr('disabled','disabled');
            }
            else
            {
                numberok = true;
                numberInfo.html("<font color='green'>Number OK</font>");
               $('#fb-submit-button').attr('disabled','');
            }
        }
       });
    });
    //send ajax request to check date

$('#fb-submit-button').attr('disabled', 'disabled');
       $('.datepicker').datepicker({
      onSelect: function(dateText) {
  $("#item61_date_1").datepicker();    
        post_date = $('.datepicker'),
        dateInfo = $('#dateInfo');
    //send ajax request to check date            
        dateInfo.html('<font color="blue">Checking Date...</font>');
           $.ajax({
                url: '../../formcheck_date.php',
                data: {post_date: $(this).val()},
                type: 'POST',
                success: function(data) {
                    dateok = (data == '0');
                    dateInfo.html('<font color="' + (dateok ? 'green' : 'red') + '">Date ' +
                          (dateok ? 'Available' : 'Already Taken') + '</font>');
                    $('#fb-submit-button').attr('disabled', dateok ? '' : 'disabled');
                }
           });
     }
  });
   });

这是我的 php 数据库连接。

    <?php
    require_once('pdo_connect.php');
    $post_date = $_POST['post_date'];
    $sql= "SELECT post_date FROM validation where post_date='$post_date'";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $msg = $stmt->rowCount();

    if($msg !== false) {
    echo $msg;
    }
    ?>
默认的

mysql日期格式是'YYYY-MM-DD HH:MM:SS'我认为您直接将日期的输入值传递给查询而不更改格式。你可以通过使用

date('Y-m-d',strtotime('10/16/2013'));

或直接使用(对于日期格式,如 10 月 16 日)

select count(*) as datecount 
from your_table  
where date_field = DATE_FORMAT($POST_DATE,"%M %e");

您不能像使用反引号那样使用保留关键字日期进行转义

还有另外两个问题mysql_* 也被弃用 sql 注入

获取日期选择器值的正确方法是$('#datepick_id').datepicker('getDate');