为了账号安全,请及时绑定邮箱和手机立即绑定

我的日期拾取器系统有问题(禁用日期)

我的日期拾取器系统有问题(禁用日期)

PHP
呼唤远方 2022-08-19 15:33:42
我有一个用于我的预订系统的日期选择器,但它不适用于1示例。我有2个日期供员工填写。如果我保存入住日期(月/日/年)01/01/2020,而退房日期为01/05/2020。然后,如果我想编辑预订数据。我无法将退房日期更改为01/03/2020,因为1到5现在是禁用日期。我的问题是,如果有人知道如何处理这个问题。也许我需要为另一个系统编写代码来处理禁用的日期。但我想知道是否有人知道如何只用枣椰枣机做到这一点。我更喜欢这样。我使用flatPickr作为Jquery的日期拾取者。我使用PHP从数据库中获取禁用的日期,并将其作为数组加载到日期选取器的禁用日期函数中。让我知道你的想法是什么,如果你有提示和提示,你也可以回答我。感谢您抽出宝贵时间接受采访代码<div class="form-group row"><label for="date" class="col-4 col-form-label">Check in</label><div class="col-8"><input id='from1' type='text' name='dateFrom1' data-date="" class='form-control datepickerChange' placeholder="Open date-picker" autocomplete="off"  /></div></div><div class="form-group row"><label for="date" class="col-4 col-form-label">Check out</label><div class="col-8"><input id='to1' type='text' name='dateTo1' data-date="" class='form-control datepickerChange' placeholder="Open date-picker" autocomplete="off"  /></div></div>Datepicker code jquery.来自数据库和代码的日期,在2个日期之间取一整天,并放置在具有可变$strBlockA disable[]函数中 $('#from1').flatpickr({     onChange: function(selectedDates, dateStr, instance) {       endPicker.set('minDate', selectedDates[0]);     },     allowInput: true,     dateFormat: "m/d/yy",     disable: [<?php echo implode(',',array_unique(explode(',', $strBlockA))); ?>],   });   endPicker = flatpickr("#to1", {   allowInput: true,   dateFormat: "m/d/yy",   disable: [<?php echo implode(',',array_unique(explode(',', $strBlockA))); ?>],   });从数据库中获取日期并获取中间所有日期的代码  //Camping Block A     $sql = "SELECT dateFrom,dateTo from campinginformation WHERE dateFrom IS NOT NULL AND dateTo IS NOT NULL AND dateFrom != '' AND dateTo != '' AND chooseCamping = 'Caravan of camper (kleine plaats)'";     $statement = $connect->prepare($sql);     $success = $statement->execute();
查看完整描述

3 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

这就是我要做的。我会尝试解释,因为我不知道你的完整数据库设置。


您在此处的查询是从系统中选取所有保留的日期。


$sql = "SELECT dateFrom,dateTo from campinginformation WHERE dateFrom IS NOT NULL AND dateTo IS NOT NULL AND dateFrom != '' AND dateTo != '' AND chooseCamping = 'Caravan of camper (kleine plaats)'";

我假设每行也有一个ID?


您应从此查询中排除当前预订(正在编辑的预订)的 ID,这将释放可用的日期。


所以像这样:


$thisReservation = 0; //get the reservation ID of the one being edited


$sql = "SELECT dateFrom,dateTo from campinginformation WHERE dateFrom IS NOT NULL AND dateTo IS NOT NULL AND dateFrom != '' AND dateTo != '' AND chooseCamping = 'Caravan of camper (kleine plaats)' AND ReservationID !== $thisReservation";

希望这有帮助。


查看完整回答
反对 回复 2022-08-19
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

对于第一个问题,您只需在查询中添加另一个条件,以便从搜索中排除当前预订,如下所示:where


 ... and reservationID != {$currentReservationID}

然后,您只会查看其他预订,这是您在编辑一个预订时所需要的。


对于后一个问题,您当前是否有两个日期字段,一个签入和一个签出日期?如果是这样,解决此问题的最简单方法是使用范围日历功能来使用一个日期范围选取器,而不是两个日期选取器,这似乎不允许在范围内禁用日期。


如果你这样做,你唯一需要改变的就是,而不是大意如下:


$startDate = $_POST['startDate'];

$endDate = $_POST['endDate'];

你会使用:


$dateRange = $_POST['dateRange'];

$dateRange = explode(" to ", $dateRange);

$startDate = $dateRange[0];

$endDate = $dateRange[1];

但是,如果由于某种原因这对您不起作用,我相信下一个最佳选择是在插入其保留之前执行简单的SQL查询,以验证日期是否可用。


