35330-vm/Backend/edit_expense.php
2025-10-29 19:24:01 +00:00

127 lines
5.1 KiB
PHP

<?php
require_once __DIR__ . '/db/config.php';
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
// Proteger a página
if (!isset($_SESSION['user_id'])) {
header('Location: login.php');
exit;
}
$expense_id = $_GET['id'] ?? null;
$user_id = $_SESSION['user_id'];
$error_message = '';
$expense = null;
if (!$expense_id) {
header('Location: expenses.php');
exit;
}
$pdo = db();
// Buscar a despesa para garantir que ela pertence ao usuário
try {
$stmt = $pdo->prepare("SELECT * FROM expenses WHERE id = :id AND user_id = :user_id");
$stmt->execute(['id' => $expense_id, 'user_id' => $user_id]);
$expense = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$expense) {
$_SESSION['error_message'] = 'Despesa não encontrada.';
header('Location: expenses.php');
exit;
}
} catch (PDOException $e) {
$_SESSION['error_message'] = 'Erro ao buscar despesa.';
header('Location: expenses.php');
exit;
}
// Lógica para atualizar a despesa
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$description = $_POST['description'] ?? '';
$amount = $_POST['amount'] ?? '';
$category = $_POST['category'] ?? '';
$expense_date = $_POST['expense_date'] ?? '';
if (empty($description) || empty($amount) || empty($category) || empty($expense_date)) {
$error_message = 'Todos os campos são obrigatórios.';
} else {
try {
$sql = "UPDATE expenses SET description = :description, amount = :amount, category = :category, expense_date = :expense_date WHERE id = :id AND user_id = :user_id";
$stmt = $pdo->prepare($sql);
$stmt->execute([
'description' => $description,
'amount' => $amount,
'category' => $category,
'expense_date' => $expense_date,
'id' => $expense_id,
'user_id' => $user_id
]);
$_SESSION['success_message'] = 'Despesa atualizada com sucesso!';
header('Location: expenses.php');
exit;
} catch (PDOException $e) {
$error_message = 'Erro ao atualizar a despesa: ' . $e->getMessage();
}
}
}
include __DIR__ . '/includes/header.php';
?>
<div class="container mt-4">
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card">
<div class="card-body">
<h4 class="card-title">Editar Despesa</h4>
<?php if ($error_message): ?>
<div class="alert alert-danger"><?php echo htmlspecialchars($error_message); ?></div>
<?php endif; ?>
<form method="POST" action="edit_expense.php?id=<?php echo htmlspecialchars($expense_id); ?>">
<div class="mb-3">
<label for="description" class="form-label">Descrição</label>
<input type="text" class="form-control" id="description" name="description" value="<?php echo htmlspecialchars($expense['description']); ?>" required>
</div>
<div class="mb-3">
<label for="amount" class="form-label">Valor (R$)</label>
<input type="number" step="0.01" class="form-control" id="amount" name="amount" value="<?php echo htmlspecialchars($expense['amount']); ?>" required>
</div>
<div class="mb-3">
<label for="category" class="form-label">Categoria</label>
<select class="form-select" id="category" name="category" required>
<option value="">Selecione...</option>
<?php
$categories = ['Alimentação', 'Transporte', 'Moradia', 'Lazer', 'Saúde', 'Outros'];
foreach ($categories as $cat) {
$selected = ($expense['category'] === $cat) ? 'selected' : '';
echo "<option value=\"".htmlspecialchars($cat)."\" $selected>".htmlspecialchars($cat)."</option>";
}
?>
</select>
</div>
<div class="mb-3">
<label for="expense_date" class="form-label">Data da Despesa</label>
<input type="date" class="form-control" id="expense_date" name="expense_date" value="<?php echo htmlspecialchars($expense['expense_date']); ?>" required>
</div>
<div class="d-grid gap-2 d-md-flex justify-content-md-end">
<a href="expenses.php" class="btn btn-secondary">Cancelar</a>
<button type="submit" class="btn btn-primary">Salvar Alterações</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<?php include __DIR__ . '/includes/footer.php'; ?>