'danger', 'msg' => 'Pedido rejeitado (token CSRF inválido).']; header('Location: ' . $selfUrl, true, 303); exit; } $file = (string) ($_POST['filename'] ?? ''); $typed = trim((string) ($_POST['confirm_name'] ?? '')); $dropExtra = !empty($_POST['drop_extra']); if ($typed !== $file) { $_SESSION['restore_flash'] = ['type' => 'warning', 'msg' => 'O nome escrito não corresponde ao ficheiro escolhido — nada foi feito.']; header('Location: ' . $selfUrl . '?f=' . urlencode($file), true, 303); exit; } // A partir daqui a base de dados vai ser substituída. $report = restore_db($pdo, $file, ['safety' => true, 'drop_extra_tables' => $dropExtra]); $_SESSION['restore_report'] = $report; header('Location: ' . $selfUrl, true, 303); exit; } $flash = $_SESSION['restore_flash'] ?? null; $report = $_SESSION['restore_report'] ?? null; unset($_SESSION['restore_flash'], $_SESSION['restore_report']); $all = backup_list(); $dbFiles = array_values(array_filter($all, fn($b) => ($b['type'] ?? '') === 'db')); $selected = (string) ($_GET['f'] ?? ''); $inspect = $selected !== '' ? restore_inspect($selected) : null; $tables = restore_current_tables($pdo); $layout_header = $platform_layout_header ?? ($repo_root . '/includes/header.php'); $layout_navbar = $platform_layout_navbar ?? ($repo_root . '/includes/navbar.php'); $layout_footer = $platform_layout_footer ?? ($repo_root . '/includes/footer.php'); $backupsUrl = $platform_backups_url ?? (function_exists('platform_admin_url') ? platform_admin_url('backups.php') : 'backups.php'); $pageTitle = 'Restaurar base de dados'; if (is_file($layout_header)) include $layout_header; if (is_file($layout_navbar)) include $layout_navbar; $h = fn($s) => htmlspecialchars((string) $s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?>

Restaurar base de dados

Substitui o esquema e os dados actuais por um artefacto de backup.

Backups
Artefacto aplicado
Backup de segurança ' . $h($report['safety_backup']) . '' : 'nenhum' ?>
Statements aplicados de
Tabelas antes → depois
Tabelas removidas
Existiam aqui e não no artefacto.
Erro

O estado anterior está em — restaurá-lo devolve a base ao que era antes desta tentativa.

Isto é destrutivo. A base de dados actual ( tabelas) é substituída pela do artefacto. Antes de tocar em nada é tirado um backup de segurança do estado actual, cujo nome aparece no relatório — mas planeie o restauro para uma altura em que ninguém esteja a usar a plataforma.
Artefactos de base de dados

Não há backups de base de dados em backups/. Crie um a partir da página de Backups.

>
FicheiroTamanhoCriado
Inspeccionar
Inspecção
é um backup de ficheiros, não de base de dados.
Ficheiro
Tamanho
Entradas no ZIP
Dump

É escrito à mão de propósito: obriga a olhar para qual artefacto está prestes a aplicar.