v1.incomplete2

This commit is contained in:
Flatlogic Bot 2025-12-05 19:51:38 +00:00
parent 1b66a017fa
commit fc1839d4b8
4 changed files with 128 additions and 8 deletions

34
cancel_subscription.php Normal file
View File

@ -0,0 +1,34 @@
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header('Location: login.php');
exit;
}
require_once 'db/config.php';
if (isset($_GET['user_service_id'])) {
$user_service_id = $_GET['user_service_id'];
$user_id = $_SESSION['user_id'];
try {
$pdo = db();
// Verify the user owns this subscription before cancelling
$stmt = $pdo->prepare("UPDATE user_services SET status = 'cancelled' WHERE id = ? AND user_id = ?");
$stmt->execute([$user_service_id, $user_id]);
if ($stmt->rowCount() > 0) {
$_SESSION['message'] = 'Subscription cancelled successfully.';
} else {
$_SESSION['error'] = 'Could not cancel subscription. It might have been already cancelled or you do not have permission to perform this action.';
}
} catch (PDOException $e) {
$_SESSION['error'] = 'Database error: ' . $e->getMessage();
}
} else {
$_SESSION['error'] = 'Invalid request.';
}
header('Location: dashboard.php');
exit;

View File

@ -9,6 +9,16 @@ require_once 'includes/header.php';
?> ?>
<div class="container mt-5"> <div class="container mt-5">
<?php
if (isset($_SESSION['message'])) {
echo "<div class='alert alert-success'>" . $_SESSION['message'] . "</div>";
unset($_SESSION['message']);
}
if (isset($_SESSION['error'])) {
echo "<div class='alert alert-danger'>" . $_SESSION['error'] . "</div>";
unset($_SESSION['error']);
}
?>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<h1>Welcome to your Dashboard, <?php echo htmlspecialchars($_SESSION['user_name']); ?>!</h1> <h1>Welcome to your Dashboard, <?php echo htmlspecialchars($_SESSION['user_name']); ?>!</h1>
@ -22,15 +32,16 @@ require_once 'includes/header.php';
<?php <?php
require_once 'db/config.php'; require_once 'db/config.php';
$pdo = db(); $pdo = db();
$stmt = $pdo->prepare("SELECT s.name, s.description FROM services s JOIN user_services us ON s.id = us.service_id WHERE us.user_id = ? AND us.status = 'active'"); $stmt = $pdo->prepare("SELECT s.name, s.description, us.id as user_service_id FROM services s JOIN user_services us ON s.id = us.service_id WHERE us.user_id = ? AND us.status = 'active'");
$stmt->execute([$_SESSION['user_id']]); $stmt->execute([$_SESSION['user_id']]);
$user_services = $stmt->fetchAll(PDO::FETCH_ASSOC); $user_services = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (count($user_services) > 0) { if (count($user_services) > 0) {
echo "<ul class='list-group'>"; echo "<ul class='list-group'>";
foreach ($user_services as $service) { foreach ($user_services as $service) {
echo "<li class='list-group-item'>"; echo "<li class='list-group-item d-flex justify-content-between align-items-center'>";
echo "<strong>" . htmlspecialchars($service['name']) . "</strong>: " . htmlspecialchars($service['description']); echo "<div><strong>" . htmlspecialchars($service['name']) . "</strong>: " . htmlspecialchars($service['description']) . "</div>";
echo "<a href='cancel_subscription.php?user_service_id=" . $service['user_service_id'] . "' class='btn btn-danger btn-sm' onclick='return confirm("Are you sure you want to cancel this subscription?")'>Cancel</a>";
echo "</li>"; echo "</li>";
} }
echo "</ul>"; echo "</ul>";

View File

@ -68,11 +68,14 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="dashboard.php">Dashboard</a> <a class="nav-link" href="dashboard.php">Dashboard</a>
</li> </li>
<li class="nav-item"> <li class="nav-item dropdown">
<a class="nav-link" href="#">Hi, <?php echo htmlspecialchars($_SESSION['user_name']); ?></a> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
</li> Hi, <?php echo htmlspecialchars($_SESSION['user_name']); ?>
<li class="nav-item"> </a>
<a class="nav-link" href="logout.php">Logout</a> <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="profile.php">Profile</a></li>
<li><a class="dropdown-item" href="logout.php">Logout</a></li>
</ul>
</li> </li>
<?php else: ?> <?php else: ?>
<li class="nav-item"> <li class="nav-item">

72
profile.php Normal file
View File

@ -0,0 +1,72 @@
<?php
require_once 'includes/header.php';
require_once 'db/config.php';
if (!isset($_SESSION['user_id'])) {
header('Location: login.php');
exit;
}
$user_id = $_SESSION['user_id'];
$message = '';
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$email = $_POST['email'];
if (empty($username) || empty($email)) {
$error = 'Username and email are required.';
} else {
try {
$stmt = db()->prepare("UPDATE users SET username = ?, email = ? WHERE id = ?");
$stmt->execute([$username, $email, $user_id]);
$_SESSION['user_name'] = $username;
$message = 'Profile updated successfully!';
} catch (PDOException $e) {
$error = 'Error updating profile: ' . $e->getMessage();
}
}
}
$stmt = db()->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$user_id]);
$user = $stmt->fetch();
?>
<div class="container mt-5">
<h1>User Profile</h1>
<?php if ($message): ?>
<div class="alert alert-success">
<?php echo $message; ?>
</div>
<?php endif; ?>
<?php if ($error): ?>
<div class="alert alert-danger">
<?php echo $error; ?>
</div>
<?php endif; ?>
<div class="card">
<div class="card-body">
<h5 class="card-title">Edit Your Information</h5>
<form action="profile.php" method="POST">
<div class="mb-3">
<label for="username" class="form-label">Username</label>
<input type="text" class="form-control" id="username" name="username" value="<?php echo htmlspecialchars($user['username']); ?>" required>
</div>
<div class="mb-3">
<label for="email" class="form-label">Email address</label>
<input type="email" class="form-control" id="email" name="email" value="<?php echo htmlspecialchars($user['email']); ?>" required>
</div>
<button type="submit" class="btn btn-primary">Update Profile</button>
</form>
</div>
</div>
</div>
<?php require_once 'includes/footer.php'; ?>