Jifunze jinsi ya ku-design PHP logic sahihi ya kufunga expired accounts kwenye subscription systems, kuhakikisha users wanapata access sahihi kulingana na date to expire.

Utangulizi

Wakati mwingine, hata baada ya tarehe ya subscription kumalizika, users bado wanaweza kuendelea kutumia system. Hii ni kwa sababu ya logic isiyo sahihi kwenye PHP code.

Katika post hii, tutajifunza kwa nini expired accounts hazifungwi, common mistakes, na logic sahihi ya kufunga accounts.

Sababu Kuu za Expired Accounts Hazifungwi
1️⃣ Kutokukagua date_to_expire Sahihi
if($current_date <= $user['date_to_expire']){
// allow access
}

Hakikisha $current_date inalingana na format ya database (YYYY-MM-DD)

2️⃣ Variable ya PHP Si Sahihi

$current_date lazima iwe current date, sio string nyingine

$current_date = date('Y-m-d');
3️⃣ Query Haipati Users Sahihi

Wakati una-check expired accounts, query lazima iwe sahihi:

SELECT * FROM users WHERE date_to_expire < CURDATE();

Inapata users wote walio expired

Logic Sahihi (PHP + MySQLi)
$current_date = date('Y-m-d');


$sql = "SELECT * FROM users WHERE date_to_expire < '$current_date' AND status='active'";
$result = mysqli_query($conn, $sql);


while($row = mysqli_fetch_assoc($result)){
// Update status to expired
$update = "UPDATE users SET status='expired' WHERE id={$row['id']}";
mysqli_query($conn, $update);
}

Inasahihisha status automatically kwa expired accounts

Logic Sahihi (PDO)
$current_date = date('Y-m-d');
$stmt = $pdo->prepare("SELECT id FROM users WHERE date_to_expire < ? AND status='active'");
$stmt->execute([$current_date]);
$users = $stmt->fetchAll();


foreach($users as $user){
$update = $pdo->prepare("UPDATE users SET status='expired' WHERE id=?");
$update->execute([$user['id']]);
}

Safe & prevents SQL injection

Debug Tips

✔ Check date format (YYYY-MM-DD)

✔ Ensure $current_date is PHP current date

✔ Test query in phpMyAdmin first

✔ Schedule cron job if needed for automatic expiry

Makosa ya Kuepuka ❌

❌ Kutumia wrong comparison operator (<, >, =)

❌ Forgetting to update status

❌ Checking expired accounts incorrectly