检查时间/日期冲突php

时间:2012-02-03 04:38:48

标签: php

我目前正在为学校招生开发一个简单的学生安排应用程序。我为学生创建了两个主题表和预约主题表。对于计划主题1.主题代码与Pk sched_id和保留主题代码FK subid,日,实验日,讲座时间,实验室时间。当用户从计划中选择主题时,它将插入到reservsub。我需要检查已选择的每个主题的日/实验时间/实验室冲突的功能。例如:

用户选择TTh主题为上午9:00至上午11:00和lectime 在可预订的情况下,它有周四上午10:30 - 下午12:30和lectime

如何构建一个脚本和/或函数来警告用户它在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());



}

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

提前谢谢

1 个答案:

答案 0 :(得分:0)

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

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

我刚才提出了一个与此要求类似的问题,我收到了一个很好的答案(https://stackoverflow.com/a/8182800/1053722)。如果您使用的是postgresql,则适用。