在JQuery日期选择器上从MySQL数据库禁用日期

时间:2019-04-08 20:47:22

标签: javascript php

我有一个日期预订表,其中包含两个输入字段:开始日期选择器和结束日期选择器。我正在尝试使用选择查询禁用已预订的日期并从MySQL数据库中提取日期。查询结果存储在数组中。每次用户提交表单时,不应允许下一个用户预订上一个用户已经预订的相同日期。最大的问题是我的脚本出于某种未知原因而只是禁用了数据库中最后插入的日期范围。我的目标是禁用存储在数组中的所有先前预订的日期。我已经尝试过将查询结果分配给foreach循环内的数组$ datesBooked [] = $ row2 ['dateRange'];但是有了这个主意,所有日期都不会被禁用。

 <?php
//My php script 
 $statement1 = $pdo->query("SELECT dateRange FROM bookings");
 $statement1->execute();

  $datesBooked = [];


    foreach($statement1 as $row2){
        $datesBooked =  $row2['dateRange'];
                //print_r($datesBooked);        
    }

?>

$(document).ready(function(){
//My javascript
   $('#dateStart').datepicker({
        dateFormat: "yy-mm-dd",
        minDate: new Date(),
        beforeShowDay: function(date){
            var enableDays1 =  <?php echo json_encode($datesBooked);?>;
            var formattedDate = jQuery.datepicker.formatDate("yy-mm-dd", date);
            if(enableDays1.indexOf(formattedDate)==-1){ 

            return[true,'markHoliday2'];
            }else{
                return[false];

            }
        },


 });

 $('#dateEnd').datepicker({
        dateFormat: "yy-mm-dd",
        minDate: new Date(),
        beforeShowDay: function(date){
            var enableDays1 =  <?php echo json_encode($datesBooked);?>;
            var day = date.getDay();
            var formattedDate = jQuery.datepicker.formatDate("yy-mm-dd", date);
            if(enableDays1.indexOf(formattedDate)==-1){ 

            return[true,'markHoliday2'];

            }else{

            return[false];  

            }
        },


 });

 });

1 个答案:

答案 0 :(得分:0)

这是因为当您在代码中向下使用$datesBooked时,foreach循环已完成。因此,您只剩下最后一个值-不管该值是最后一次运行循环的时间,因为那是最后一次将值分配给该变量的时间。每次循环运行时,您都会用全新的值覆盖$datesBooked的值。

可能您打算向$ datesBooked数组中添加一个新项目,而不是覆盖整个变量?在这种情况下,您需要编写

$datesBooked[] =  $row2['dateRange'];

[]表示它在数组中添加了一个新项目。