📚 Sistem Ujian Online

Backend API untuk Sistem Ujian Online menggunakan PHP 8 dan MySQL

📋 Setup Awal

1. Import file database.sql ke MySQL

2. Sesuaikan konfigurasi database di file config.php jika diperlukan

3. Semua API menerima input JSON dan mengembalikan output JSON

4. Gunakan header: Content-Type: application/json

API 1: Masuk Ujian

POST api/masuk_ujian.php

Input JSON:

{ "nisn": "12345", "nama": "Andi Wijaya", "tingkatan": "X", "lembaga": "SMA Negeri 1", "kode_pembelajaran": "PAI01" }

Output Sukses:

{ "success": true, "ujian_id": "1", "nama_ujian": "PTS PAI", "status": "aktif", "sudah_mengerjakan": false, "tampilkan_hasil": true }
Catatan: API ini akan otomatis mendaftarkan siswa baru atau memperbarui data siswa lama berdasarkan NISN, lalu mengaktifkan sesi ujian.

API 2: Cek Sesi Aktif

POST api/cek_sesi_aktif.php

Input JSON:

{ "nisn": "12345" }

Output:

{ "success": true, "ada_sesi": true, "ujian_id": "1", "nama_ujian": "PTS PAI", "kode_pembelajaran": "PAI01", "status": "aktif" }

Atau jika tidak ada sesi:

{ "success": true, "ada_sesi": false }

API 3: Get Soal

POST api/get_soal.php

Input JSON:

{ "nisn": "12345", "kode_pembelajaran": "PAI01" }

Output:

{ "success": true, "soal_pilgan": [ { "id": 1, "nomor": 1, "pertanyaan": "Apa arti dari kata 'Iman'?", "opsi_a": "Percaya", "opsi_b": "Takut", "opsi_c": "Harap", "opsi_d": "Syukur", "bobot": 2.00 } ], "soal_uraian": [ { "id": 4, "nomor": 4, "pertanyaan": "Jelaskan pengertian tauhid menurut Islam!", "bobot": 5.00 } ], "total_soal": 5 }
PENTING: API ini tidak mengirim jawaban_benar untuk soal pilihan ganda. Hanya mengirim pertanyaan dan opsi.

API 4: Submit Jawaban

POST api/submit_jawaban.php

Input JSON:

{ "nisn": "12345", "kode_pembelajaran": "PAI01", "jawaban": [ { "jenis_soal": "pg", "soal_id": "10", "jawaban": "A" }, { "jenis_soal": "uraian", "soal_id": "20", "jawaban": "Penjelasan siswa" } ] }

Output:

{ "success": true, "nilai": 85.00, "tampilkan_hasil": true, "total_soal_dijawab": 2, "total_nilai": 17.00, "total_bobot": 20.00 }
Proses: Sistem akan menyimpan seluruh jawaban, mengoreksi otomatis untuk soal pilihan ganda, menghitung total nilai, dan mengatur kode_pembelajaran_aktif siswa menjadi NULL.

API 5: Get Hasil

POST api/get_hasil.php

Input JSON:

{ "nisn": "12345", "kode_pembelajaran": "PAI01" }

Output jika tampilkan_hasil=1:

{ "success": true, "nilai": 85.00, "detail": [ { "jenis_soal": "pg", "pertanyaan": "Apa arti dari kata 'Iman'?", "jawaban_siswa": "A", "jawaban_benar": "A", "benar": true, "nilai": 2.00, "bobot": 2.00 } ], "total_soal_dijawab": 5, "total_nilai": 85.00, "total_bobot": 100.00 }

Output jika tampilkan_hasil=0:

{ "success": false, "message": "Hasil belum dapat ditampilkan" }

🔧 Data Dummy yang Tersedia

Users: admin/admin123, guru1/admin123

Siswa: NISN 12345, 12346, 12347

Ujian: PAI01 (aktif), MTK01 (aktif), BIO01 (nonaktif)

Soal: 3 soal PG dan 2 soal uraian untuk ujian PAI01