' . h($e->getMessage()) . '', 'Fehler beim Start'); exit; } // App-Logout if ((string)($_GET['auth'] ?? '') === 'logout') { adminer_app_logout(); header('Location: /adminer', true, 302); exit; } $appPage = (string)($_GET['page'] ?? 'login'); $appError = null; $appRegError = null; $appRegOk = null; // Login POST if ($_SERVER['REQUEST_METHOD'] === 'POST' && (string)($_POST['action'] ?? '') === 'app_login') { $res = adminer_app_try_login((string)($_POST['username'] ?? ''), (string)($_POST['password'] ?? '')); if (!empty($res['ok'])) { header('Location: /adminer', true, 302); exit; } $appError = (string)($res['error'] ?? 'Login fehlgeschlagen.'); $appPage = 'login'; } // Register POST if ($_SERVER['REQUEST_METHOD'] === 'POST' && (string)($_POST['action'] ?? '') === 'app_register') { $res = adminer_app_try_register( (string)($_POST['username'] ?? ''), (string)($_POST['password'] ?? ''), (string)($_POST['password2'] ?? '') ); if (!empty($res['ok'])) { $lr = adminer_app_try_login((string)($_POST['username'] ?? ''), (string)($_POST['password'] ?? '')); if (!empty($lr['ok'])) { header('Location: /adminer', true, 302); exit; } $appRegOk = 'Konto erstellt! Bitte einloggen.'; $appPage = 'login'; } else { $appRegError = (string)($res['error'] ?? 'Registrierung fehlgeschlagen.'); $appPage = 'register'; } } // ── LOGIN / REGISTER SEITE ──────────────────────────────────────────────── if (!adminer_app_is_logged_in()) { $canReg = adminer_app_allow_register(); $isReg = ($appPage === 'register'); $body = '
'; // Tabs $body .= '
'; $body .= 'Login'; if ($canReg) $body .= 'Registrieren'; $body .= '
'; $body .= '
'; if ($appRegOk) $body .= '
' . h($appRegOk) . '
'; if ($appError) $body .= '
' . h($appError) . '
'; if ($appRegError)$body .= '
' . h($appRegError) . '
'; if ($isReg && $canReg) { // ── Registrierungsformular ────────────────────────────────────── $body .= '
' . '' . '
' . '
' . '
' . '' . '
'; $body .= '

Bereits ein Konto? Login

'; } else { // ── Login-Formular ────────────────────────────────────────────── $body .= '
' . '' . '
' . '
' . '' . '
'; if ($canReg) $body .= '

Noch kein Konto? Registrieren

'; } $body .= '
'; $body .= '
'; admin_layout('DB-Verwaltung', $body, $isReg ? 'Neues Konto erstellen' : 'Bitte einloggen'); exit; } // ── DB-VERBINDUNGS-LOGIN ────────────────────────────────────────────────── require_once __DIR__ . '/auth.php'; admin_session_start(); if ((string)($_GET['a'] ?? '') === 'logout') { admin_logout(); header('Location: /adminer', true, 302); exit; } if (!isset($_SESSION['db_admin_select'])) $_SESSION['db_admin_select'] = []; $selectError = null; $selectMsg = null; // Probe: Datenbanken laden if ($_SERVER['REQUEST_METHOD'] === 'POST' && (string)($_POST['action'] ?? '') === 'probe') { $host = trim((string)($_POST['host'] ?? '')); $port = (int)($_POST['port'] ?? 3306); $user = trim((string)($_POST['user'] ?? '')); $pass = (string)($_POST['pass'] ?? ''); if ($host === '' || $port <= 0 || $user === '') { $selectError = 'Bitte Host, Port und Benutzer angeben.'; } else { try { $pdo = new PDO(sprintf('mysql:host=%s;port=%d;charset=utf8mb4', $host, $port), $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); $dbs = $pdo->query('SHOW DATABASES')->fetchAll(PDO::FETCH_COLUMN, 0); $_SESSION['db_admin_select'] = compact('host', 'port', 'user', 'pass', 'dbs'); $selectMsg = 'Datenbanken geladen – bitte unten eine auswählen.'; } catch (Throwable $e) { $selectError = 'Fehler: ' . $e->getMessage(); } } } // DB-Login $dbError = null; if ($_SERVER['REQUEST_METHOD'] === 'POST' && (string)($_POST['action'] ?? '') === 'login') { $res = admin_try_login( trim((string)($_POST['host'] ?? '')), (int)($_POST['port'] ?? 3306), trim((string)($_POST['user'] ?? '')), (string)($_POST['pass'] ?? ''), trim((string)($_POST['db'] ?? '')) ); if ($res['ok']) { header('Location: /adminer', true, 302); exit; } $dbError = (string)($res['error'] ?? 'Login fehlgeschlagen.'); } $defaults = admin_default_creds(); $selectState = is_array($_SESSION['db_admin_select']) ? $_SESSION['db_admin_select'] : []; $prefHost = isset($selectState['host']) ? (string)$selectState['host'] : (string)$defaults['host']; $prefPort = isset($selectState['port']) ? (int)$selectState['port'] : (int)$defaults['port']; $prefUser = isset($selectState['user']) ? (string)$selectState['user'] : (string)$defaults['user']; $prefPass = isset($selectState['pass']) ? (string)$selectState['pass'] : ''; $dbList = isset($selectState['dbs']) && is_array($selectState['dbs']) ? $selectState['dbs'] : []; if (!admin_is_logged_in()) { $body = '
'; if ($selectMsg) $body .= '
' . h($selectMsg) . '
'; if ($selectError)$body .= '
' . h($selectError) . '
'; if ($dbError) $body .= '
' . h($dbError) . '
'; // Step 1 $body .= '

