query($query); if (!$result) { // Handle error return []; } return $result->fetch_all(MYSQLI_ASSOC); } // Get expenses function getExpenses($conn) { $query = "SELECT e.*, ec.name as category_name, eh.name as head_name FROM expenses e JOIN expense_categories ec ON e.category_id = ec.id JOIN expense_heads eh ON e.head_id = eh.id ORDER BY e.date DESC"; $result = $conn->query($query); if (!$result) { // Handle error return []; } return $result->fetch_all(MYSQLI_ASSOC); } // Handle form submission if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["add_expense"])) { $date = $_POST["date"] ?? date('Y-m-d'); $category_id = isset($_POST["category_id"]) ? (int)$_POST["category_id"] : 0; $head_id = isset($_POST["head_id"]) ? (int)$_POST["head_id"] : 0; $amount = isset($_POST["amount"]) ? (float)$_POST["amount"] : 0; if ($category_id > 0 && $head_id > 0 && $amount > 0) { $query = "INSERT INTO expenses (date, category_id, head_id, amount) VALUES (?, ?, ?, ?)"; $stmt = $conn->prepare($query); if ($stmt) { $stmt->bind_param("siid", $date, $category_id, $head_id, $amount); if ($stmt->execute()) { $_SESSION['flash_message'] = "Expense added successfully"; header("Location: expenses.php"); exit(); } else { $_SESSION['flash_message'] = "Error: " . $stmt->error; } } else { $_SESSION['flash_message'] = "Error: " . $conn->error; } } else { $_SESSION['flash_message'] = "Please fill all required fields"; } } // Get data $expenseCategories = getExpenseCategories($conn); $expenses = getExpenses($conn); // Generate HTML for category options function generateCategoryOptions($categories) { $options = ''; foreach ($categories as $category) { $options .= ""; } return $options; } // Generate HTML for expense rows function generateExpenseRows($expenses) { $rows = ''; foreach ($expenses as $expense) { $rows .= "
| Date | Category | Head | Amount | Actions |
|---|