我目前正在为学校招生开发一个简单的学生安排应用程序。我为学生创建了两个主题表和预约主题表。对于计划主题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());
}
但我不知道如何验证日/时间冲突。 我只是一个初学者,请帮助我。
提前谢谢
答案 0 :(得分:0)
具体答案实际上取决于您使用的数据库类型以及是否要在PHP或数据库中进行此验证。我倾向于在数据库上使用触发器检查任何插入的重叠时间,这样,如果您最终有多个接口来插入或更新这些记录(例如前端应用程序和Web服务),那么你就不要需要重新编写逻辑,您可以让数据库负责维护完整性。然后,当触发器抛出异常时,您的PHP可以捕获在这些特定插入/更新(您正在使用PDO?)上抛出的异常。
如果您可以添加有关您正在使用的数据库的更多信息,还有关于表结构的更多信息(受影响的表上的所有字段及其数据类型等),那么您可以获得有关触发器需求的更具体的答案看。
我刚才提出了一个与此要求类似的问题,我收到了一个很好的答案(https://stackoverflow.com/a/8182800/1053722)。如果您使用的是postgresql,则适用。