0; } function qcount($konek, $sql) { $r = @mysqli_query($konek, $sql); if (!$r) return 0; $row = mysqli_fetch_row($r); return $row ? (int)$row[0] : 0; } function qval($konek, $sql) { $r = @mysqli_query($konek, $sql); if (!$r) return null; $row = mysqli_fetch_row($r); return $row ? $row[0] : null; } function qall($konek, $sql) { $out = []; $r = @mysqli_query($konek, $sql); if (!$r) return $out; while ($row = mysqli_fetch_assoc($r)) $out[] = $row; return $out; } function tcount($konek, $table) { if (!tableExists($konek, $table)) return 0; return qcount($konek, "SELECT COUNT(*) FROM `$table`"); } function fmtNum($n) { return number_format((float)$n, 0, ',', '.'); } function fmtTgl($s) { if (!$s) return '-'; $t = strtotime($s); if (!$t) return h($s); return date('d M Y, H:i', $t); } function badgeSex($j) { $j = strtolower(trim((string)$j)); if (strpos($j, 'l') === 0) return 'Laki-laki'; if (strpos($j, 'p') === 0) return 'Perempuan'; return ''.h($j ?: '-').''; } /* --------------------------------------------------------------------- KPI — RINGKASAN SISTEM --------------------------------------------------------------------- */ $kpi_atlet_terdaftar = tcount($konek, 'dataatlet'); $kpi_akun_atlet = tcount($konek, 'data_atlet'); $kpi_akun_atlet_aktif = tableExists($konek,'data_atlet') ? qcount($konek, "SELECT COUNT(*) FROM data_atlet WHERE status_kartu=1") : 0; $kpi_cabor = tcount($konek, 'mastercabor'); $kpi_kabkota = tcount($konek, 'dataprokota'); $kpi_provinsi = tcount($konek, 'dataprovinsi'); $kpi_absensi = tcount($konek, 'absensi_atlet'); $kpi_pemindaian = tcount($konek, 'tb_pemindaian_atlet'); $kpi_aktivasi_qr = tcount($konek, 'log_aktivasi_qr'); $kpi_laporan_performa = tcount($konek, 'laporan_performa_kirim'); $kpi_pesan = tcount($konek, 'pesan_pelatih_atlet'); $kpi_sertifikat = tcount($konek, 'sertifikat_pelatih'); $kpi_tes_dase = tcount($konek, 'hasil_tes_dase'); $kpi_riwayat_melatih = tcount($konek, 'riwayat_melatih'); $kpi_pemindaian_hariini = tableExists($konek,'tb_pemindaian_atlet') ? qcount($konek, "SELECT COUNT(*) FROM tb_pemindaian_atlet WHERE DATE(waktu_scan)=CURDATE()") : 0; $kpi_absensi_hariini = tableExists($konek,'absensi_atlet') ? qcount($konek, "SELECT COUNT(*) FROM absensi_atlet WHERE DATE(waktu_scan)=CURDATE()") : 0; $kpi_aktivasi_hariini = tableExists($konek,'log_aktivasi_qr') ? qcount($konek, "SELECT COUNT(*) FROM log_aktivasi_qr WHERE DATE(waktu_aktivasi)=CURDATE()") : 0; /* Total pelatih unik (gabungan dari beberapa tabel referensi) */ $kpi_pelatih = 0; $pelatihUnionParts = []; if (tableExists($konek,'dataatlet')) $pelatihUnionParts[] = "SELECT kode_pelatih k FROM dataatlet WHERE kode_pelatih IS NOT NULL AND kode_pelatih<>''"; if (tableExists($konek,'riwayat_melatih')) $pelatihUnionParts[] = "SELECT kode_pelatih k FROM riwayat_melatih WHERE kode_pelatih IS NOT NULL AND kode_pelatih<>''"; if (tableExists($konek,'sertifikat_pelatih')) $pelatihUnionParts[] = "SELECT kode_pelatih k FROM sertifikat_pelatih WHERE kode_pelatih IS NOT NULL AND kode_pelatih<>''"; if (tableExists($konek,'datakelompok')) $pelatihUnionParts[] = "SELECT kode_pelatih k FROM datakelompok WHERE kode_pelatih IS NOT NULL AND kode_pelatih<>''"; if (tableExists($konek,'tb_pemindaian_atlet')) $pelatihUnionParts[] = "SELECT id_pelatih k FROM tb_pemindaian_atlet WHERE id_pelatih IS NOT NULL AND id_pelatih<>''"; if (!empty($pelatihUnionParts)) { $kpi_pelatih = qcount($konek, "SELECT COUNT(*) FROM (SELECT DISTINCT k FROM (".implode(" UNION ALL ", $pelatihUnionParts).") u) t"); } /* Total pengawas unik */ $kpi_pengawas = tableExists($konek,'tb_pemindaian_atlet') ? qcount($konek, "SELECT COUNT(DISTINCT kode_pengawas) FROM tb_pemindaian_atlet WHERE kode_pengawas IS NOT NULL AND kode_pengawas<>''") : 0; /* --------------------------------------------------------------------- DATA CHART --------------------------------------------------------------------- */ // 1) Jenis kelamin atlet $c_gender = qall($konek, tableExists($konek,'dataatlet') ? "SELECT COALESCE(NULLIF(TRIM(jenisklmin),''),'Tidak diisi') lbl, COUNT(*) jml FROM dataatlet GROUP BY lbl ORDER BY jml DESC" : "SELECT 1 lbl WHERE 1=0"); // 2) Kategori atlet (senior/yunior/prayunior/youth) $c_kategori = qall($konek, tableExists($konek,'dataatlet') ? "SELECT COALESCE(NULLIF(TRIM(kategriat),''),'Tidak diisi') lbl, COUNT(*) jml FROM dataatlet GROUP BY lbl ORDER BY jml DESC" : "SELECT 1 lbl WHERE 1=0"); // 3) Atlet per cabang olahraga (top 12, dari log pemindaian pengawasan) $c_cabor = qall($konek, tableExists($konek,'tb_pemindaian_atlet') ? "SELECT COALESCE(NULLIF(TRIM(cabor),''),'Tidak diisi') lbl, COUNT(DISTINCT nik) jml FROM tb_pemindaian_atlet GROUP BY lbl ORDER BY jml DESC LIMIT 12" : "SELECT 1 lbl WHERE 1=0"); if (empty($c_cabor) && tableExists($konek,'absensi_atlet')) { $c_cabor = qall($konek, "SELECT COALESCE(NULLIF(TRIM(cabor),''),'Tidak diisi') lbl, COUNT(DISTINCT nik) jml FROM absensi_atlet GROUP BY lbl ORDER BY jml DESC LIMIT 12"); } // 4) Trend pemantauan pengawasan 14 hari terakhir $c_trend_pemindaian = qall($konek, tableExists($konek,'tb_pemindaian_atlet') ? "SELECT DATE(waktu_scan) tgl, COUNT(*) jml FROM tb_pemindaian_atlet WHERE waktu_scan >= DATE_SUB(CURDATE(), INTERVAL 13 DAY) GROUP BY tgl ORDER BY tgl ASC" : "SELECT 1 tgl WHERE 1=0"); // 5) Trend absensi latihan 14 hari terakhir $c_trend_absensi = qall($konek, tableExists($konek,'absensi_atlet') ? "SELECT DATE(waktu_scan) tgl, COUNT(*) jml FROM absensi_atlet WHERE waktu_scan >= DATE_SUB(CURDATE(), INTERVAL 13 DAY) GROUP BY tgl ORDER BY tgl ASC" : "SELECT 1 tgl WHERE 1=0"); // 6) Aktivasi QR: Pelatih vs Atlet $c_qr_jenis = qall($konek, tableExists($konek,'log_aktivasi_qr') ? "SELECT jenis_user lbl, COUNT(*) jml FROM log_aktivasi_qr GROUP BY jenis_user ORDER BY jml DESC" : "SELECT 1 lbl WHERE 1=0"); // 7) Top 10 lokasi pemantauan pengawasan (hasil reverse-geocoding / nama lokasi) $c_lokasi_pengawasan = qall($konek, tableExists($konek,'tb_pemindaian_atlet') ? "SELECT COALESCE(NULLIF(TRIM(lokasi),''),'Lokasi tidak tercatat') lbl, COUNT(*) jml FROM tb_pemindaian_atlet GROUP BY lbl ORDER BY jml DESC LIMIT 10" : "SELECT 1 lbl WHERE 1=0"); // 8) Top 10 pelatih paling aktif (berdasar jumlah pemantauan atlet binaannya) $c_pelatih_aktif = qall($konek, tableExists($konek,'tb_pemindaian_atlet') ? "SELECT COALESCE(NULLIF(TRIM(pelatih),''),'Tidak diketahui') lbl, COUNT(*) jml FROM tb_pemindaian_atlet GROUP BY lbl ORDER BY jml DESC LIMIT 10" : "SELECT 1 lbl WHERE 1=0"); // 9) Top 10 pengawas paling aktif $c_pengawas_aktif = qall($konek, tableExists($konek,'tb_pemindaian_atlet') ? "SELECT COALESCE(NULLIF(TRIM(nama_pengawas),''),'Tidak diketahui') lbl, COUNT(*) jml FROM tb_pemindaian_atlet GROUP BY lbl ORDER BY jml DESC LIMIT 10" : "SELECT 1 lbl WHERE 1=0"); // 10) Rata-rata hasil tes DASE per cabor (top 10 berdasar jumlah peserta) $c_dase = qall($konek, tableExists($konek,'hasil_tes_dase') ? "SELECT COALESCE(NULLIF(TRIM(cabor),''),'Tidak diisi') lbl, COUNT(*) jml, AVG(hasil_akhir) rata FROM hasil_tes_dase GROUP BY lbl ORDER BY jml DESC LIMIT 10" : "SELECT 1 lbl WHERE 1=0"); // 11) Provinsi -> jumlah kab/kota $c_wilayah = qall($konek, (tableExists($konek,'dataprovinsi') && tableExists($konek,'dataprokota')) ? "SELECT p.namaprovinsi lbl, COUNT(k.idkota) jml FROM dataprovinsi p LEFT JOIN dataprokota k ON k.idprov=p.kdpro GROUP BY p.kdpro, p.namaprovinsi ORDER BY jml DESC" : "SELECT 1 lbl WHERE 1=0"); // 12) Sertifikat pelatih per jenis sertifikat $c_sertifikat = qall($konek, tableExists($konek,'sertifikat_pelatih') ? "SELECT COALESCE(NULLIF(TRIM(nama_sertifikat),''),'Tidak diisi') lbl, COUNT(*) jml FROM sertifikat_pelatih GROUP BY lbl ORDER BY jml DESC LIMIT 10" : "SELECT 1 lbl WHERE 1=0"); /* --------------------------------------------------------------------- DATA TABEL (dibatasi agar halaman tetap ringan; total asli tetap ditampilkan) --------------------------------------------------------------------- */ $LIMIT = 300; $t_atlet = qall($konek, tableExists($konek,'dataatlet') ? "SELECT nik, namaatlet, jenisklmin, kategriat, tempatlahir, tgllahir, nowa, kode_pelatih, kode_atlet FROM dataatlet ORDER BY nik DESC LIMIT $LIMIT" : "SELECT 1 WHERE 1=0"); $t_pemindaian = qall($konek, tableExists($konek,'tb_pemindaian_atlet') ? "SELECT nama, nik, kategori, jns_klmn, cabor, pelatih, nama_pengawas, lokasi, waktu_scan FROM tb_pemindaian_atlet ORDER BY waktu_scan DESC LIMIT $LIMIT" : "SELECT 1 WHERE 1=0"); $t_absensi = qall($konek, tableExists($konek,'absensi_atlet') ? "SELECT nama, nik, kategori, jenis_kelamin, cabor, pelatih, lokasi, waktu_scan FROM absensi_atlet ORDER BY waktu_scan DESC LIMIT $LIMIT" : "SELECT 1 WHERE 1=0"); $t_qr = qall($konek, tableExists($konek,'log_aktivasi_qr') ? "SELECT jenis_user, nama, jenis_kartu, nomor_identitas, nama_lokasi, waktu_aktivasi FROM log_aktivasi_qr ORDER BY waktu_aktivasi DESC LIMIT $LIMIT" : "SELECT 1 WHERE 1=0"); $t_laporan = qall($konek, tableExists($konek,'laporan_performa_kirim') ? "SELECT kode_pelatih, nik_atlet, label_periode, tgl_awal, tgl_akhir, waktu_kirim, sudah_dibaca FROM laporan_performa_kirim ORDER BY waktu_kirim DESC LIMIT $LIMIT" : "SELECT 1 WHERE 1=0"); $t_riwayat = qall($konek, tableExists($konek,'riwayat_melatih') ? "SELECT kode_pelatih, nama_klub, tahun_mulai, tahun_selesai, keterangan FROM riwayat_melatih ORDER BY tahun_mulai DESC LIMIT $LIMIT" : "SELECT 1 WHERE 1=0"); $t_sertifikat = qall($konek, tableExists($konek,'sertifikat_pelatih') ? "SELECT kode_pelatih, nama_sertifikat, uploaded_at FROM sertifikat_pelatih ORDER BY uploaded_at DESC LIMIT $LIMIT" : "SELECT 1 WHERE 1=0"); $t_dase = qall($konek, tableExists($konek,'hasil_tes_dase') ? "SELECT nama_peserta, umur, cabor, asal_daerah, nama_pelatih, nama_club, hasil_akhir, tanggal_tes FROM hasil_tes_dase ORDER BY tanggal_tes DESC LIMIT $LIMIT" : "SELECT 1 WHERE 1=0"); $t_pesan = qall($konek, tableExists($konek,'pesan_pelatih_atlet') ? "SELECT kode_pelatih, nik_atlet, isi_pesan, sudah_dibaca, waktu_kirim FROM pesan_pelatih_atlet ORDER BY waktu_kirim DESC LIMIT $LIMIT" : "SELECT 1 WHERE 1=0"); $t_wilayah = qall($konek, (tableExists($konek,'dataprovinsi') && tableExists($konek,'dataprokota')) ? "SELECT p.namaprovinsi, k.namakota FROM dataprokota k LEFT JOIN dataprovinsi p ON p.kdpro=k.idprov ORDER BY p.namaprovinsi, k.namakota" : "SELECT 1 WHERE 1=0"); $t_cabor = qall($konek, tableExists($konek,'mastercabor') ? "SELECT namcabor FROM mastercabor ORDER BY namcabor ASC" : "SELECT 1 WHERE 1=0"); $updated_at = date('d F Y, H:i:s'); ?> SPORTISU — Pusat Pemantauan & Pengawasan
Pusat Pemantauan & Pengawasan SPORTISU
Rekap menyeluruh seluruh aktivitas pembinaan atlet — kehadiran latihan, pemantauan pengawas lapangan, aktivasi kartu digital, hingga laporan performa — mencakup seluruh kabupaten/kota dan provinsi terdaftar.
‹ Halaman Utama
LIVE ·
Ringkasan Sistem indikator
Akumulasi seluruh tabel pada basis data sportisu_diery
Atlet Terdaftar🏅
kartu aktif dari akun
Pelatih Terdata🧑‍🏫
riwayat kepelatihan tercatat
Pengawas Aktif🛰️
pemantauan hari ini
Cabang Olahraga🥇
tercakup di seluruh wilayah binaan
Kabupaten / Kota🗺️
tersebar di provinsi
Log Pemantauan📡
total pemindaian pengawasan lapangan
Absensi Latihan
check-in hari ini
Aktivasi Kartu QR🔗
aktivasi hari ini
Laporan Performa📄
terkirim dari pelatih ke atlet binaan
Pesan Pelatih ↔ Atlet💬
total komunikasi tercatat
Sertifikat Pelatih🎓
dokumen sertifikasi terunggah
Hasil Tes DASE🧪
rekaman uji performa atlet
Analitik & Grafik
Distribusi & tren aktivitas seluruh sistem
Tren Pemantauan Pengawasan & Absensi Latihan
14 hari terakhir
Komposisi Atlet
Berdasarkan jenis kelamin
Atlet per Cabang Olahraga
12 cabor dengan atlet terbanyak
Kategori Jenjang Atlet
Senior / Yunior / Prayunior / Youth
Aktivasi Kartu QR
Pelatih vs Atlet
Sertifikat Pelatih
Berdasarkan jenis sertifikat
Rata-rata Hasil Tes DASE
Per cabang olahraga
Pemantauan Pengawasan Lapangan log
Menampilkan log terbaru
Top 10 Lokasi Pemantauan
Berdasarkan hasil reverse-geocoding
🗺️
Belum ada data lokasi pemantauan
LokasiJumlah
Pengawas Paling Aktif
Berdasarkan jumlah pemindaian atlet
🛰️
Belum ada data pengawas
Nama PengawasLog
Log Pemindaian Pengawasan Terbaru
Nama AtletNIKKategoriJKCaborPelatihPengawasLokasiWaktu Pemindaian
Data Atlet total
Menampilkan data terbaru
NIKNama AtletJKKategoriTempat LahirTgl LahirNo. WAKode PelatihKode Atlet
Riwayat Absensi Latihan Terbaru
total tercatat
NamaNIKKategoriJKCaborPelatihLokasiWaktu Scan
Pelatih & Sertifikasi
pelatih terdata · sertifikat
Riwayat Melatih
Kode PelatihKlubMulaiSelesaiKeterangan
Sertifikat Pelatih
Kode PelatihNama SertifikatDiunggah
Hasil Tes DASE
total rekaman
PesertaUmurCaborAsal DaerahPelatihKlubHasil AkhirTanggal Tes
Log Aktivasi Kartu QR total
Menampilkan data terbaru
JenisNamaJenis KartuNo. IdentitasLokasi AktivasiWaktu
Laporan Performa & Pesan
laporan · pesan
Laporan Performa Terkirim
Kode PelatihNIK AtletPeriodeTgl AwalTgl AkhirWaktu KirimStatus
Sudah dibaca' : 'Belum dibaca' ?>
Pesan Pelatih ↔ Atlet
Kode PelatihNIK AtletIsi PesanStatusWaktu Kirim
Terbaca' : 'Belum' ?>
Referensi Wilayah & Cabang Olahraga
provinsi · kab/kota · cabor
Sebaran Kab/Kota per Provinsi
Daftar Provinsi & Kabupaten/Kota
ProvinsiKabupaten / Kota
Daftar Cabang Olahraga
Nama Cabang Olahraga
SPORTISU Command Center — dibangun otomatis dari basis data sportisu_diery Diperbarui WIB