我正在为办公室做一个考勤管理系统项目,其中还包括休假管理系统。有一个报告显示了显示员工缺席/现在报告的页面。现在,如果特定员工在休假日缺席,我必须显示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
表格的所有行,以检查所有sdate
和edate
以及action
以显示报告in leave
或{{1}在我的报告页面中。我编写了以下代码,但它只获取absent
表的第一行或单行。它将在报告中显示leave
(如果已接受)报告,该报告仅显示其正在获取的行的页面。
in leave
sql查询是 <?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> ' . $i . '</td>
<td> ' . $row2->odate . '</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td><font color="red">In leave</font></td>
</tr>';
}
else {
echo '<tr bgcolor="' . $bgcolor . '">
<td> ' . $i . '</td>
<td> ' . $row2->odate . '</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td><font color="red">Absent</font></td>
</tr>';
}
$i++;
}
?>
离开SELECT * FROM
应该只获取where empID = $user
表的一行吗?
我的if条件只检查一行的信息。我知道原因:查询 $ leave = mysql_query(“SELECT * FROM leave
其中empID = $ user”); 仅提取一行。我如何获取所有行以及应该使用php代码代替我的代码的leave
语句来一次获取或检查所有行?
答案 0 :(得分:0)
这是因为您只从第一个查询中获取一行,您需要循环以检索所需的所有行
$leave_row = mysql_fetch_array($leave);
应该是
while($leave_row = mysql_fetch_array($leave)) { .... }
答案 1 :(得分:0)
您的原始代码
$leave = mysql_query("SELECT `action` FROM `leave`
where uname =('SELECT `username` FROM `users`
where `empID` =$user')", $dbCon)
or die(mysql_error());
一个问题是您需要从子查询中删除'
标记,如下所示:
$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> ' . $i . '</td>
<td> ' . $row2->odate . '</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td><font color="red">In leave</font></td>
</tr>';
}
else {
echo '<tr bgcolor="' . $bgcolor . '">
<td> ' . $i . '</td>
<td> ' . $row2->odate . '</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td><font color="red">Absent</font></td>
</tr>';
}
$i++;
}
}
?>