2012-02-03 92 views
0

我目前正在爲學校招生開發一個簡單的學生日程安排應用程序。我爲學生制定了兩張學科課程表和預留科目表。對於時間表主題1.科目代碼與Pk sched_id和預留科目代碼FK subid,日,實驗室,講座時間,實驗室時間。當用戶從計劃中選擇主題時,它將插入到reservsub。我需要檢查每個選定主題的日/實驗時間/實驗室時間衝突的功能。例如:檢查時間/日期衝突php

用戶選擇主題與TTH上午9:00 - 至11:00每天lectime 而在reservetable它具有周四上午10:30 - 12:30一天lectime

如何建立一個腳本和/或功能,會警告用戶,它在PHP中有時間衝突?

預先感謝您。

這裏顯示的代碼在主題選擇tblreserv將驗證該數據的已保存的時間表和選擇

$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']; 
              } 

,或者它有一個時間衝突

$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

具體的答案,這真的取決於你使用的是什麼類型的數據庫,以及是否你想要做的PHP或數據庫中的此驗證。我會傾向於在數據庫上使用觸發器來檢查任何插入的重疊時間,這樣,如果最終有多個接口插入或更新這些記錄(例如,前端應用程序和Web服務)不需要重新編寫邏輯,並且可以讓數據庫負責維護完整性。當觸發器拋出異常時,您的PHP可以捕獲這些特定插入/更新(您正在使用PDO?)拋出的異常。

如果您可以添加更多關於您正在使用的數據庫的信息,以及關於您的表結構(受影響表格及其數據類型的所有字段等)的更多信息,那麼您可以獲得關於觸發器的更多具體答案需要看。

我剛纔提出了一個類似的問題,我剛剛收到一個很好的答案(https://stackoverflow.com/a/8182800/1053722),這個要求。這適用於使用postgresql的情況。

+0

我認爲PDO將是一條冒險的路線,開創性永遠是產生提高代碼效率機會的最佳方法! – 2012-02-03 05:21:07

+0

即時通訊使用wamp5 mysql數據庫和抱歉我缺乏信息。是的,當用戶從日程表中選擇數據時,我使用數據庫來檢查時間衝突。 謝謝你的回覆 – nobito 2012-02-03 05:27:20

+0

對不起,先生我不能理解什麼PDO的意思,因爲即時通訊初學者在PHP希望你能明白 – nobito 2012-02-03 05:29:47