From e70798fe057a17282c5b8c71a9c6eedc16b3e63b Mon Sep 17 00:00:00 2001 From: olinet Date: Fri, 1 Aug 2025 19:33:19 +0200 Subject: [PATCH] AddOn/SQL-ManagmentStudio_Online/index.php aktualisiert Add CSV Download, JSON Download Excle Download on the Select Query --- AddOn/SQL-ManagmentStudio_Online/index.php | 177 +++++++++++++++++++-- 1 file changed, 168 insertions(+), 9 deletions(-) diff --git a/AddOn/SQL-ManagmentStudio_Online/index.php b/AddOn/SQL-ManagmentStudio_Online/index.php index d6e308ff..024bf08c 100644 --- a/AddOn/SQL-ManagmentStudio_Online/index.php +++ b/AddOn/SQL-ManagmentStudio_Online/index.php @@ -385,10 +385,24 @@ function executeSQL($conn, $sql, $format = "json", $admin_pass = null, $realPass $results = []; if ($stmtType === "SELECT") { - while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { - $results[] = $row; + while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { $results[] = $row; } + + // === JSON Export (Direkter Download) === + if ($format === "json_download") { + // JSON-String erzeugen + $jsonData = json_encode($results, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + + // Header für JSON-Download + header("Content-Type: application/json; charset=utf-8"); + header("Content-Disposition: attachment; filename=" . $exporttableName . ".json"); + header("Pragma: no-cache"); + header("Expires: 0"); + + echo $jsonData; + sqlsrv_free_stmt($stmt); + exit; // wichtig: Skript beenden } - + // === BACKUP_SQL === if ($format === "backup_sql") { $meta = sqlsrv_field_metadata($stmt); @@ -446,7 +460,76 @@ function executeSQL($conn, $sql, $format = "json", $admin_pass = null, $realPass sqlsrv_free_stmt($stmt); return $create . $inserts; } - + + // === BACKUP_SQL Export (Direkter Download) === + if ($format === "backup_sql_download") { + $meta = sqlsrv_field_metadata($stmt); + if ($meta === false) { + return "Fehler beim Lesen der Feld-Metadaten."; + } + + $tableName = "ExportTable"; + $create = "CREATE TABLE [$tableName] (\n"; + $cols = []; + + foreach ($meta as $field) { + $colName = $field['Name']; + switch ($field['Type']) { + case SQLSRV_SQLTYPE_INT: + case SQLSRV_SQLTYPE_BIGINT: + case SQLSRV_SQLTYPE_SMALLINT: + $colType = "INT"; + break; + case SQLSRV_SQLTYPE_BIT: + $colType = "BIT"; + break; + case SQLSRV_SQLTYPE_FLOAT: + case SQLSRV_SQLTYPE_REAL: + $colType = "FLOAT"; + break; + case SQLSRV_SQLTYPE_DATETIME: + case SQLSRV_SQLTYPE_DATETIME2: + case SQLSRV_SQLTYPE_DATE: + $colType = "DATETIME"; + break; + default: + $colType = "NVARCHAR(MAX)"; + break; + } + $cols[] = " [$colName] $colType"; + } + $create .= implode(",\n", $cols) . "\n);\n\n"; + + $inserts = ""; + foreach ($results as $row) { + $values = []; + foreach ($row as $val) { + if ($val === null) { + $values[] = "NULL"; + } elseif (is_numeric($val)) { + $values[] = $val; + } elseif ($val instanceof DateTime) { + $values[] = "'" . $val->format("Y-m-d H:i:s") . "'"; + } else { + $values[] = "'" . str_replace("'", "''", $val) . "'"; + } + } + $inserts .= "INSERT INTO [$tableName] VALUES (" . implode(", ", $values) . ");\n"; + } + + $sqlDump = $create . $inserts; + + // Header für SQL-Download + header("Content-Type: application/sql; charset=utf-8"); + header("Content-Disposition: attachment; filename=" . $exporttableName . ".sql"); + header("Pragma: no-cache"); + header("Expires: 0"); + + echo $sqlDump; + sqlsrv_free_stmt($stmt); + exit; // wichtig: beenden + } + // === CSV === if ($format === "csv") { if (empty($results)) { @@ -466,7 +549,79 @@ function executeSQL($conn, $sql, $format = "json", $admin_pass = null, $realPass sqlsrv_free_stmt($stmt); return $output; } - + + // === EXCEL Export / EXCEL-HTML (Direkter Download) === + if ($format === "excel_download") { + if (empty($results)) { + return ""; + } + + $headers = array_keys($results[0]); + + $output = ""; + foreach ($headers as $header) { + $output .= ""; + } + $output .= ""; + + foreach ($results as $row) { + $output .= ""; + foreach ($headers as $header) { + $val = $row[$header]; + if ($val instanceof DateTime) { + $val = $val->format("Y-m-d H:i:s"); + } + $output .= ""; + } + $output .= ""; + } + $output .= "
" . htmlspecialchars($header) . "
" . htmlspecialchars((string)$val) . "
"; + + // Header für Excel-Download + header("Content-Type: application/vnd.ms-excel; charset=utf-8"); + header("Content-Disposition: attachment; filename=" . $exporttableName . ".xls"); + header("Pragma: no-cache"); + header("Expires: 0"); + + echo $output; + sqlsrv_free_stmt($stmt); + exit; // Wichtig: Script nach Download beenden + } + + // === CSV Export (Direkter Download) === + if ($format === "csv_download") { + if (empty($results)) { + return ""; + } + + // CSV erzeugen + $headers = array_keys($results[0]); + $output = implode(";", $headers) . "\n"; + + foreach ($results as $row) { + $escaped = array_map(function($val) { + if ($val === null) return ""; + if ($val instanceof DateTime) { + $val = $val->format("Y-m-d H:i:s"); + } + $val = str_replace('"', '""', $val); // Doppelte Anführungszeichen escapen + return '"' . $val . '"'; + }, $row); + + $output .= implode(";", $escaped) . "\n"; + } + + // Header für CSV-Download + header("Content-Type: text/csv; charset=utf-8"); + header("Content-Disposition: attachment; filename=" . $exporttableName . ".csv"); + header("Pragma: no-cache"); + header("Expires: 0"); + + echo $output; + sqlsrv_free_stmt($stmt); + exit; // Wichtig: Skript nach Download beenden + } + // === Default (Array) === sqlsrv_free_stmt($stmt); return $results; @@ -730,12 +885,16 @@ sqlsrv_close($conn);

- +