我目前正在为学校招生开发一个简单的学生时间表应用程序。我为学生创建了两个科目表和保留科目表。时间表主题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,这一点适用。