首页 > 解决方案 > PHP | 如果语句总是错误的

问题描述

我有一个 if 循环的小问题,我正在建立一个预约区域,指令是:

从 datepicker 和 timepicker 中获取值的变量是:

日期选择器:

$app_to_data = $connessione->real_escape_string($_POST['data']);

时间选择器:

$app_to_orario = $connessione->real_escape_string($_POST['orario']);

当用户选择在周六或周日进行预约时,防止所选日期被确认没有问题:

if(date('w', strtotime($app_to_data)) == 6 || date('w', strtotime($app_to_data)) == 0) {
    ?>
    <script type="text/javascript">
        var errore_appto = "<?php echo $id_pa ?>";
        window.location = "prendi_appto_errore.php?errore_appto=" + errore_appto;
    </script>
<?php
exit;
}

现在问题来了,当我必须启动 if 周期来检查为约会选择的时间段时:

   /*VERIFICA CHE L' APPUNTAMENTO NON VENGA PRESO PRIMA DELLE ORE 11:00*/
    if($app_to_orario < '11:00'){
    ?>
        <script type="text/javascript">
            var errore_appto = "<?php echo $id_pa ?>";
            window.location = "prendi_appto_errore.php?errore_appto=" + errore_appto;
        </script>
    <?php
    exit;
    }

    /*VERIFICA CHE L' APPUNTAMENTO NON VENGA PRESO DOPO LE ORE 13:00*/
    elseif($app_to_orario > '13:00'){
    ?>
        <script type="text/javascript">
            var errore_appto = "<?php echo $id_pa ?>";
            window.location = "prendi_appto_errore.php?errore_appto=" + errore_appto;
        </script>
    <?php
    exit;
    }


    /*VERIFICA CHE L' APPUNTAMENTO NON VENGA PRESO PRIMA DELLE ORE 15:00*/
    elseif($app_to_orario < '15:00'){
    ?>
        <script type="text/javascript">
            var errore_appto = "<?php echo $id_pa ?>";
            window.location = "prendi_appto_errore.php?errore_appto=" + errore_appto;
        </script>
    <?php
    exit;
    }


    /*VERIFICA CHE L' APPUNTAMENTO NON VENGA PRESO DOPO LE ORE 18:00*/
    elseif($app_to_orario > '18:00'){
    ?>
        <script type="text/javascript">
            var errore_appto = "<?php echo $id_pa ?>";
            window.location = "prendi_appto_errore.php?errore_appto=" + errore_appto;
        </script>
    <?php
    exit;
    }

我遇到的问题是,例如,如果用户选择预约 16:00,则选择的时间是正确的,但我总是收到错误消息,因为例如在第二个周期 16:00 中,它大于 13:00即使它在剩余的 3 个控制周期中正确落入,那么我如何执行时间检查以允许在问题中指示的时间段内进行约会,而不会总是遇到错误的结果?

标签: php

解决方案


在您的情况下,$app_to_orario是一个字符串,而不是 DateTime。要与其他日期/时间进行比较,需要先将其转换为 DateTime:

$ato = new DateTime($app_to_orario);

或使用

$ato = new Carbon($app_to_orario);

然后比较时间(与碳):

if($ato->hour<11){
    ...
}

或没有碳:

if(intval($ato->format('H'))<11){
    ...
}

推荐阅读