5 * 1024 * 1024) { return [null, 'Die CSV-Datei ist leer oder groesser als 5 MB.']; } $originalName = (string)($file['name'] ?? ''); $extension = strtolower(pathinfo($originalName, PATHINFO_EXTENSION)); if ($extension !== 'csv') { return [null, 'Es sind nur CSV-Dateien erlaubt.']; } $tmpName = (string)($file['tmp_name'] ?? ''); if (!is_uploaded_file($tmpName)) { return [null, 'Die hochgeladene Datei konnte nicht verifiziert werden.']; } if (function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = $finfo ? finfo_file($finfo, $tmpName) : false; if ($finfo) { finfo_close($finfo); } $allowedMimeTypes = [ 'text/plain', 'text/csv', 'text/x-csv', 'application/csv', 'application/vnd.ms-excel', 'application/octet-stream', ]; if (is_string($mime) && !in_array($mime, $allowedMimeTypes, true)) { return [null, 'Der Dateityp wurde nicht als CSV erkannt.']; } } $uploadDir = csv_upload_dir(); if (!is_dir($uploadDir)) { @mkdir($uploadDir, 0700, true); } if (!is_dir($uploadDir) || !is_writable($uploadDir)) { return [null, 'Der Upload-Ordner ist nicht beschreibbar.']; } $targetFile = $uploadDir . '/paypal_' . date('Ymd_His') . '_' . bin2hex(random_bytes(8)) . '.csv'; if (!move_uploaded_file($tmpName, $targetFile)) { return [null, 'Die CSV-Datei konnte nicht gespeichert werden.']; } return [$targetFile, null]; } // Funktion zum Überprüfen, ob der Mitarbeiter in der Tabelle vorhanden ist function isMitarbeiterExist($conn, $name) { $sql = "SELECT MitarbeiterID FROM kl_Mitarbeiter WHERE Name = ? or paypalname = ?"; $params = array($name, $name); $stmt = sqlsrv_query($conn, $sql, $params); if ($stmt === false) { die(print_r(sqlsrv_errors(), true)); } $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC); return ($row !== false); } // Funktion zum Überprüfen, ob ein identischer Eintrag bereits vorhanden ist function isDuplicateEntry($conn, $mitarbeiterID, $betrag, $datum) { // Um nur den gleichen Tag zu vergleichen, konvertieren wir den Datum-String zu einem DateTime-Objekt und verwenden die Funktion CONVERT $date = date_create($datum); if ($date === false) { return false; } $convertedDatum = date_format($date, 'Y-m-d'); #$sql = "SELECT count FROM dbo.kl_Einzahlungen WHERE MitarbeiterID = ? AND Betrag = ? AND CONVERT(VARCHAR, Datum, 23) = ?"; $sql = "SELECT * FROM dbo.kl_Einzahlungen WHERE MitarbeiterID = ? AND Betrag = ? AND CONVERT(VARCHAR, Datum, 23) = ?"; $params = array($mitarbeiterID, $betrag, $convertedDatum); $stmt = sqlsrv_query($conn, $sql, $params); if ($stmt === false) { die(print_r(sqlsrv_errors(), true)); } $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC); return $row !== null && (int)$row['MitarbeiterID'] > 0; } // Funktion zum Verarbeiten der CSV-Datei und Rückgabe der Ergebnisse function processCSV($conn, $file) { $handle = fopen($file, "r"); $success_entries = []; $failed_entries = []; // Überspringe die erste Zeile (Header) der CSV-Datei fgetcsv($handle); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { if (count($data) < 8) { $failed_entries[] = array($data[0] ?? '', $data[3] ?? '', $data[7] ?? '', 4); continue; } $name = $data[3]; // Index 3 entspricht dem "Name"-Feld in der CSV $betrag = $data[7]; // Index 7 entspricht dem "Brutto"-Feld in der CSV $betrag = str_replace(",", ".", $betrag); #echo "
"; #$Ausgabe = array($data[0], $data[3], $data[7]); // Überprüfen, ob der Mitarbeiter existiert und der Betrag positiv ist if (isMitarbeiterExist($conn, $name) && $betrag > 0) { $mitarbeiterID = getMitarbeiterID($conn, $name); $datum = $data[0]; // Index 0 entspricht dem "Datum"-Feld in der CSV // Überprüfen, ob ein identischer Eintrag bereits vorhanden ist if (!isDuplicateEntry($conn, $mitarbeiterID, $betrag, $datum)) { // Eintrag in die Tabelle dbo.kl_Einzahlungen einfügen $sql = "INSERT INTO kl_Einzahlungen (MitarbeiterID, Betrag, Datum) VALUES (?, ?, ?)"; $params = array($mitarbeiterID, $betrag, $datum); $stmt = sqlsrv_query($conn, $sql, $params); if ($stmt) { $success_entries[] = array($data[0], $data[3], $data[7], 0); } else { $failed_entries[] = array($data[0], $data[3], $data[7], 1); #die(print_r(sqlsrv_errors(), true)); } }else { #echo "Eintrag bereits vorhanden: " . print_r($data, true) . "\n"; $failed_entries[] = array($data[0], $data[3], $data[7], 2); } } else { $failed_entries[] = array($data[0], $data[3], $data[7], 3); } } fclose($handle); return ['success' => $success_entries, 'failed' => $failed_entries]; } // Funktion zum Abrufen der MitarbeiterID function getMitarbeiterID($conn, $name) { $sql = "SELECT MitarbeiterID FROM kl_Mitarbeiter WHERE Name = ? or paypalname = ?"; $params = array($name, $name); $stmt = sqlsrv_query($conn, $sql, $params); if ($stmt === false) { die(print_r(sqlsrv_errors(), true)); } while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) { return $row['MitarbeiterID']; } #echo $mitarbeiterid; } // Überprüfen, ob das Formular abgeschickt wurde if ($_SERVER["REQUEST_METHOD"] == "POST") { // Überprüfen, ob eine Datei hochgeladen wurde if (isset($_FILES["csv_file"])) { [$csvFile, $uploadError] = csv_prepare_upload($_FILES["csv_file"]); if ($uploadError !== null) { echo csv_h($uploadError); } else { // CSV-Datei verarbeiten $result = processCSV($conn, $csvFile); @unlink($csvFile); echo "CSV-Datei erfolgreich verarbeitet.\n"; echo "

Auswertung

"; echo ""; foreach ($result['success'] as $eintrag){ echo ""; } foreach ($result['failed'] as $eintrag){ echo ""; } echo "
Name Datum Betrag Ergebnis
" . csv_h($eintrag[0]) . " " . csv_h($eintrag[1]) . " " . csv_h($eintrag[2]) . " Erfolgreich gespeichert
" . csv_h($eintrag[0]) . " " . csv_h($eintrag[1]) . " " . csv_h($eintrag[2]) . " "; if($eintrag[3] == 1){ echo "SQL Fehler"; }elseif($eintrag[3] == 2){ echo "Eintrag schon vorhanden"; }elseif($eintrag[3] == 3){ echo "Benutzer nicht gefunden"; }elseif($eintrag[3] == 4){ echo "Ungueltige CSV-Zeile"; } echo "
"; } } else { echo "Fehler beim Hochladen der Datei."; } } ?> CSV Verarbeitung
" method="post" enctype="multipart/form-data">
Kein Zugriff"; } ?>