2013-04-27 23 views
0

我正在爲一個辦公室的考勤管理系統做一個項目,其中也包含了假期管理系統。有一個報告顯示頁面顯示員工缺席/現在的報告。現在,如果特定員工在休假日缺席,並且這些休假日根據他的休假申請確定並存儲在申請休假日期的數據庫中,現在我必須顯示in leave報告而不是absent報告。我創建了一個leave表,其中存儲了關於leave的所有相關信息。這裏是我的leave表..檢索特定表格的所有行值

lid  empname  username nod  sdate  edate  reason action empID 
===  =======  ======== ===  ========== =========== ====== ====== ======= 
1  Maxwell  max  1  2013/04/09 2013/04/09  xam Denied 3 
2  Sukant  suk  1  2013/03/11 2013/03/11  xam Denied 4 
3  Sukant  suk  1  2013/02/20 2013/02/20  xam Accepted 4 
4  Taylor  tay  1  2013/05/23 2013/05/23  xam Accepted 1 
5  Sukant  suk  1  2013/05/23 2013/05/23  xam Accepted 4 

的問題是,我不能在同一時間獲取我的leave表中的所有行。但我必須提取leave表中的所有行,以檢查所有sdateedateaction,以在我的報告頁面中顯示報告in leaveabsent。我寫了下面的代碼,但它只提取第一行或單行leave表。它將在報告顯示頁面中顯示in leave(如果接受)報告,僅顯示正在提取的行。

<?php 
      $leave = mysql_query("SELECT `action` FROM `leave` 
          where uname =('SELECT `username` FROM `users` 
          where `empID` =$user')", $dbCon) 
          or die(mysql_error()); 
      $sql = "SELECT * FROM `office_date` 
      WHERE year='$year' 
      AND month = '$month' ORDER BY odate DESC "; 
      $query = mysql_query($sql, $dbCon); 

      $leave_row = mysql_fetch_array($leave); 

      $i = 1; 
      while ($row2 = mysql_fetch_object($query)){ 

       if(....) 
       { 

        //some code here 

       } 
       else if ($leave_row[7] == "accepted" && $leave_row[4] == $row2->odate) 
       { 

        echo '<tr bgcolor="' . $bgcolor . '"> 
        <td>&nbsp;' . $i . '</td> 
        <td>&nbsp;' . $row2->odate . '</td> 
        <td>&nbsp;</td> 
        <td>&nbsp;</td> 
        <td>&nbsp;</td> 
        <td>&nbsp;</td> 
        <td><font color="red">In leave</font></td> 
       </tr>'; 

       } 
       else { 
        echo '<tr bgcolor="' . $bgcolor . '"> 
        <td>&nbsp;' . $i . '</td> 
        <td>&nbsp;' . $row2->odate . '</td> 
        <td>&nbsp;</td> 
        <td>&nbsp;</td> 
        <td>&nbsp;</td> 
        <td>&nbsp;</td> 
        <td><font color="red">Absent</font></td> 
       </tr>'; 
       } 

       $i++; 

      } 

      ?> 

SQL查詢是SELECT * FROM離開where empID = $user應該是去找我leave表的只有一行?

我的if條件只檢查一行的信息。我知道爲什麼:查詢$ leave = mysql_query(「SELECT * FROM leave where empID = $ user」);只提取一行。我如何獲取所有行,以及代替else if我的代碼的代碼,以便一次獲取或檢查所有行?

回答

0

這是因爲你只取出由第一個查詢行,你需要循環檢索所需的所有行

$leave_row = mysql_fetch_array($leave); 

應該

while($leave_row = mysql_fetch_array($leave)) { .... } 
0

你原來的代碼有

 $leave = mysql_query("SELECT `action` FROM `leave` 
         where uname =('SELECT `username` FROM `users` 
         where `empID` =$user')", $dbCon) 
         or die(mysql_error()); 

一個問題是,您需要刪除subquer中的'標記y,如下所示:

 $leave = mysql_query("SELECT `action` FROM `leave` 
         where uname =(SELECT `username` FROM `users` 
         where `empID` =$user)", $dbCon) 
         or die(mysql_error()); 

假設有效,你可以試試看看會發生什麼?

<?php 
     $leave_query = mysql_query("SELECT `action` FROM `leave` 
         where uname =(SELECT `username` FROM `users` 
         where `empID` =$user)", $dbCon) 
         or die(mysql_error()); 
     $office_date_query = mysql_query("SELECT * FROM `office_date` 
     WHERE year='$year' 
     AND month = '$month' ORDER BY odate DESC", $dbCon) 
         or die(mysql_error()); 

     // Not sure if we want this to be a 1 or a 0... 
     $i = 1; 

     while ($office_date_query_results = mysql_fetch_object($office_date_query)){ 
      $office_date_results[] = $office_date_query_results; 
     } 

     while ($leave_query_results = mysql_fetch_array($leave_query)){ 
      $leave_row[] = $leave_query_results; 
     } 

     for ($x = 0; $x < count($leave_row); $x++) { 

      foreach ($office_date_results as $row2) { 

      if (....) { 
       //some code here 
      } 

      else if ($leave_row[$x][7] == "accepted" && $leave_row[$x][4] == $row2->odate) { 
       echo '<tr bgcolor="' . $bgcolor . '"> 
       <td>&nbsp;' . $i . '</td> 
       <td>&nbsp;' . $row2->odate . '</td> 
       <td>&nbsp;</td> 
       <td>&nbsp;</td> 
       <td>&nbsp;</td> 
       <td>&nbsp;</td> 
       <td><font color="red">In leave</font></td> 
       </tr>'; 
      } 

      else { 
       echo '<tr bgcolor="' . $bgcolor . '"> 
       <td>&nbsp;' . $i . '</td> 
       <td>&nbsp;' . $row2->odate . '</td> 
       <td>&nbsp;</td> 
       <td>&nbsp;</td> 
       <td>&nbsp;</td> 
       <td>&nbsp;</td> 
       <td><font color="red">Absent</font></td> 
      </tr>'; 
      } 

      $i++; 
      } 
     } 

     ?> 
+0

@Fabio說的也是正確的... – jerdiggity 2013-04-27 07:47:32

相關問題