Panduan Lengkap Membuat Web Ujian Online dengan PHP dan MySQL
Membuat sistem ujian online secara mandiri adalah proyek fundamental yang sangat baik untuk menguasai dasar-dasar pemrograman web dinamis. Dengan menggunakan kombinasi PHP sebagai bahasa sisi server dan MySQL sebagai sistem manajemen basis data (DBMS), kita dapat membangun platform yang efisien untuk mengelola soal, menjalankan tes secara real-time, dan menampilkan hasilnya.
Mengapa PHP dan MySQL?
PHP dan MySQL (sering disebut sebagai tumpukan LAMP/WAMP/MAMP) telah menjadi tulang punggung pengembangan web selama bertahun-tahun. Keunggulannya terletak pada:
- Gratis dan Sumber Terbuka: Tidak memerlukan biaya lisensi perangkat lunak.
- Kemudahan Integrasi: PHP memiliki dukungan bawaan yang kuat untuk berinteraksi dengan MySQL.
- Komunitas Besar: Dokumentasi dan solusi untuk masalah umum sangat mudah ditemukan.
Tahap 1: Perancangan Database (MySQL)
Struktur database adalah kunci keberhasilan sistem ujian. Setidaknya, kita memerlukan tiga tabel utama:
1. Tabel Pengguna (users)
Untuk menyimpan data peserta ujian atau admin yang mengelola sistem.
ID (INT, Primary Key), Nama (VARCHAR), Email (VARCHAR), Password (VARCHAR), Peran (ENUM: 'peserta', 'admin')
2. Tabel Soal (questions)
Menyimpan semua konten pertanyaan dan jawabannya.
ID (INT, PK), Teks_Soal (TEXT), Opsi_A (VARCHAR), Opsi_B (VARCHAR), Opsi_C (VARCHAR), Opsi_D (VARCHAR), Jawaban_Benar (CHAR)
3. Tabel Hasil Ujian (results)
Untuk mencatat skor dan metadata setiap kali peserta menyelesaikan ujian.
ID (INT, PK), User_ID (INT, Foreign Key), Skor (INT), Waktu_Mulai (DATETIME), Waktu_Selesai (DATETIME)
Tahap 2: Koneksi dan Pengelolaan Data (PHP)
Pada tahap ini, kita menggunakan PHP untuk menghubungkan aplikasi ke database MySQL. Koneksi yang aman menggunakan ekstensi MySQLi atau PDO sangat disarankan, terutama untuk mencegah serangan SQL Injection. Pastikan untuk selalu menggunakan *prepared statements* saat memproses input pengguna.
Konfigurasi Koneksi
Buat file konfigurasi (misalnya koneksi.php) untuk menyimpan kredensial server:
$host = 'localhost';
$db = 'ujian_db';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
Tahap 3: Logika Ujian
Proses inti ujian terdiri dari beberapa alur penting:
- Pengambilan Soal: PHP harus mengambil sejumlah soal secara acak dari tabel
questions. - Tampilan Antarmuka (Front-end): Menggunakan HTML dan CSS (dirancang responsif agar mudah diakses di perangkat mobile) untuk menampilkan soal dan opsi radio button.
- Pengiriman Jawaban: Ketika peserta menekan tombol "Selesai" atau waktu habis, semua jawaban dikirimkan via metode POST ke skrip pemroses.
- Penghitungan Skor: Skrip PHP membandingkan jawaban yang dikirimkan dengan kolom
Jawaban_Benardi database. Setiap kecocokan menambah skor. - Penyimpanan Hasil: Skor akhir, ID pengguna, dan durasi ujian disimpan ke tabel
results.
Keamanan dan Optimasi Mobile
Karena ini adalah sistem ujian, aspek keamanan tidak boleh diabaikan. Selain menggunakan prepared statements (seperti dijelaskan sebelumnya), pastikan sesi pengguna dikelola dengan baik menggunakan fitur $_SESSION di PHP. Untuk optimasi mobile, pastikan semua elemen layout (terutama formulir) menggunakan lebar penuh dan ukuran font yang mudah dibaca pada layar kecil. Penggunaan flexbox atau grid dalam CSS modern akan sangat membantu dalam memastikan tampilan yang rapi di berbagai resolusi perangkat.
Dengan fondasi PHP dan MySQL yang kuat, sistem ujian online Anda siap dikembangkan lebih lanjut, mungkin dengan menambahkan fitur seperti batas waktu per soal, sesi waktu terbatas, atau analisis statistik.