【问题标题】:Disables all dates in datepicker where id =$id禁用日期选择器中 id =$id 的所有日期
【发布时间】:2016-12-18 02:32:10
【问题描述】:

你好,我首先有这个表格: agregareserva.php:

    <form action="GUImostrarcalendario.php" method="post" name="a">
    <select  type="text" id="id_habitacion"  name="id_habitacion" />
    <option value"1">ID 1</option>
    <option value="2">ID 2</option></select>
    <input type="submit" name="a"  value="Ver"/>
    </form>

在 GUImostrarcalendario.php 我有:

<?php
    include "controlreservas/conexion.php";
    $id_habitacion=$_POST["id_habitacion"];
    $sql1="SELECT llegada,salida,id_reserva FROM reservas 
    where id_habitacion ='$id_habitacion'";
    $query = $con->query($sql1);
    ?>
    <?php if($query->num_rows>0):?>
    <?php while ($r=$query->fetch_array()):?>
    <?php

    $begin = new DateTime( $r["llegada"] );
    $end = new DateTime( $r["salida"] );
    $end = $end->modify( '+1 day' ); 
    $interval = new DateInterval('P1D');
    $daterange = new DatePeriod($begin, $interval ,$end);
    $dates_ar = [];
    foreach ($daterange as $date) {
        $dates_ar[] = $date->format("Y-m-d");
    }
    $disabled_dates = '"' . implode('", "', $dates_ar) .'"';
    ?>
    <script>
    $(function() {
    var disabledDays = [<?php echo $disabled_dates; ?>];
    var date = new Date();
    jQuery(document).ready(function() { 
        $( "#datepicker9").datepicker({ 
            dateFormat: 'Y-m-d',
            beforeShowDay: function(date) {
                var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
                for (i = 0; i < disabledDays.length; i++) {
                    if($.inArray(y + '-' + (m+1) + '-' + d,disabledDays) != -1) {
                        //return [false];
                        return [true, 'ui-state-active', ''];
                    }
                }
                return [true];

            }
        });
    });
    });

    </script>

    <?php endwhile;?>
    <?php else:?>
    <?php endif;?>
    <input type="text" id="datepicker9" name ="datepicker9"/>

当在输入选择中选择 id_habitacion (id room) 时,此代码用于在 datepicker 中显示预订(预订)中的所有日期。

此代码有效,但仅在日期选择器中显示数据库中的第一条记录,例如 id_habitacion= 1 的表:

我是这个 ID 的所有预订日期

我的代码导致日期选择器:

只显示一个预订日期

最后我需要日期选择器在我显示的表格中显示所有日期。

谢谢。

【问题讨论】:

  • .....code javascript .. ... 呃,您的代码中根本没有 javascript - 实际上,该代码看起来不完整,并且根本没有迹象表明该代码如何影响呈现的网页
  • 请显示预期的 html 样本。真的不清楚你想要完成什么。在while循环中一遍又一遍地生成相同的javascript并且不生成任何关联的html也是没有意义的
  • 您还在 $(function() { 中运行 jQuery(document).ready(function() {,这是多余的,因为 $(function() {jQuery(document).ready(function() { 完全相同 - 所以文档已经准备好,不需要再次准备好
  • 简而言之,损坏的代码并不能很好地替代对这个 UI 的外观和功能的正确解释
  • 所以看来您只需要将禁用的日期传递给一个日期选择器,然后认为 php 只创建一个日期数组,您可以将该 final 数组 传递给datepicker 使用var disabledDays =&lt;?php echo json_encode($date_arr)?&gt;,您也不需要手动implode() 数组。但这超出了@JaromandaX 向您展示的循环范围

标签: javascript php jquery datepicker


【解决方案1】:

您的代码当前创建多个实例

`$( "#datepicker9").datepicker({`

每个日期范围一个。您需要将代码更改为仅执行一次 - 因此,在 while 循环之外

这也需要在 wile 循环之外定义 $date_ar

另外,您不必要地使用连续的 php 代码片段

代码应该是这样的

<?php
    include "controlreservas/conexion.php";
    $id_habitacion=$_POST["id_habitacion"];
    $sql1="SELECT llegada,salida,id_reserva FROM reservas where id_habitacion ='$id_habitacion'";
    $query = $con->query($sql1);
    $dates_ar = [];
    if($query->num_rows>0) {
        while ($r=$query->fetch_array()) {
            $begin = new DateTime( $r["llegada"] );
            $end = new DateTime( $r["salida"] );
            $end = $end->modify( '+1 day' ); 
            $interval = new DateInterval('P1D');
            $daterange = new DatePeriod($begin, $interval ,$end);
            foreach ($daterange as $date) {
                $dates_ar[] = $date->format("Y-m-d");
            }
        }
        ?>
        <script>
            $(function() {
                var disabledDays = <?php echo json_encode($date_arr)?>;
                var date = new Date();
                $( "#datepicker9").datepicker({ 
                    dateFormat: 'Y-m-d',
                    beforeShowDay: function(date) {
                        var m = date.getMonth() + 1, 
                            d = date.getDate(), 
                            y = date.getFullYear(),
                            strdate = [y,m,d].join('-');
                        if (disabledDays.indexOf(strdate) == -1) {
                            return [true, 'ui-state-active', ''];
                        }
                        return [false];
                    }
                });
            });
        </script>
        <?php
    }
?>
<input type="text" id="datepicker9" name ="datepicker9"/>

这包括@charlietfl 关于不使用 implode 而是使用

的精彩观点
var disabledDays = <?php echo json_encode($date_arr)?>;

改为

注意,我使用的是“C”编码风格

if() {
    while() {
    }
}

而不是您使用的替代样式

if():
    while():
    endwhile;
else:
endif;

另外,没有else 阻止,因为无论如何都无事可做

【讨论】:

  • edit : by $dates_ar) 我编辑了这个,我改变了:return [true, 'ui-state-active', ''];通过返回 [true, '', ''];它非常完美,我尝试了 4 天,谢谢谢谢:D:D 和@charlietfl ty:D
  • 你知道为什么不能禁用 2017 年的日期吗?我添加了 2017 年的行,这个日期没有被禁用
  • 在浏览器中查看源代码——看看var disabledDays中的数据看起来是否正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 2014-11-10
  • 1970-01-01
相关资源
最近更新 更多