= ?"; $params[] = $filter_start; } if ($filter_end) { $where[] = "le.entry_date <= ?"; $params[] = $filter_end; } $where_clause = implode(" AND ", $where); $stmt = db()->prepare(" SELECT le.entry_date, e.name as employee_name, p.name as project_name, le.hours, lt.name as labour_type, et.name as evidence_type, le.notes FROM labour_entries le JOIN projects p ON le.project_id = p.id JOIN employees e ON le.employee_id = e.id LEFT JOIN labour_types lt ON le.labour_type_id = lt.id LEFT JOIN evidence_types et ON le.evidence_type_id = et.id WHERE $where_clause ORDER BY le.entry_date DESC "); $stmt->execute($params); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); $filename_suffix = date('Y-m-d_H-i-s'); header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=labour_export_' . $filename_suffix . '.csv'); $output = fopen('php://output', 'w'); fputcsv($output, ['Date', 'Employee', 'Project', 'Hours', 'Labour Type', 'Evidence Type', 'Notes']); foreach ($data as $row) { fputcsv($output, $row); } fclose($output); exit;