query(„SELECT land_region, COUNT(*) as project_count FROM projekte WHERE land_region IS NOT NULL AND land_region != “ GROUP BY land_region ORDER BY project_count DESC LIMIT 10″);
$top_countries_by_count = $top_countries_by_count_stmt->fetchAll();
$total_financing_stmt = $pdo->query(„SELECT SUM(finanzierungsvolumen) FROM projekte“);
$total_financing = $total_financing_stmt->fetchColumn();
$top_countries_by_financing_stmt = $pdo->query(„SELECT land_region, SUM(finanzierungsvolumen) as total_sum FROM projekte WHERE land_region IS NOT NULL AND land_region != “ GROUP BY land_region ORDER BY total_sum DESC LIMIT 10″);
$top_countries_by_financing = $top_countries_by_financing_stmt->fetchAll();
$top_10_stmt = $pdo->query(„SELECT titel, finanzierungsvolumen, iati_massnahmen_id FROM projekte ORDER BY finanzierungsvolumen DESC LIMIT 10″);
$top_10_projects = $top_10_stmt->fetchAll();
// 2. KONFIGURATION für Tabelle (Suche, Sortierung, Pagination)
// =================================================================
$page = isset($_GET[‚page‘]) && is_numeric($_GET[‚page‘]) ? (int)$_GET[‚page‘] : 1;
$limit = 25;
$offset = ($page – 1) * $limit;
// Filter-Parameter aus der URL lesen
$searchTerm = $_GET[’search‘] ?? “;
$countryFilter = $_GET[‚country‘] ?? “;
$statusFilter = $_GET[’status‘] ?? ‚alle‘;
// HINZUGEFÜGT: Datums-Filter aus der URL lesen
$dateFrom = $_GET[‚date_from‘] ?? “;
$dateTo = $_GET[‚date_to‘] ?? “;
// Sortier-Parameter
$sortableColumns = [‚iati_massnahmen_id‘, ‚titel‘, ‚land_region‘, ‚massnahmenstatus‘, ‚evaluierung‘, ’startdatum‘, ‚finanzierungsvolumen‘];
$sortColumn = $_GET[’sort‘] ?? ’startdatum‘;
if (!in_array($sortColumn, $sortableColumns)) {
$sortColumn = ’startdatum‘;
}
$sortOrder = isset($_GET[‚order‘]) && strtolower($_GET[‚order‘]) == ‚asc‘ ? ‚ASC‘ : ‚DESC‘;
// 3. SQL-ABFRAGEN für die Tabelle
// =================================================================
$sqlBase = „FROM projekte „;
$whereConditions = [];
$params = [];
// Haupt-Suchleiste
if (!empty($searchTerm)) {
$whereConditions[] = „(titel LIKE ? OR land_region LIKE ? OR iati_massnahmen_id LIKE ? OR evaluierung LIKE ?)“;
$likeTerm = ‚%‘ . $searchTerm . ‚%‘;
$params = array_merge($params, [$likeTerm, $likeTerm, $likeTerm, $likeTerm]);
}
// Status-Filter
if ($statusFilter !== ‚alle‘) {
$whereConditions[] = „massnahmenstatus = ?“;
$params[] = $statusFilter;
}
// Länderfilter
if (!empty($countryFilter)) {
$whereConditions[] = „land_region = ?“;
$params[] = $countryFilter;
}
// HINZUGEFÜGT: Datums-Filter zur SQL-Abfrage hinzufügen
if (!empty($dateFrom)) {
$whereConditions[] = „startdatum >= ?“;
$params[] = $dateFrom;
}
if (!empty($dateTo)) {
$whereConditions[] = „startdatum <= ?";
$params[] = $dateTo;
}
// Baue die WHERE-Klausel zusammen
$whereClause = '';
if (!empty($whereConditions)) {
$whereClause = "WHERE " . implode(" AND ", $whereConditions) . " ";
}
// Zähl-Abfrage für die Pagination
$countSql = "SELECT COUNT(*) " . $sqlBase . $whereClause;
$countStmt = $pdo->prepare($countSql);
$countStmt->execute($params);
$totalRecords = $countStmt->fetchColumn();
$totalPages = ceil($totalRecords / $limit);
// Haupt-Abfrage, um die Daten für die aktuelle Seite zu holen
$dataSql = „SELECT iati_massnahmen_id, titel, land_region, massnahmenstatus, evaluierung, finanzierungsvolumen, startdatum, laufzeit “
. $sqlBase . $whereClause
. „ORDER BY $sortColumn $sortOrder “
. „LIMIT ? OFFSET ?“;
$dataParams = array_merge($params, [$limit, $offset]);
$dataStmt = $pdo->prepare($dataSql);
foreach ($dataParams as $key => $value) {
$paramType = is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR;
$dataStmt->bindValue($key + 1, $value, $paramType);
}
$dataStmt->execute();
$projekte = $dataStmt->fetchAll();
// Alle aktuellen Filter (außer Seite) für die Export-Links zusammenstellen
$exportParams = $_GET;
unset($exportParams[‚page‘]);
?>
BMZ Pro
