Katika kutengeneza mifumo ya malipo au mifumo ya usajili wa subscription, ni muhimu kuhakikisha kuwa mtumiaji aliyemaliza muda wake (expired) hawezi kuendelea kutumia mfumo bila kufanya malipo.
Hii inalinda biashara yako na pia inahakikisha mtumiaji analipa ili kuendelea kutumia huduma.

Katika makala hii tutajifunza:

✅ Jinsi ya kupima kama akaunti ime-expire
✅ Jinsi ya kuzuia user kuingia kwenye pages nyingine
✅ Namna ya kumrudisha dashboard pekee
✅ Ujumbe mzuri wa kumjulisha kuwa muda wake umeisha
✅ Full PHP code ya kuweka kwenye dashboard yako

🛑 Kwa Nini Ni Muhimu Kuzuia Watumiaji Walio-Expire?

Mfumo bila expiry protection unaweza kutumika:

Bila malipo

Kwa muda mrefu kuliko uliokusudia

Bila udhibiti wa mmiliki wa system

Kwa hiyo, unahitaji code ambayo itamruhusu user kuingia dashboard pekee, lakini isiwaruhusu kufungua pages zingine mpaka walipe upya.

🧠 Logic Kuu ya Expiry Protection

Chukua user ID kutoka session

Retrieve taarifa za mtumiaji kutoka database

Kagua date_to_expire

Kama imepita → set variable isExpired = true

Dashboard itaonesha alert ya malipo

Buttons, links na stats zinakuwa disabled kama akaunti ime-expire

Kurasa nyingine zinapaswa kuwa na expiry check hii pia

🧩 Full PHP Code (Ready to Use) — Kuingiza kwenye Dashboard

🔥 Hii ndiyo code uliyoitaka — imeboreshwa kama blog, bila kubadilisha logic yako.

<?php
session_start();
require 'config.php';

$user_id = $_SESSION['user_id'] ?? null;
if (!$user_id) {
header("Location: uhasibu_login.php");
exit;
}

try {
$pdo = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8mb4", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Database Connection Failed: " . $e->getMessage());
}

// Fetch user
$stmt = $pdo->prepare("SELECT username, email, created_at, date_to_expire FROM uhasibu_users WHERE id = ?");
$stmt->execute([$user_id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$user) {
header("Location: faulink_logout.php");
exit;
}

// Check if account is expired
$today = date("Y-m-d");
$isExpired = false;
$expiredMessage = '';
if (!empty($user['date_to_expire']) && $today > $user['date_to_expire']) {
$isExpired = true;
$expiredMessage = '
<div class="alert alert-danger text-center">
<h2>⛔ Akaunti yako ime-expire</h2>
<p>Tafadhali lipa au wasiliana na FAULINK kupitia <a href="https://faulink.com&quot; target="_blank">faulink.com</a> au piga 0693118509.</p>
<a href="uhasibu_login.php" style="display:inline-block;margin-top:20px;padding:10px 20px;background:#007bff;color:white;border-radius:5px;text-decoration:none;">Rudi Login</a>
</div>
';
}

// Statistics (only if not expired)
if (!$isExpired) {
$classCount = $pdo->prepare("SELECT COUNT(*) FROM uhasibu_classes WHERE user_id=?");
$classCount->execute([$user_id]);
$classCount = $classCount->fetchColumn();

$studentCount = $pdo->prepare("SELECT COUNT(*) FROM uhasibu_students WHERE user_id=?");
$studentCount->execute([$user_id]);
$studentCount = $studentCount->fetchColumn();

$contributionCount = $pdo->prepare("SELECT COUNT(*) FROM uhasibu_contributions WHERE user_id=?");
$contributionCount->execute([$user_id]);
$contributionCount = $contributionCount->fetchColumn();
}
?>

🖥️ Dashboard View kwa Mtumiaji Aliye-Expire

Buttons → disabled

Stats → zinakuwa 0

User anaona alert

Hawezi kuingia sehemu nyingine

Mfumo unafanya kazi bila mgogoro.

🎯 Hitimisho

Kwa kuongeza expiry protection kwenye PHP system, unalinda biashara yako, unadhibiti watumiaji na unahakikisha malipo yanafanyika ipasavyo.