real_escape_string($host ?? 'localhost'); $db_user = $conn->real_escape_string($user ?? 'root'); $db_pass = $conn->real_escape_string($pass ?? ''); $db_name = $conn->real_escape_string($db ?? 'gsos_db'); // Create backup using mysqldump or manual method $tables = []; $tables_result = mysqli_query($conn, "SHOW TABLES"); if ($tables_result) { while ($row = mysqli_fetch_row($tables_result)) { $tables[] = $row[0]; } $output = "-- GSOS Database Backup\n"; $output .= "-- Generated: " . date('Y-m-d H:i:s') . "\n"; $output .= "-- Server: " . $db_host . "\n"; $output .= "-- Database: " . $db_name . "\n\n"; $output .= "SET FOREIGN_KEY_CHECKS=0;\n\n"; foreach ($tables as $table) { // Skip if partial backup and table not needed if ($backup_type === 'settings' && !in_array($table, ['settings', 'users'])) { continue; } if ($backup_type === 'data' && $table === 'settings') { continue; } // Get create table syntax $create_result = mysqli_query($conn, "SHOW CREATE TABLE `{$table}`"); $create_row = mysqli_fetch_row($create_result); $output .= "-- Table: {$table}\n"; $output .= "DROP TABLE IF EXISTS `{$table}`;\n"; $output .= $create_row[1] . ";\n\n"; // Get table data $data_result = mysqli_query($conn, "SELECT * FROM `{$table}`"); if ($data_result && mysqli_num_rows($data_result) > 0) { $output .= "-- Data for table: {$table}\n"; while ($data_row = mysqli_fetch_assoc($data_result)) { $values = array_map(function($value) use ($conn) { if ($value === null) return 'NULL'; return "'" . $conn->real_escape_string($value) . "'"; }, array_values($data_row)); $output .= "INSERT INTO `{$table}` VALUES (" . implode(', ', $values) . ");\n"; } $output .= "\n"; } } $output .= "SET FOREIGN_KEY_CHECKS=1;\n"; // Save backup file if (file_put_contents($backup_file, $output)) { $success_message = "Backup created successfully! File: " . basename($backup_file); } else { $error_message = "Error creating backup file. Check folder permissions."; } } else { $error_message = "Error accessing database tables."; } } // ========== RESTORE BACKUP ========== if (isset($_POST['action']) && $_POST['action'] === 'restore_backup') { if (isset($_FILES['backup_file']) && $_FILES['backup_file']['error'] === UPLOAD_ERR_OK) { $file_ext = pathinfo($_FILES['backup_file']['name'], PATHINFO_EXTENSION); if (strtolower($file_ext) === 'sql') { $sql_content = file_get_contents($_FILES['backup_file']['tmp_name']); if (!empty($sql_content)) { // Execute SQL queries $queries = array_filter(array_map('trim', explode(";\n", $sql_content))); $success_count = 0; $error_count = 0; foreach ($queries as $query) { if (!empty($query) && strpos($query, '--') !== 0) { if (mysqli_query($conn, $query)) { $success_count++; } else { $error_count++; } } } $success_message = "Restore completed! {$success_count} queries executed successfully."; if ($error_count > 0) { $error_message = "{$error_count} queries failed during restore."; } } else { $error_message = "Empty SQL file uploaded."; } } else { $error_message = "Invalid file format. Please upload .sql file only."; } } else { $error_message = "Please select a backup file to restore."; } } // ========== DELETE BACKUP ========== if (isset($_GET['delete_backup']) && !empty($_GET['delete_backup'])) { $file = 'backups/' . basename($_GET['delete_backup']); if (file_exists($file) && is_file($file)) { if (unlink($file)) { $success_message = "Backup file deleted successfully!"; } else { $error_message = "Error deleting backup file."; } } } // ========== DOWNLOAD BACKUP ========== if (isset($_GET['download']) && !empty($_GET['download'])) { $file = 'backups/' . basename($_GET['download']); if (file_exists($file) && is_file($file)) { header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($file) . '"'); header('Content-Length: ' . filesize($file)); readfile($file); exit(); } } // Get list of backup files $backup_files = []; if (is_dir('backups/')) { $files = scandir('backups/'); foreach ($files as $file) { if (pathinfo($file, PATHINFO_EXTENSION) === 'sql') { $filepath = 'backups/' . $file; $backup_files[] = [ 'name' => $file, 'size' => filesize($filepath), 'date' => date('Y-m-d H:i:s', filemtime($filepath)), 'path' => $filepath ]; } } // Sort by date descending usort($backup_files, function($a, $b) { return strcmp($b['date'], $a['date']); }); } // Database stats $db_size = 0; $tables_result = mysqli_query($conn, "SHOW TABLE STATUS"); if ($tables_result) { while ($row = mysqli_fetch_assoc($tables_result)) { $db_size += $row['Data_length'] + $row['Index_length']; } } $total_tables_result = mysqli_query($conn, "SHOW TABLES"); $total_tables = $total_tables_result ? mysqli_num_rows($total_tables_result) : 0; include 'includes/header.php'; include 'includes/sidebar.php'; ?>