prepare('INSERT INTO puzzles (name, original_image, file_name, pieces, is_public, created_at) VALUES (?, ?, ?, ?, ?, NOW())'); $stmt->execute([$puzzle_name, $safe_filename, $safe_filename, $pieces, $is_public]); $puzzle_id = $pdo->lastInsertId(); create_puzzle_pieces($upload_path, $puzzle_id, $pieces); header("Location: admin.php?success=1"); exit; } } header("Location: admin.php?error=1"); exit; } // Handle puzzle deletion if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_puzzle'])) { $puzzle_id_to_delete = $_POST['puzzle_id']; $stmt = $pdo->prepare('SELECT original_image FROM puzzles WHERE id = ?'); $stmt->execute([$puzzle_id_to_delete]); $puzzle = $stmt->fetch(PDO::FETCH_ASSOC); if ($puzzle) { $original_image_path = __DIR__ . '/uploads/' . $puzzle['original_image']; if (file_exists($original_image_path)) { unlink($original_image_path); } } $stmt = $pdo->prepare('DELETE FROM puzzles WHERE id = ?'); $stmt->execute([$puzzle_id_to_delete]); $puzzle_dir = __DIR__ . '/puzzles/' . $puzzle_id_to_delete; if (is_dir($puzzle_dir)) { function delete_directory($dir) { if (!is_dir($dir)) return; $files = array_diff(scandir($dir), array('.','..')); foreach ($files as $file) { (is_dir("$dir/$file")) ? delete_directory("$dir/$file") : unlink("$dir/$file"); } rmdir($dir); } delete_directory($puzzle_dir); } header("Location: admin.php?deleted=1"); exit; } $puzzles = $pdo->query('SELECT id, name, original_image, pieces, is_public, created_at FROM puzzles ORDER BY created_at DESC')->fetchAll(PDO::FETCH_ASSOC); // Fetch users $users = $pdo->query('SELECT id, username, email, created_at FROM users ORDER BY created_at DESC')->fetchAll(PDO::FETCH_ASSOC); ?>