您可以在插入查询之前执行类似操作:


select reservationID from campinginformation

where

  dateFrom between "{$startingDate}" and "{$endingDate}"

  or dateTo between "{$startingDate}" and "{$endingDate}"

如果这返回任何结果,请不要插入其保留项,并提供失败消息。


查看完整回答
反对 回复 2022-08-19
?
BIG阳

TA贡献1859条经验 获得超6个赞

我不了解PHP,但希望这个答案能给你一些提示/确切的答案。您的查询会根据注册ID为您提供先前保存的入住和退房日期,一旦您知道入住和退房日期,您就可以通过以下代码实现您想要的。希望它有帮助..通过使用下面的代码,以前选择的入住和退房日期被禁用以选择。

例如,如果您选择01/02/2020到01/05/2020,那么这些持续时间将被阻止进行预订。但您可以选择01 / 01 / 2020到01 / 06 / 2020。


$('#from1').flatpickr({

  

allowInput: true,

  dateFormat: "m/d/yy",

disable: [

    {

        from: "01/05/2020",

        to: "01/08/2020"

    }

], //your fetched checkin date

});


endPicker = flatpickr("#to1", {

  allowInput: true,

  dateFormat: "m/d/yy",

disable: [

    {

        from: "01/05/2020",

        to: "01/08/2020"

    }

], //your fetched checkin date


});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script src="https://unpkg.com/flatpickr@4.6.3/dist/flatpickr.js"></script>

<link href="https://unpkg.com/flatpickr@4.6.3/dist/flatpickr.min.css" rel="stylesheet" />

<div class="form-group row">

  <label for="date" class="col-4 col-form-label">Check in</label>

  <div class="col-8">

    <input id='from1' type='text' name='dateFrom1' data-date="" class='form-control datepickerChange' placeholder="Open date-picker" autocomplete="off" />

  </div>

</div>

<div class="form-group row">

  <label for="date" class="col-4 col-form-label">Check out</label>

  <div class="col-8">

    <input id='to1' type='text' name='dateTo1' data-date="" class='form-control datepickerChange' placeholder="Open date-picker" autocomplete="off" />

  </div>

</div>


在下面,只允许选择以前选择的日期。例如,如果您选择01 / 02 / 2020到01 / 05 / 2020,那么您只能在日期之间进行选择


$('#from1').flatpickr({

  onChange: function(selectedDates, dateStr, instance) {

    endPicker.set('minDate', new Date("01/05/2020"));

  },

  minDate: new Date("01/05/2020"), //your fetched checkin date

  allowInput: true,

  dateFormat: "m/d/yy",

  maxDate: new Date("01/08/2020"), //your fetched checkout date


});


endPicker = flatpickr("#to1", {

  allowInput: true,

  dateFormat: "m/d/yy",

  minDate: new Date("01/05/2020"), //your fetched checkin date (may be same /may not) also assume checkin date is 01/04/2020

  maxDate: new Date("01/08/2020"), //your fetched checkout date


});



flatpickr("#to2", {

  allowInput: true,

  mode: 'range',

  dateFormat: "m/d/yy",

  disable: [{

    from: "01/05/2020",

    to: "01/08/2020"

  }],

});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script src="https://unpkg.com/flatpickr@4.6.3/dist/flatpickr.js"></script>

<link href="https://unpkg.com/flatpickr@4.6.3/dist/flatpickr.min.css" rel="stylesheet" />

<div class="form-group row">

  <label for="date" class="col-4 col-form-label">Check in</label>

  <div class="col-8">

    <input id='from1' type='text' name='dateFrom1' data-date="" class='form-control datepickerChange' placeholder="Open date-picker" autocomplete="off" />

  </div>

</div>

<div class="form-group row">

  <label for="date" class="col-4 col-form-label">Check out</label>

  <div class="col-8">

    <input id='to1' type='text' name='dateTo1' data-date="" class='form-control datepickerChange' placeholder="Open date-picker" autocomplete="off" />

  </div>

  <div class="form-group row">

    <label for="date" class="col-4 col-form-label">Range mode check in Check in and Check out</label>

    <div class="col-8">

      <input id='to2' type='text' name='dateTo1' data-date="" class='form-control datepickerChange' placeholder="Open date-picker" autocomplete="off" />

    </div>

  </div>


当您在平板吸盘中使用范围模式时,它不允许您选择超出块日期。正如我在最后一个代码中添加的那样,您可以比较范围日期选择器

查看完整回答
反对 回复 2022-08-19
  • 3 回答
  • 0 关注
  • 240 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号