我有以下PHP脚本从用户获取所选的$ empfullname并根据选择打印'timecard_html'。我试图让它有能力,如果他们选择“全部”,那么脚本会在单独的timecard_html中打印出列表中的所有员工。这是php脚本:
if ($empfullname == 'All') {
$query = "select empfullname from ".$db_prefix."employees";
$result = mysql_query($query);
while ($row=mysql_fetch_array($result)) {
$empfullname = ("".$row['empfullname']."");
print timecard_html($empfullname, $local_timestamp_in_week);
unset($empfullname);
}
} else {
print timecard_html($empfullname, $local_timestamp_in_week);
}
此外,如果您需要查看它,请输入timecard_html:
function timecard_html($empfullname, $local_timestamp_in_week) {
// Return html of employee's timecard.
global $show_display_name, $one_week;
// SQL search parameters for one work week.
$begin_local_timestamp = work_week_begin($local_timestamp_in_week);
$end_local_timestamp = $begin_local_timestamp + $one_week;
// Define helper functions for printing timecard header, footer, and for printing every row.
function print_header($tc) {
// Print timecard html header.
global $overtime_week_limit, $timecard_display_running_total;
$overtime_col = $overtime_week_limit > 0 ? "\n <th align=\"center\" class=\"ovt\" title=\"Overtime hours\">OT</th>" : '';
$total_col = $timecard_display_running_total == "yes" ? "\n <th align=\"center\" class=\"total\" title=\"Running total of regular work hours and overtime to date.\">Total</th>" : '';
print <<<End_Of_HTML
<table class="misc_items timecard_list" border="0" cellpadding="2" cellspacing="0" style="margin:0 auto;">
<thead>
<tr>
<th align="left">In/Out</th>
<th align="center">Time</th>
<th align="center">Date</th>
<th align="center" class="hrs" title="Regular work hours.">Hrs</th>$overtime_col$total_col
<th align="left" class="notes">Notes</th>
</tr>
</thead>
<tbody>
End_Of_HTML;
}
function print_row($tc) {
// Configuration variables.
global $timefmt, $datefmt;
global $overtime_week_limit, $timecard_list_punch_outs, $timecard_display_hours_minutes;
global $timecard_hours_include_overtime, $timecard_display_running_total;
static $print_count = 0;
if (($tc->in_or_out == 1) || $timecard_list_punch_outs == 'yes') {
$h_color = htmlentities($tc->row['color']);
$h_inout = htmlentities($tc->row['inout']);
$h_time = date($timefmt, $tc->start_time);
$h_date = date($datefmt, $tc->start_time);
if ($timecard_display_hours_minutes == "yes") {
$h_hours = hrs_min((($timecard_hours_include_overtime == "yes") ? ($tc->hours + $tc->overtime) : $tc->hours));
$h_overtime = hrs_min($tc->overtime);
$h_total = hrs_min(($tc->week_hours + $tc->overtime_hours));
}
else {
$h_hours = sprintf("%01.02f",(($timecard_hours_include_overtime == "yes") ? ($tc->hours + $tc->overtime) : $tc->hours));
$h_overtime = sprintf("%01.02f",$tc->overtime);
$h_total = sprintf("%01.02f",($tc->week_hours + $tc->overtime_hours));
}
$h_notes = htmlentities($tc->row['notes']);
if ($tc->in_or_out != 1) {
// Don't display hours on "out" records.
$h_hours = $h_overtime = $h_total = '';
}
$row_class = (++$print_count % 2) ? 'odd' : 'even';
$overtime_col = $overtime_week_limit > 0 ? "\n <td align=\"right\" class=\"ovt\">$h_overtime</td>" : '';
$total_col = $timecard_display_running_total == "yes" ? "\n <td align=\"right\" class=\"total\">$h_total</td>" : '';
print <<<End_Of_HTML
<tr class="display_row $row_class">
<td align="left" class="job_code" style="color:$h_color">$h_inout</td>
<td align="right">$h_time</td>
<td align="right">$h_date</td>
<td align="right" class="hrs">$h_hours</td>$overtime_col$total_col
<td align="left" class="notes">$h_notes</td>
</tr>
End_Of_HTML;
}
}
function print_footer($tc) {
global $timecard_display_running_total, $timecard_hours_include_overtime;
global $timecard_display_hours_minutes, $overtime_week_limit;
// Set flag to print paragraph of totals if they're not already obvious.
$print_totals = ($timecard_display_running_total == "yes" || $timecard_hours_include_overtime != "yes") ? true : false;
$h_total_hours = sprintf("%01.02f",($tc->week_hours+$tc->overtime_hours));
$h_totals = ($print_totals) ? "\n<p>Total for week: ".hrs_min($tc->week_hours + $tc->overtime_hours)." ($h_total_hours hours)</p>" : '';
$h_ovt_total_hours = sprintf("%01.02f",$tc->overtime_hours);
$h_overtime_totals = ($print_totals && $tc->overtime_hours > 0) ? "\n<p>Total overtime: ".hrs_min($tc->overtime_hours)." ($h_ovt_total_hours hours)</p>" : '';
$h_day_total_hours = sprintf("%01.02f",$tc->today_hours);
$h_today_hours = ($tc->today_hours !== null) ? "<p>Total today: ".hrs_min($tc->today_hours)." ($h_day_total_hours hours)</p>" : '';
if ($timecard_display_running_total != "yes") {
// Print row of totals
$total_hours = $timecard_hours_include_overtime == "yes" ? ($tc->week_hours+$tc->overtime_hours) : $tc->week_hours;
$h_hours = $timecard_display_hours_minutes == "yes" ? hrs_min($total_hours) : $h_total_hours;
$overtime_col = $overtime_week_limit > 0 ? "\n <td align=\"right\" class=\"ovt\">".($timecard_display_hours_minutes == "yes" ? hrs_min($tc->overtime_hours) : $h_ovt_total_hours)."</td>" : '';
$total_col = $timecard_display_running_total == "yes" ? "\n <td align=\"right\" class=\"total\">".($timecard_display_hours_minutes == "yes" ? hrs_min($tc->week_hours+$tc->overtime_hours) : $h_total_hours)."</td>" : '';
print <<<End_Of_HTML
<tr class="total_row">
<td align="left"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right" class="hrs">$h_hours</td>$overtime_col$total_col
<td align="left" class="notes"></td>
</tr>
End_Of_HTML;
}
print <<<End_Of_HTML
</tbody>
</table>
End_Of_HTML;
if ($timecard_display_running_total == "yes" || $timecard_hours_include_overtime != "yes" || $h_today_hours) {
// Add totals text if totals are not already displayed or if summing the hours column is confusing.
print <<<End_Of_HTML
<div class="totals">
$h_today_hours$h_totals$h_overtime_totals
</div>
End_Of_HTML;
}
}
// End of helper function definitions.
// Print timecard page header.
$h_name_header = htmlentities( ($show_display_name == 'yes' ? get_employee_name($empfullname) : $empfullname) );
$begin_date = date('l F j, Y',$begin_local_timestamp);
print <<<End_Of_HTML
<div id="punchclock" class="timecard">
<h2>Timecard</h2>
<h3>$h_name_header</h3>
<h4>Week beginning $begin_date</h4>
End_Of_HTML;
// Print timecard.
$tc = new Timecard($empfullname,$begin_local_timestamp, $end_local_timestamp);
list($row_count, $total_hours, $overtime_hours, $today_hours) = $tc->walk(print_header, print_row, print_footer);
if ($row_count <= 0) print error_msg("No records were found.");
// Print timecard page footer.
print <<<End_Of_HTML
</div> <!-- timecard -->
End_Of_HTML;
}
?>
截至目前,如果选择“全部”,则会打印表格中第一个员工的结果,但不会打印其他任何员工的结果。此外,如果我只是打印("".$row['empfullname']."")
,它会打印出所有员工。我是否可能需要为每个循环使用a而不是while循环?
提前致谢。
答案 0 :(得分:2)
您的问题是您在函数中定义了函数。当你调用你的函数时,这将是第一次工作,但第二次它将导致致命的错误,因为函数已经被定义。
将内部函数声明移出main函数应解决此特定问题。
您还应始终在开发时启用错误处理和显示。在这种情况下,您可能会立即发现问题。
将它放在主脚本的顶部:
ini_set('display_errors',1);
error_reporting(E_ALL | E_STRICT);