检查时间/日期冲突php


Check for Time/Date Conflict php

我目前正在为学校招生开发一个简单的学生时间表应用程序。我为学生创建了两个科目表和保留科目表。时间表主题1。具有Pk sched_id的主题代码,对于保留主题代码FK subid,Day,labday,lecturetime,labtime。当用户从日程表中选择主题时,它将插入到reservsub。我需要为所选的每个主题检查一天/实验室时间/实验室时间冲突的功能。例如:

用户选择主题,时间为当天上午9:00至上午11:00,并选择时间在可预订的情况下,它有周四上午10:30至下午12:30的时间,并选择

如何构建一个脚本和/或函数来警告用户php中存在时间冲突?

提前谢谢。

这是显示时间表并选择的代码

$sql = mysql_query("SELECT * FROM tblsubjecschedule  where Sem='".$_SESSION['sem']."' and Schoolyear='".$_SESSION['Sy']."' order by Subject")or die(mysql_error());
        $i=0;
        $b =1;  
    while($row=mysql_fetch_assoc($sql) ){ 
                        echo "<tr ><td align=' '><input id='send' name='reserv[$i]' type='image' src='images/Select.gif' onclick='addRow('myTable')' /> </td>
                        <td align=' '>".$row['Subject']."<input type='hidden' name='subj[$i]' value=".$row['Subject']."><input type='hidden' name='control[$i]' value=".$row['sched_id']."></td>
                          <td align=' '>".$row['section']."  </td>
                        <td align=' '>".$row['Lec']."-".$row['Lab']."  </td>
                        <td align=' '>".$row['Descriptive']." </td>
                        <td align=' '>".$row['Day']."<br/>".$row['Labday']." </td>
                        <td align=' '>".$row['LecTime']."<br/>".$row['LabTime']."  </td>
                        <td align=' '>".$row['Room']."<br/>".$row['Labroom']." </td>
                        <td align=' '>".$row['capacity']." </td>
                        <td >".$row['Slot']." </td>
                        </tr>";
        $i++;

                        }

    if (isset($_POST['reserv'])){
            if(!empty($_POST['reserv'])){
                $a = current(array_keys($_POST['reserv']));
                                $control=$_POST['control'][$a];

                                        }
                        }
$sql = mysql_query("SELECT * FROM tblsubjecschedule  where sched_id='".$control."' and Sem='".$_SESSION['sem']."' and Schoolyear='".$_SESSION['Sy']."'");
                                            while($row=mysql_fetch_assoc($sql) ){
                                                    $cont=$row['sched_id'];
                                                    $sub=$row['Subject'];
                                                    $sec=$row['section'];
                                                    $lecture=$row['Lec'];
                                                    $laboratory=$row['Lab'];
                                                    $day=$row['Day'];
                                                    $daylab=$row['Labday'];
                                                    $lectime=$row['LecTime'];
                                                    $ltime=$row['LabTime'];
                                                    $room=$row['Room'];
                                                    $roomlab=$row['Labroom'];
                                                    $slot=$row['Slot'];
                                                    $caps=$row['capacity'];
                                            } 

当选择主题时,tblreserv将验证数据是否已保存或是否存在时间冲突

    $verify2=mysql_query("Select * from tblsubjectreserv where stud_id='".$maxid."' and subject='".$sub."'")or die(mysql_error());                   
                        $ver=mysql_num_rows($verify2);
                            if($ver!=0){
                            echo '<script language="javascript">alert("This Subject already exists.");</script>';
                            }
                                else{ 

      $insert2=mysql_query("insert into tblsubjectreserv (sublink,stud_id,subject,section,Unitlec,Unitlab,timelec,timelab,daylec,Daylab,roomlec,roomlab,Sem,schoolyear)values('".$control."','".$maxid."','".$sub."','".$sec."','".$lecture."','".$laboratory."','".$lectime."','".$ltime."','".$day."','".$daylab."','".$room."','".$roomlab."','".$sem."','".$_SESSION['Sy']."')")or die(mysql_error());

}

但我不知道如何验证日期/时间冲突。我只是个初学者,请帮帮我。

提前感谢

这个问题的具体答案实际上取决于您使用的数据库类型,以及您是想在PHP中还是在数据库中进行验证。我倾向于使用数据库上的触发器来检查任何插入的重叠时间,这样,如果你最终有多个接口来插入或更新这些记录(例如前端应用程序和web服务),那么你就不需要重写逻辑,你可以让数据库负责维护完整性。当触发器抛出异常时,您的PHP可以捕获在这些特定插入/更新(您使用的是PDO?)上抛出的异常。

如果你可以添加更多关于你正在使用的数据库的信息,以及关于你的表结构(受影响表上的所有字段及其数据类型等)的信息,那么你就可以得到关于触发器外观的更具体的答案。

不久前,我提出了一个类似的问题,得到了很好的回答(https://stackoverflow.com/a/8182800/1053722)。如果您正在使用postgresql,这一点适用。