prepare(" UPDATE users SET gender = ?, date_of_birth = ?, postcode = ?, status = ?, updated_at = NOW() WHERE id = ? "); $stmt->execute([$gender, $dob, $postcode, $status, $member_id]); logActivity($_SESSION['admin_id'], 'update_member', "Updated member #$member_id basic info", 'member', $member_id); $success = 'Member information updated successfully!'; } catch (Exception $e) { $error = 'An error occurred. Please try again.'; error_log("Update member error: " . $e->getMessage()); } } } if ($_POST['action'] === 'update_mobile') { $mobile = trim($_POST['mobile_number'] ?? ''); if (empty($mobile)) { $error = 'Mobile number is required'; } else { try { $panelPdo = getPanelDBConnection(); // Check if mobile verification record exists $checkStmt = $panelPdo->prepare("SELECT id FROM mobile_verifications WHERE user_id = ?"); $checkStmt->execute([$member_id]); $exists = $checkStmt->fetch(); if ($exists) { $stmt = $panelPdo->prepare(" UPDATE mobile_verifications SET mobile_number = ?, updated_at = NOW() WHERE user_id = ? "); $stmt->execute([$mobile, $member_id]); } else { $stmt = $panelPdo->prepare(" INSERT INTO mobile_verifications (user_id, mobile_number) VALUES (?, ?) "); $stmt->execute([$member_id, $mobile]); } logActivity($_SESSION['admin_id'], 'update_member', "Updated member #$member_id mobile number", 'member', $member_id); $success = 'Mobile number updated successfully!'; } catch (Exception $e) { $error = 'An error occurred. Please try again.'; error_log("Update mobile error: " . $e->getMessage()); } } } if ($_POST['action'] === 'update_referral_tier') { try { $panelPdo = getPanelDBConnection(); // Auto-create the table on first use (idempotent) $panelPdo->exec(" CREATE TABLE IF NOT EXISTS member_referral_tiers ( user_id INT PRIMARY KEY, enabled TINYINT(1) NOT NULL DEFAULT 1, tier_2_amount DECIMAL(10,2) NOT NULL DEFAULT 5.00, tier_3_amount DECIMAL(10,2) NOT NULL DEFAULT 5.00, tier_4_amount DECIMAL(10,2) NOT NULL DEFAULT 5.00, tier_5_amount DECIMAL(10,2) NOT NULL DEFAULT 5.00, updated_by INT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_enabled (enabled) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci "); $enabled = isset($_POST['tier_enabled']) && $_POST['tier_enabled'] === '1' ? 1 : 0; // Sanitize amounts: clamp to >=0, max 9999.99 (DECIMAL(10,2)), default 5.00 if blank $clampAmt = function($v) { $f = (float)$v; if ($f < 0) $f = 0; if ($f > 99999999.99) $f = 99999999.99; return round($f, 2); }; $t2 = $clampAmt($_POST['tier_2_amount'] ?? 5); $t3 = $clampAmt($_POST['tier_3_amount'] ?? 5); $t4 = $clampAmt($_POST['tier_4_amount'] ?? 5); $t5 = $clampAmt($_POST['tier_5_amount'] ?? 5); $stmt = $panelPdo->prepare(" INSERT INTO member_referral_tiers (user_id, enabled, tier_2_amount, tier_3_amount, tier_4_amount, tier_5_amount, updated_by) VALUES (?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE enabled = VALUES(enabled), tier_2_amount = VALUES(tier_2_amount), tier_3_amount = VALUES(tier_3_amount), tier_4_amount = VALUES(tier_4_amount), tier_5_amount = VALUES(tier_5_amount), updated_by = VALUES(updated_by) "); $stmt->execute([$member_id, $enabled, $t2, $t3, $t4, $t5, $_SESSION['admin_id'] ?? null]); logActivity($_SESSION['admin_id'], 'update_member', "Updated referral tier config for member #$member_id (enabled=$enabled, t2=$t2, t3=$t3, t4=$t4, t5=$t5)", 'member', $member_id); $success = 'Referral tier configuration saved successfully!'; } catch (Exception $e) { $error = 'An error occurred saving tier config. Please try again.'; error_log("Update referral tier error: " . $e->getMessage()); } } } // Fetch member details try { $panelPdo = getPanelDBConnection(); $stmt = $panelPdo->prepare(" SELECT u.*, mv.mobile_number, mv.is_verified as mobile_verified FROM users u LEFT JOIN mobile_verifications mv ON u.id = mv.user_id WHERE u.id = ? "); $stmt->execute([$member_id]); $member = $stmt->fetch(); if (!$member) { header('Location: members.php'); exit; } } catch (Exception $e) { error_log("Fetch member error: " . $e->getMessage()); header('Location: members.php'); exit; } // Fetch referral tier config for this member (if any) + their current verified-referral count $tierCfg = [ 'enabled' => 0, 'tier_2_amount' => 5.00, 'tier_3_amount' => 5.00, 'tier_4_amount' => 5.00, 'tier_5_amount' => 5.00, ]; $verifiedReferralCount = 0; try { $panelPdo = getPanelDBConnection(); // Try fetch tier config (table may not exist yet — ignore failures silently) try { $tStmt = $panelPdo->prepare("SELECT enabled, tier_2_amount, tier_3_amount, tier_4_amount, tier_5_amount FROM member_referral_tiers WHERE user_id = ?"); $tStmt->execute([$member_id]); $tRow = $tStmt->fetch(); if ($tRow) { $tierCfg['enabled'] = (int)$tRow['enabled']; $tierCfg['tier_2_amount'] = (float)$tRow['tier_2_amount']; $tierCfg['tier_3_amount'] = (float)$tRow['tier_3_amount']; $tierCfg['tier_4_amount'] = (float)$tRow['tier_4_amount']; $tierCfg['tier_5_amount'] = (float)$tRow['tier_5_amount']; } } catch (Exception $ignore) { /* table doesn't exist yet — fine, defaults stay */ } // Verified referrals count (this member is the referrer) try { $cStmt = $panelPdo->prepare("SELECT COUNT(*) FROM member_referral_clicks WHERE referrer_user_id = ? AND email_verified = 1"); $cStmt->execute([$member_id]); $verifiedReferralCount = (int)$cStmt->fetchColumn(); } catch (Exception $ignore) { /* */ } } catch (Exception $e) { error_log("Tier fetch error: " . $e->getMessage()); } include 'includes/header.php'; ?>

Basic Information

Email address cannot be changed

Mobile Number

✓ Verified Not verified

🎖 Referral Tier Bonus

Default: every member earns ₹5 per verified-email referral. Enable below to give this member tiered bonuses instead. Tier 1 (first 100) is always ₹5 and cannot be changed.

Current verified referrals by this member:  ·  Next referral falls in:
If unchecked, this member earns the default flat ₹5 per verified referral, regardless of values below.
Tier 1 · Referrals 1–100
₹ 5.00 (fixed, cannot be changed)
per referral
per referral
per referral
per referral

Account Information

Email Verified
✓ Yes' : '✗ No'; ?>
Onboarding Completed
✓ Yes' : '⏳ No'; ?>
Member Since
Last Updated