Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从数据库中验证开始日期和结束日期,使其不会与时间冲突_Php - Fatal编程技术网

Php 如何从数据库中验证开始日期和结束日期,使其不会与时间冲突

Php 如何从数据库中验证开始日期和结束日期,使其不会与时间冲突,php,Php,目前,我的数据库中有一些数据 我不得不采取一些行动来打发上课时间。后来成为 $Starttimein=$_POST['startTime']; $Endtimein=$_POST['endTime']; $varstart=preg_split('/[\s:\s]+/', $Starttimein); $totvarstart=$varstart[0]*100+ $varstart[1]; $varend=pre

目前,我的数据库中有一些数据

我不得不采取一些行动来打发上课时间。后来成为

        $Starttimein=$_POST['startTime'];
        $Endtimein=$_POST['endTime'];

        $varstart=preg_split('/[\s:\s]+/', $Starttimein);
        $totvarstart=$varstart[0]*100+ $varstart[1];

        $varend=preg_split('/[\s:\s]+/', $Endtimein);
        $totvarend=$varend[0]*100+ $varend[1];

        $sql8="select * from class where sup_id='$idselect' ";
        $result8=mysqli_query($con,$sql8);

        while($row8=mysqli_fetch_assoc($result8))
        {
          $preclasstime=$row8['class_time'];


          $keywords = preg_split('/[\s,\s:\s-\s:\s]+/', $preclasstime);
          $day = $keywords[0];
          $tottimestart = $keywords[1]*100 + $keywords[2];
          $tottimeend = $keywords[3]*100 + $keywords[4];

          if($day==$_POST['csday'])
          {

            if((($totvarstart>= $tottimestart) && ($totvarstart<= $tottimeend)) || (($totvarend>= $tottimestart) && ($totvarend<= $tottimeend)))
            {
                  ?>
                <script type="text/javascript">
                    alert("Time crash");
                </script>
            <?php
            }

            else
            {
              echo "correct";
            }


          }
        }

使用preg_split函数分离日期、开始和结束时间。我希望验证,如果用户选择同一天,它将比较输入的开始和结束时间是否与存储在数据库中的时间崩溃。例如:如果用户选择Mon,10.30-11.30,它将显示一条警告消息,说明无法添加上课时间,因为它与以前的时间冲突。我试过使用if$totvarstart>=$tottimestart&&$totvarstart=$tottimestart&&$totvarend不要将这三个值保存在一列中,不管怎样,以后都必须拆分它们。将它们分为三列:dayofweek、starttime和endtime。对后者使用时间类型,以便可以对其运行比较运算符

有6种方式可以安排一个时间跨度与另一个时间跨度的关系。您可以在数据库中对此进行检查,以仅获取与输入值冲突的行。检查应如下所示:

[...]
WHERE
    dayOfWeek = :dayOfWeek AND
    (
        (:starttime < starttime AND starttime < :endtime) OR
        (:starttime < endtime AND endtime < :endtime) OR
        (starttime < :startime AND :endtime < endtime)
    )
注意::starttime和:endtime是准备好的语句中的绑定变量。根据您的API,您可能需要使用什么?相反


通过这种方式,您不需要阅读整个数据库来检查它们是否重叠。

Hi,谢谢,但我可以知道绑定变量是输入值吗???@初学者是的,绑定变量是您在准备好的语句中的输入值。$sql7=select*from class,其中sup_id='$idselect',上课时间=:$csday和:$csstarttime