0, 'female' => 0, 'other' => 0]; $topStates = []; $totalStates = 0; $dbOk = false; // Direct PDO — don't rely on a helper that may not be in root scope try { $pdo = new PDO( 'mysql:host=localhost;dbname=u752449863_rrpanel;charset=utf8mb4', 'u752449863_rrpaneladmin', 'S@n@h2016', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC] ); $dbOk = true; } catch (Exception $e) { error_log('panel-book.php DB connect failed: ' . $e->getMessage()); } if ($dbOk) { // Each query in its own try/catch so a single missing table can't kill the page try { $totalMembers = (int)$pdo->query("SELECT COUNT(*) FROM users")->fetchColumn(); } catch (Exception $e) { error_log('panel-book total: ' . $e->getMessage()); } try { $verifiedActive = (int)$pdo->query("SELECT COUNT(*) FROM users WHERE status='active' AND email_verified=1")->fetchColumn(); } catch (Exception $e) { error_log('panel-book verified: ' . $e->getMessage()); } try { $mobileVerified = (int)$pdo->query(" SELECT COUNT(DISTINCT u.id) FROM users u INNER JOIN mobile_verifications mv ON mv.user_id = u.id WHERE u.status='active' AND u.email_verified=1 AND mv.is_verified=1 ")->fetchColumn(); } catch (Exception $e) { error_log('panel-book mobile: ' . $e->getMessage()); } try { $profilersStarted = (int)$pdo->query("SELECT COUNT(DISTINCT user_id) FROM user_profiler")->fetchColumn(); } catch (Exception $e) { error_log('panel-book profilers: ' . $e->getMessage()); } try { $genderRows = $pdo->query(" SELECT gender, COUNT(*) c FROM users WHERE status='active' AND email_verified=1 AND gender IS NOT NULL AND gender != '' GROUP BY gender ")->fetchAll(); foreach ($genderRows as $r) { $g = strtolower($r['gender']); if (isset($genderMap[$g])) $genderMap[$g] = (int)$r['c']; } } catch (Exception $e) { error_log('panel-book gender: ' . $e->getMessage()); } // Top states by pincode prefix $stateMap = [ '11'=>'Delhi','12'=>'Haryana','13'=>'Haryana','14'=>'Punjab','15'=>'Punjab','16'=>'Chandigarh', '17'=>'Himachal Pradesh','18'=>'Jammu & Kashmir','19'=>'Jammu & Kashmir', '20'=>'Uttar Pradesh','21'=>'Uttar Pradesh','22'=>'Uttar Pradesh','23'=>'Uttar Pradesh', '24'=>'Uttarakhand','25'=>'Uttar Pradesh','26'=>'Uttarakhand','27'=>'Uttar Pradesh','28'=>'Uttar Pradesh', '30'=>'Rajasthan','31'=>'Rajasthan','32'=>'Rajasthan','33'=>'Rajasthan','34'=>'Rajasthan', '36'=>'Gujarat','37'=>'Gujarat','38'=>'Gujarat','39'=>'Gujarat', '40'=>'Maharashtra','41'=>'Maharashtra','42'=>'Maharashtra','43'=>'Maharashtra','44'=>'Maharashtra', '45'=>'Madhya Pradesh','46'=>'Madhya Pradesh','47'=>'Madhya Pradesh','48'=>'Madhya Pradesh','49'=>'Chhattisgarh', '50'=>'Telangana','51'=>'Andhra Pradesh','52'=>'Andhra Pradesh','53'=>'Andhra Pradesh', '56'=>'Karnataka','57'=>'Karnataka','58'=>'Karnataka','59'=>'Karnataka', '60'=>'Tamil Nadu','61'=>'Tamil Nadu','62'=>'Tamil Nadu','63'=>'Tamil Nadu','64'=>'Tamil Nadu', '67'=>'Kerala','68'=>'Kerala','69'=>'Lakshadweep', '70'=>'West Bengal','71'=>'West Bengal','72'=>'West Bengal','73'=>'West Bengal','74'=>'West Bengal', '75'=>'Odisha','76'=>'Odisha','77'=>'Odisha','78'=>'Assam','79'=>'NE States', '80'=>'Bihar','81'=>'Jharkhand','82'=>'Bihar','83'=>'Bihar','84'=>'Bihar','85'=>'Bihar', ]; try { $rawStates = $pdo->query(" SELECT SUBSTRING(postcode, 1, 2) AS pfx, COUNT(*) c FROM users WHERE status='active' AND email_verified=1 AND postcode IS NOT NULL AND CHAR_LENGTH(postcode) >= 2 GROUP BY pfx ")->fetchAll(); $stateAgg = []; foreach ($rawStates as $r) { $st = $stateMap[$r['pfx']] ?? 'Other'; $stateAgg[$st] = ($stateAgg[$st] ?? 0) + (int)$r['c']; } arsort($stateAgg); $topStates = array_slice($stateAgg, 0, 6, true); $totalStates = 0; foreach (array_keys($stateAgg) as $s) { if ($s !== 'Other') $totalStates++; } } catch (Exception $e) { error_log('panel-book states: ' . $e->getMessage()); } } // Helpers function inFmt($n) { return number_format((int)$n); } function pct($num, $den) { return $den > 0 ? round($num / $den * 100, 1) . '%' : '0%'; } ?>
Relevant Reflex Consulting, INDIA
Download the latest snapshot of our verified Indian survey panel. Data refreshes the moment new members verify their accounts.
Member counts, demographics, and geographic distribution change continuously as new panelists verify their accounts. The PDF you download today may differ from one downloaded an hour later. Always download the latest version when referring to current panel capacity for a project.
Geographic data loading…
The PDF is generated on-demand with the freshest data at the moment you click. No cached copies, no stale numbers — what you get is exactly what our panel looks like right now.
Download Panel Book (PDF)