1 · Server verbinden

'; $body .= '
' . '' . '
' . '
' . '
' . '
' . '' . '
'; $body .= '
'; // Step 2 $body .= '

2 · Datenbank auswählen & einloggen

'; $body .= '
' . '' . '' . '' . '' . '' . '
'; if (!empty($dbList)) { $body .= ''; } else { $body .= ''; } $body .= '
' . '' . '
'; $body .= '
'; admin_layout('DB-Verwaltung', $body, 'Datenbankverbindung'); exit; } // ── DB-VERWALTUNG (eingeloggt) ──────────────────────────────────────────── try { $pdo = admin_pdo(); $table = (string)($_GET['t'] ?? ''); $page = max(1, (int)($_GET['p'] ?? 1)); $limit = 50; $offset = ($page - 1) * $limit; $msg = null; $queryResultHtml = ''; // SQL Query ausführen if ($_SERVER['REQUEST_METHOD'] === 'POST' && (string)($_POST['action'] ?? '') === 'query') { $sql = trim((string)($_POST['sql'] ?? '')); if ($sql !== '') { if (preg_match('/;\s*\S/', $sql)) { $msg = ['ok' => false, 'text' => 'Nur ein Statement ausführen (kein zweites Semikolon).']; } else { try { $stmt = $pdo->query($sql); if ($stmt instanceof PDOStatement) { $rows = $stmt->fetchAll(); $queryResultHtml = '

Ergebnis

' . admin_render_table($rows); $msg = ['ok' => true, 'text' => 'Query ausgeführt (' . count($rows) . ' Zeilen).']; } else { $msg = ['ok' => true, 'text' => 'Statement ausgeführt.']; } } catch (Throwable $e) { $msg = ['ok' => false, 'text' => $e->getMessage()]; } } } } $tables = $pdo->query('SHOW TABLES')->fetchAll(PDO::FETCH_NUM); // ── TOP BAR ────────────────────────────────────────────────────────── $dbName = (string)($_SESSION['db_admin']['db'] ?? ''); $uname = (string)($_SESSION['adminer_app']['username'] ?? ''); $body = '
' . '
' . '' . h($dbName) . '' . ($uname ? '' . h($uname) . '' : '') . '
' . '
' . 'DB-Logout' . 'Account-Logout' . '
' . '
'; // ── GRID: TABELLENLISTE + CONTENT ───────────────────────────────────── $body .= '
'; // Linke Spalte: Tabellenliste $body .= '
'; $body .= '

Tabellen

'; if (empty($tables)) { $body .= '

Keine Tabellen gefunden.

'; } else { $body .= ''; } $body .= '
'; // Rechte Spalte: Browse + Query $body .= '
'; // Notices if ($msg) { $cls = $msg['ok'] ? 'notice-ok' : 'notice-err'; $body .= '
' . h($msg['text']) . '
'; } // Browse if ($table !== '') { if (!preg_match('/^[A-Za-z0-9_]+$/', $table)) { $body .= '
Ungültiger Tabellenname.
'; } else { $stmt = $pdo->query('SELECT * FROM `' . $table . '` LIMIT ' . (int)$limit . ' OFFSET ' . (int)$offset); $rows = $stmt->fetchAll(); $body .= '
'; $body .= '

' . h($table) . '

'; $body .= admin_render_table($rows); $body .= ''; $body .= '
'; } } // SQL Query Box $body .= '
'; $body .= '

SQL Query

'; $body .= '
' . '' . '
' . '' . '
'; $body .= $queryResultHtml; $body .= '
'; $body .= '
'; // right col $body .= '
'; // admin-grid admin_layout('DB-Verwaltung', $body, h($dbName)); } catch (Throwable $e) { admin_logout(); admin_layout('DB-Verwaltung', '
' . h($e->getMessage()) . '
' . '

Zurück zum Login

', 'Fehler' ); } function admin_render_table(array $rows): string { if (empty($rows)) return '

(keine Zeilen)

'; $cols = array_keys((array)$rows[0]); $html = '
'; foreach ($cols as $c) $html .= ''; $html .= ''; foreach ($rows as $r) { $html .= ''; foreach ($cols as $c) { $v = $r[$c] ?? null; $cell = $v === null ? 'NULL' : (strlen((string)$v) > 300 ? h(substr((string)$v, 0, 300)) . '…' : h((string)$v)); $html .= ''; } $html .= ''; } $html .= '
' . h((string)$c) . '
' . $cell . '
'; return $html; }