Maklumat Sekolah
"Dalam rangka menumbuhkembangkan minat dan potensi peserta didik SMPS Buddhis Bodhicitta dalam bidang akademik dan non-akademik, maka sekolah menyelenggarakan kegiatan pengembangan diri / Ekstrakurikuler yang harus diikuti oleh peserta didik secara berkesinambungan sejak kelas tujuh sampai kelas sembilan. Pelaksanaan dimulai bulan Agustus 2026. Adapun jadwal dan pilihan sebagai berikut :"
Formulir Pendaftaran Ekstrakurikuler
Silakan lengkapi data identitas diri dan pilih maksimal 3 ekstrakurikuler yang Anda minati.
Login Administrator
Silakan masukkan kata sandi Anda untuk mengakses simulator sistem, code exporter, dan panduan.
Total Pendaftaran Sukses
0
Total Ekstrakurikuler Aktif
12
๐ Rekapitulasi Peminat Ekstrakurikuler
Rekap akumulasi riil pilihan 1, 2, dan 3 dari formulir pendaftaran.
| No | Nama Ekstrakurikuler | Pilihan 1 | Pilihan 2 | Pilihan 3 | Total Peminat | Persentase Popularitas |
|---|
๐ข Rekapitulasi Pendaftaran Berdasarkan Kelas
Jumlah siswa terdaftar per kelas. Klik pada kartu kelas untuk menampilkan rincian siswa yang terdaftar di kelas tersebut.
๐ Rekapitulasi Pendaftaran Per Kelas
Rincian pendaftaran ekstrakurikuler siswa diurutkan berdasarkan kelas.
๐ Rekapitulasi Per Ekstrakurikuler
Daftar siswa yang mendaftar pada setiap ekstrakurikuler beserta asal kelasnya.
Simulasi Backend MySQL & phpMyAdmin Live Console
Kueri pendaftaran instan tanpa syarat master data, disimpan langsung ke tabel transaksi virtual.
| id_eskul (PK) | nama_eskul | guru_pembimbing | hari / waktu | jumlah_pendaftar |
|---|
| id_pendaftaran (PK) | nama_siswa | nis | kelas | pilihan_1 (FK) | pilihan_2 (FK) | pilihan_3 (FK) | created_at | Aksi |
|---|---|---|---|---|---|---|---|---|
| Belum ada transaksi pendaftaran yang disimpan. | ||||||||
Export File Kode Produksi
Silakan salin kode produksi di bawah untuk diletakkan pada folder server lokal Anda (misal: `/xampp/htdocs/pendaftaran-eskul/`).
-- -----------------------------------------------------------------------------
-- FILE: database_schema.sql
-- Database: u954166245_eskul_smp_new (T.P 2026/2027)
-- Solusi Anti-Error #1701: Menggunakan Drop Table Berurutan Sebelum Pembuatan Ulang
-- -----------------------------------------------------------------------------
CREATE DATABASE IF NOT EXISTS u954166245_eskul_smp_new;
USE u954166245_eskul_smp_new;
-- Menghilangkan dependensi foreign key sebelum memproses pembuatan ulang tabel
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS pendaftaran_eskul;
DROP TABLE IF EXISTS eskul_master;
SET FOREIGN_KEY_CHECKS = 1;
-- 1. Tabel eskul_master (Tanpa batasan kuota / Unlimited slots)
CREATE TABLE eskul_master (
id_eskul INT AUTO_INCREMENT PRIMARY KEY,
nama_eskul VARCHAR(100) NOT NULL,
guru_pembimbing VARCHAR(100) NOT NULL,
hari VARCHAR(50) NOT NULL,
waktu VARCHAR(50) NOT NULL,
tempat VARCHAR(100) NOT NULL,
jumlah_pendaftar INT DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 2. Tabel pendaftaran_eskul (Data Transaksi Terpisah NIS dan Kelas)
CREATE TABLE pendaftaran_eskul (
id_pendaftaran INT AUTO_INCREMENT PRIMARY KEY,
nama_siswa VARCHAR(100) NOT NULL,
nis VARCHAR(20) NOT NULL,
kelas VARCHAR(10) NOT NULL,
no_hp_siswa VARCHAR(20) NOT NULL,
no_hp_orangtua VARCHAR(20) NOT NULL,
pilihan_eskul_1 INT NOT NULL,
pilihan_eskul_2 INT DEFAULT NULL,
pilihan_eskul_3 INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (pilihan_eskul_1) REFERENCES eskul_master(id_eskul) ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (pilihan_eskul_2) REFERENCES eskul_master(id_eskul) ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (pilihan_eskul_3) REFERENCES eskul_master(id_eskul) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- -----------------------------------------------------------------------------
-- SEED DATA AWAL (BERDASARKAN DATA PRD)
-- -----------------------------------------------------------------------------
INSERT INTO eskul_master (nama_eskul, guru_pembimbing, hari, waktu, tempat, jumlah_pendaftar) VALUES
('Seni Tari', 'Sofyan Karim, S.T.', 'Selasa & Sabtu', '15.00 โ 17.00 / 09.30 โ 12.00', 'Ruang Tari', 0),
('Paduan Suara', 'Timbul Freddy Parsaulian S.Sn.', 'Sabtu', '08.00 โ 10.00', 'Ruang 313', 0),
('Basket', 'Samuel Sunarto', 'Selasa & Sabtu', '16.00 โ 18.00 / 10.00 โ 12.00', 'Lapangan Basket', 0),
('Futsal', 'Erlangga Gunawan', 'Sabtu', '08.00 โ 10.00', 'Lapangan', 0),
('Sains Klub', 'Moita Advenia Silalahi, S.Pd.', 'Sabtu', '10.30 โ 11.50', 'Laboratorium IPA', 0),
('Komputer Klub', 'Suwanto, S.Kom', 'Sabtu', '09.00 โ 10.30', 'Laboratorium Komputer', 0),
('Wushu', 'Prajna Prathama, S.H.', 'Sabtu', '10.00 โ 12.00', 'Lapangan lantai II', 0),
('Mandarin Klub', 'Kenny Calnelius Winata, S.Kom', 'Sabtu', '07.30 โ 08.50', 'Ruang 313', 0),
('Inggris Klub', 'Dewi Hasan, S.S.', 'Sabtu', '07.30 โ 08.50', 'Laboratorium Bahasa', 0),
('Gu Zheng', 'Jolin Chuawanta', 'Sabtu', '07.30 โ 08.30 / 08.30 โ 09.30', 'Ruang Seni', 0),
('Angklung', 'Samuel MT. Nainggolan S.Sn.', 'Sabtu', '09.00 โ 10.30', 'Ruang 403', 0),
('Robotik Klub', 'Suwanto, S.Kom', 'Sabtu', '07.30 โ 09.00', 'Laboratorium IPA', 0);
<?php
/**
* FILE: submit.php
* Endpoint Backend API untuk pendaftaran Eskul (Validasi Terpisah NIS & Kelas)
* Menggunakan transaksi database yang bersih, aman dari crash, dan tanpa batasan kuota.
* Pendaftaran langsung disimpan tanpa verifikasi database master siswa.
*/
header('Content-Type: application/json; charset=utf-8');
// Koneksi Database Produksi
$host = "localhost";
$username = "u954166245_eskul_smp_new";
$password = "Selam3941bcbc";
$database = "u954166245_eskul_smp_new";
$conn = new mysqli($host, $username, $password, $database);
if ($conn->connect_error) {
echo json_encode(["status" => "error", "message" => "Koneksi database gagal: " . $conn->connect_error]);
exit();
}
// Hanya menerima request POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo json_encode(["status" => "error", "message" => "Metode request tidak diizinkan."]);
exit();
}
// Mengambil Data Raw Post JSON
$inputRaw = file_get_contents("php://input");
$data = json_decode($inputRaw, true);
if (!$data) {
echo json_encode(["status" => "error", "message" => "Format data salah."]);
exit();
}
$nama_siswa = trim($data['nama_siswa'] ?? '');
$nis = trim($data['nis'] ?? '');
$kelas = trim($data['kelas'] ?? '');
$no_hp_siswa = trim($data['no_hp_siswa'] ?? '');
$no_hp_orangtua = trim($data['no_hp_orangtua'] ?? '');
$pilihan = $data['pilihan_eskul'] ?? []; // Array ID eskul
// Validasi Kelengkapan Isian Form
if (empty($nama_siswa) || empty($nis) || empty($kelas) || empty($no_hp_siswa) || empty($no_hp_orangtua)) {
echo json_encode(["status" => "error", "message" => "Seluruh kolom identitas wajib diisi!"]);
exit();
}
// Validasi Jumlah Pilihan Eskul (1 s.d. 3)
$total_pilihan = count($pilihan);
if ($total_pilihan < 1 || $total_pilihan > 3) {
echo json_encode(["status" => "error", "message" => "Siswa wajib memilih minimal 1 dan maksimal 3 kegiatan ekstrakurikuler."]);
exit();
}
// Siapkan parameter ID pilihan untuk dimasukkan ke tabel pendaftaran
$pilihan_1 = $pilihan[0];
$pilihan_2 = isset($pilihan[1]) ? $pilihan[1] : null;
$pilihan_3 = isset($pilihan[2]) ? $pilihan[2] : null;
// =================================----------------------------
// MULAI TRANSAKSI DATABASE (Pencegahan Race Condition)
// =================================----------------------------
$conn->begin_transaction();
try {
// 1. Cek apakah Siswa dengan NIS tersebut sudah pernah melakukan pendaftaran sebelumnya (Proteksi submit ganda)
$stmtCekDaftar = $conn->prepare("SELECT id_pendaftaran FROM pendaftaran_eskul WHERE nis = ? LIMIT 1");
$stmtCekDaftar->bind_param("s", $nis);
$stmtCekDaftar->execute();
if ($stmtCekDaftar->get_result()->num_rows > 0) {
throw new Exception("Siswa dengan NIS ($nis) sudah terdaftar dalam sistem sebelumnya.");
}
$semua_pilihan = array_filter([$pilihan_1, $pilihan_2, $pilihan_3]);
// 2. Update data penambahan kuota terisi di eskul_master (Tanpa batasan limit kuota)
foreach ($semua_pilihan as $id_eskul) {
$stmtUpdateKuota = $conn->prepare("UPDATE eskul_master SET jumlah_pendaftar = jumlah_pendaftar + 1 WHERE id_eskul = ?");
$stmtUpdateKuota->bind_param("i", $id_eskul);
$stmtUpdateKuota->execute();
}
// 3. Masukkan data pendaftaran langsung ke tabel transaksi pendaftaran_eskul
$stmtInsert = $conn->prepare("INSERT INTO pendaftaran_eskul (nama_siswa, nis, kelas, no_hp_siswa, no_hp_orangtua, pilihan_eskul_1, pilihan_eskul_2, pilihan_eskul_3) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
$stmtInsert->bind_param("sssssiii", $nama_siswa, $nis, $kelas, $no_hp_siswa, $no_hp_orangtua, $pilihan_1, $pilihan_2, $pilihan_3);
$stmtInsert->execute();
// Commit transaksi jika seluruh tahapan di atas berhasil tanpa error
$conn->commit();
echo json_encode([
"status" => "success",
"message" => "Selamat! Pendaftaran atas nama $nama_siswa berhasil disimpan."
]);
} catch (Exception $e) {
// Batalkan seluruh perubahan jika terjadi kesalahan di tengah jalan
$conn->rollback();
echo json_encode([
"status" => "error",
"message" => "Gagal menyimpan pendaftaran: " . $e->getMessage()
]);
}
$conn->close();
?>
Panduan Instalasi & Deploy Website
Ikuti instruksi langkah-demi-langkah berikut untuk mengaktifkan sistem pendaftaran di server lokal sekolah Anda.
Persiapkan Local Server
Unduh dan pasang aplikasi XAMPP. Aktifkan modul Apache Web Server dan MySQL di XAMPP Control Panel Anda.
Buat Folder Proyek di htdocs
Akses folder instalasi xampp Anda di `C:/xampp/htdocs/`, lalu buat sebuah
folder baru bernama pendaftaran-eskul.
Import Database di phpMyAdmin
Buka peramban browser and akses http://localhost/phpmyadmin/.
Buat database baru bernama u954166245_eskul_smp_new. Pilih database
tersebut, buka tab SQL, salin seluruh isi kode SQL dari tab
Code Exporter di atas, tempel, lalu
klik Go.
Buat File PHP dan Hubungkan Frontend
Salin file backend submit.php dan simpan di dalam folder tersebut. Untuk frontend, buat file bernama index.html di folder yang sama, lalu sesuaikan pemanggilan API dari input NIS dan Kelas yang terpisah ini.
Penanganan Relasi SQL & Sistem Tanpa Batas
Mengapa Drop Berurutan Itu Penting?
Perintah TRUNCATE tidak
diperbolehkan pada tabel induk yang dirujuk oleh foreign key tabel anak,
bahkan dengan status FOREIGN_KEY_CHECKS = 0 dalam
beberapa sesi query sql majemuk. Skema di atas menggunakan `DROP TABLE IF
EXISTS` berurutan sehingga 100% lancar saat import ulang.
Sistem Pendaftaran Tanpa Batas
Sesuai instruksi pemutakhiran, batasan kapasitas kuota maksimal telah ditiadaan. Setiap siswa dapat mendaftar dengan bebas di eskul mana pun. Jumlah pendaftar diringkas dalam diagram statistik real-time sehingga admin dapat memantau eskul paling populer secara instan.