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:

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:

  1. Pengambilan Soal: PHP harus mengambil sejumlah soal secara acak dari tabel questions.
  2. Tampilan Antarmuka (Front-end): Menggunakan HTML dan CSS (dirancang responsif agar mudah diakses di perangkat mobile) untuk menampilkan soal dan opsi radio button.
  3. Pengiriman Jawaban: Ketika peserta menekan tombol "Selesai" atau waktu habis, semua jawaban dikirimkan via metode POST ke skrip pemroses.
  4. Penghitungan Skor: Skrip PHP membandingkan jawaban yang dikirimkan dengan kolom Jawaban_Benar di database. Setiap kecocokan menambah skor.
  5. 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.