Pengantar
TOEFL (Test of English as a Foreign Language) menjadi salah satu standar internasional untuk mengukur kemampuan bahasa Inggris bagi penutur nonInggris. Karena tingginya permintaan, banyak institusi pendidikan serta individu mencari cara belajar yang fleksibel dan terukur. Sebuah situs simulasi TOEFL berbasis web dapat menjadi solusi yang efisien, memungkinkan pengguna berlatih kapan saja dan di mana saja dengan soalsoal yang mirip dengan tes asli.
Pada artikel ini kami membahas rancangan sebuah platform simulasi TOEFL online yang dibangun dengan PHP sebagai bahasa pemrograman sisiserver dan MySQL sebagai basis data. Kami menjelaskan fitur utama, arsitektur, skema tabel, serta contoh kode penting yang dapat langsung diterapkan.
Fitur Utama
- Pendaftaran & Login Registrasi dengan email, verifikasi, dan otentikasi aman menggunakan password hash.
- Pilih Paket Simulasi Paket tes penuh, tes berdurasi singkat, atau fokus pada satu bagian (Reading, Listening, Speaking, Writing).
- Bank Soal Dinamis Soal disimpan di tabel MySQL; setiap sesi mengambil soal secara acak untuk menghindari pola.
- Timer Otomatis Menghitung waktu bagi tiap bagian sesuai standar TOEFL (mis. Reading 60menit, Listening 45menit).
- Penilaian Otomatis Untuk bagian Reading, Listening, dan Grammar, skor dihitung otomatis; bagian Speaking & Writing disimpan untuk penilaian manusia.
- Riwayat & Analisis Pengguna dapat melihat hasil tes sebelumnya, grafik progres, dan rekomendasi materi belajar.
- Admin Panel Mengelola soal, mengunggah audio untuk Listening, serta menilai tugas Speaking/Writing.
Arsitektur Sistem
Struktur umum aplikasi dibagi menjadi tiga lapisan utama:
- Presentation Layer HTML, CSS, dan JavaScript (Bootstrap atau Tailwind) untuk antarmuka pengguna.
- Application Layer PHP berperan sebagai controller yang memproses permintaan, mengendalikan logika bisnis, dan berinteraksi dengan database.
- Data Layer MySQL menyimpan semua data pengguna, soal, hasil tes, dan log aktivitas.
Diagram alur singkat:
Pengguna (HTTP Request) index.php Controller Model (MySQL) View (HTML)
Seluruh komunikasi menggunakan protokol HTTPS untuk menjamin keamanan data.
Desain Database
Berikut adalah tabel utama yang diperlukan:
| Nama Tabel | Deskripsi |
|---|---|
| users | Data akun pengguna (email, password_hash, nama, status) |
| tests | Rekaman tiap kali pengguna memulai simulasi (user_id, start_time, end_time, total_score) |
| questions | Bank soal (type, content, audio_path, correct_option, level) |
| test_questions | Mapping soal ke sesi tes (test_id, question_id, user_answer, is_correct) |
| speaking_responses | File audio jawaban Speaking (test_id, question_id, file_path, score) |
| writing_responses | Jawaban tulisan (test_id, question_id, essay_text, score) |
| admin_users | Akun admin untuk mengelola konten |
Contoh perintah SQL untuk membuat tabel users:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(255) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, full_name VARCHAR(100), registered_at DATETIME DEFAULT CURRENT_TIMESTAMP, status ENUM('active','blocked') DEFAULT 'active'); Contoh Kode Penting
1. Koneksi Database (config.php)
PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,];try { $pdo = new PDO($dsn, $user, $pass, $options);} catch (PDOException $e) { exit('Koneksi gagal: '.$e->getMessage());}?> 2. Registrasi Pengguna (register.php)
prepare('INSERT INTO users (email,password_hash,full_name) VALUES (?,?,?)'); $stmt->execute([$email,$hash,$nama]); header('Location: login.php'); exit;}?><form method="post"> Email: <input type="email" name="email" required><br> Nama: <input type="text" name="nama" required><br> Password: <input type="password" name="password" required><br> <button type="submit">Daftar</button></form> 3. Pengambilan Soal Acak (fetch_questions.php)
prepare('SELECT * FROM questions WHERE type = ? ORDER BY RAND() LIMIT ?');$stmt->execute([$section,$limit]);$questions = $stmt->fetchAll();header('Content-Type: application/json');echo json_encode($questions);?> 4. Menyimpan Jawaban (save_answer.php)
prepare('SELECT correct_option FROM questions WHERE id = ?');$stmt->execute([$questionId]);$correct = $stmt->fetchColumn();$isCorrect = ($userAns == $correct) ? 1 : 0;$ins = $pdo->prepare('INSERT INTO test_questions (test_id,question_id,user_answer,is_correct) VALUES (?,?,?,?)');$ins->execute([$testId,$questionId,$userAns,$isCorrect]);?> Kesimpulan
Situs simulasi TOEFL berbasis PHP & MySQL dapat memberikan pengalaman belajar yang interaktif, terukur, dan dapat diakses secara global. Dengan memanfaatkan struktur tabel yang terorganisir, logika pemilihan soal acak, serta mekanisme penilaian otomatis, platform ini mampu mensimulasikan kondisi tes yang sesungguhnya. Penambahan modul analisis progres dan penilaian manual untuk Speaking & Writing melengkapi sistem sehingga cocok untuk lembaga kursus maupun individu yang serius mempersiapkan TOEFL.
Pengembangan selanjutnya dapat mencakup integrasi API AI untuk penilaian tulisan, penggunaan WebSocket untuk sinkronisasi waktu, serta penyediaan aplikasi mobile dengan backend yang sama.
