setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $conn; } catch(PDOException $e) { // If database doesn't exist, create it if ($e->getCode() == '1049') { createDatabase(); return connectDB(); } die("Database connection failed: " . $e->getMessage()); } } // Create database and tables if they don't exist function createDatabase() { global $host, $username, $password; try { $conn = new PDO("mysql:host=$host", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Create database $conn->exec("CREATE DATABASE IF NOT EXISTS control_panel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"); $conn->exec("USE control_panel"); // Create tables $conn->exec(" CREATE TABLE IF NOT EXISTS admin_settings ( id INT PRIMARY KEY AUTO_INCREMENT, admin_username VARCHAR(50) NOT NULL DEFAULT 'admin', admin_password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) "); $conn->exec(" CREATE TABLE IF NOT EXISTS button_links ( id INT PRIMARY KEY AUTO_INCREMENT, button_name VARCHAR(50) NOT NULL UNIQUE, button_url TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) "); // Check if admin exists $stmt = $conn->query("SELECT COUNT(*) FROM admin_settings"); if ($stmt->fetchColumn() == 0) { // Default password: virus123 $hashedPassword = password_hash('virus123', PASSWORD_DEFAULT); $stmt = $conn->prepare("INSERT INTO admin_settings (admin_username, admin_password) VALUES ('admin', ?)"); $stmt->execute([$hashedPassword]); // Insert default button links $defaultButtons = [ ['rana_btn1', 'https://rana-button1-default.com'], ['rana_btn2', 'https://rana-button2-default.com'], ['virus_btn1', 'https://virus-button1-default.com'], ['virus_btn2', 'https://virus-button2-default.com'] ]; foreach ($defaultButtons as $button) { $stmt = $conn->prepare("INSERT INTO button_links (button_name, button_url) VALUES (?, ?)"); $stmt->execute([$button[0], $button[1]]); } } } catch(PDOException $e) { die("Database setup failed: " . $e->getMessage()); } } // Handle login if (isset($_POST['action']) && $_POST['action'] == 'login') { $inputUsername = $_POST['username'] ?? ''; $inputPassword = $_POST['password'] ?? ''; try { $conn = connectDB(); $stmt = $conn->prepare("SELECT admin_username, admin_password FROM admin_settings LIMIT 1"); $stmt->execute(); $admin = $stmt->fetch(PDO::FETCH_ASSOC); if ($admin && $inputUsername === $admin['admin_username'] && password_verify($inputPassword, $admin['admin_password'])) { $_SESSION['loggedin'] = true; $_SESSION['username'] = $admin['admin_username']; $isLoggedIn = true; $successMsg = "Login successful!"; } else { $errorMsg = "Invalid username or password!"; } } catch(Exception $e) { $errorMsg = "Login error: " . $e->getMessage(); } } // Handle logout if (isset($_GET['logout'])) { session_destroy(); header("Location: " . strtok($_SERVER["REQUEST_URI"], '?')); exit; } // Handle save settings if (isset($_POST['action']) && $_POST['action'] == 'save_settings' && $isLoggedIn) { try { $conn = connectDB(); // Save button links $buttonUpdates = [ 'rana_btn1' => $_POST['rana_link1'] ?? '', 'rana_btn2' => $_POST['rana_link2'] ?? '', 'virus_btn1' => $_POST['virus_link1'] ?? '', 'virus_btn2' => $_POST['virus_link2'] ?? '' ]; foreach ($buttonUpdates as $buttonName => $buttonUrl) { if (!empty($buttonUrl) && filter_var($buttonUrl, FILTER_VALIDATE_URL)) { $stmt = $conn->prepare("INSERT INTO button_links (button_name, button_url) VALUES (?, ?) ON DUPLICATE KEY UPDATE button_url = ?"); $stmt->execute([$buttonName, $buttonUrl, $buttonUrl]); } } // Update password if provided $currentPass = $_POST['current_password'] ?? ''; $newPass = $_POST['new_password'] ?? ''; $confirmPass = $_POST['confirm_password'] ?? ''; if (!empty($currentPass) && !empty($newPass)) { $stmt = $conn->prepare("SELECT admin_password FROM admin_settings LIMIT 1"); $stmt->execute(); $admin = $stmt->fetch(PDO::FETCH_ASSOC); if ($admin && password_verify($currentPass, $admin['admin_password'])) { if ($newPass === $confirmPass) { $hashedPassword = password_hash($newPass, PASSWORD_DEFAULT); $stmt = $conn->prepare("UPDATE admin_settings SET admin_password = ?"); $stmt->execute([$hashedPassword]); $successMsg = "Settings and password updated successfully!"; } else { $errorMsg = "New passwords do not match!"; } } else { $errorMsg = "Current password is incorrect!"; } } else { $successMsg = "Button links updated successfully!"; } // Update username if provided $newUsername = $_POST['admin_username'] ?? ''; if (!empty($newUsername) && $newUsername != $_SESSION['username']) { $stmt = $conn->prepare("UPDATE admin_settings SET admin_username = ?"); $stmt->execute([$newUsername]); $_SESSION['username'] = $newUsername; } } catch(Exception $e) { $errorMsg = "Save error: " . $e->getMessage(); } } // Get button links from database function getButtonLinks() { try { $conn = connectDB(); $stmt = $conn->query("SELECT button_name, button_url FROM button_links"); $links = $stmt->fetchAll(PDO::FETCH_KEY_PAIR); return $links; } catch(Exception $e) { return []; } } $buttonLinks = getButtonLinks(); ?>