Dimasa pandemi seperti sekarang pembelajaran dilakukan online. Sehingga dibutuhkan sebuah elearning. Setiap elearning pasti membutuhkan fitur kuis untuk mengumpulkan nilai tugas siswa ataupun nilai ujian siswa. Dalam tutorial ini akan dibahas cara untuk membuat program kuis sederhana dengan PHP. Dalam program kuis sederhana ini akan ditampilan pertanyaan pilihan ganda secara acak atau random. Pilihan ganda yang ditampilkan juga diacak. Program kuis dengan php ini juga akan bisa menampilkan skor yang diperoleh oleh siswa dan juga detil hasilnya. Jawaban mana yang salah atau benar. Tutorial membuat kuis sederhana juga dilengkapi dengan video demonstrasi yang bisa ditonton lewat Youtube channel MyPHPtutorials, di video Tutorial PHP Membuat Kuis Sederhana
Berikut adalah langkah langkah yang akan dilakukan dalam membuat program kuis sederhana ini.
Bagi yang ingin melihat video demo di youtube, silahkan kunjungin di: Tutorial PHP Membuat Kuis Sederhana
Buatlah database misalnya menggunakan phpMyAdmin dengan nama kuis
. Kemudian tambahkan dua table pertanyaan
dan jawaban
dengan struktur seperti table di bawah.
Tabel Pertanyaan
Kolom | Tipe data | Keterangan |
---|---|---|
id | integer | primary key, auto increment |
deskripsi | text | |
skor | integer |
Tabel Jawaban
Kolom | Tipe Data | Keterangan |
---|---|---|
id | integer | primary key, auto increment |
id_pertanyaan | integer | foreign key ke id pertanyaan |
deskripsi | text | |
bener | tinyint | 1 kalau benar dan 0 kalau salah |
Struktur relasi table bisa dilihat di gambar di bawah
Gunakan phpMyAdmin untuk menyiapkan pertanyaan dan jawaban. Setelah table terbuat gunakan menu insert untuk menambahkan soal dan jawaban. Seperti gambar di bawah.
Dalam tutorial ini kita tidak akan membuat halaman untuk menambahkan atau mengedit soal dan jawaban ke table. Dalam video juga dijelaskan cara untuk menambahkan pertanyaan dan jawaban menggunakan phpMyAdmin. Jika anda ingin membuatnya silahkan kunjung tutorial Menyimpan Data & Menampilkan Beberapa Tabel.
Dalam tutorial ini kita akan menggunakan PHP PDO dari pada mysqli. Jika Anda tidak terbiasa dengan PHP PDO silahkan kunjungi terlebih dahulu tutorial PHP PDO MySQL, Simpan Edit Hapus Data dengan PDO.. Buatlah file koneksi.php
dan gunakan skrip / syntaks di bawah untuk membuat koneksi ke database.
<?php
$host = "mysql";
$user = "root";
$password = "change_me";
$database = "kuis";
return new PDO("mysql:host=$host;dbname=$database", $user, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
untuk membuat koneksi ke database kita membutuhkan informasi server / host, user, password dan nama database. Semuanya didefinisikan di baris 2 - 5 di atas. Kemudian di baris selanjutnya kita membuat sebuah object PDO untuk melakukan koneksi ke database.
Setelah memiliki file untuk membuat koneksi ke database, maka kita bisa menggunakannya untuk menampilkan soal yang akan diberikan ke siswa. Pertama buat lah file index.php
dan tambahkan kode html berikut.
<!DOCTYPE html>
<html>
<head>
<title>Kuis Sederhana</title>
</head>
<body>
<?php
?>
</body>
</html>
Pada bagian body html tambahkan untuk membaca data pertanyaan dan menampilkannya dalam sebuah list dengan nomor 1, 2, 3 dan seterusnya.
try {
$pdo = include "koneksi.php";
$query = $pdo->prepare("select * from pertanyaan order by rand() limit 50");
$query->execute();
echo '<ol>';
while ($pertanyaan = $query->fetch()) {
echo '<li>';
echo htmlentities($pertanyaan['deskripsi']);
echo '</li>';
}
echo '</ol>';
} catch (Exception $e) {
echo "Gagal menampilkan pertanyaan.";
}
Kalau diperhatikan lebih jelas di atas, untuk membuat tampilan pertanyaan yang acak atau random, maka digunakan SQL order by rand()
lengkapnya select * from pertanyaan order by rand() limit 50
. SQL ini akan mengambil data dari tabel pertanyaan dan hasilnya akan acak. Setiap orang yang membuka halaman kuis akan memilihat urutan soal yang berbeda. Jika soal yang ada lebih dari 50 soal maka bisa menampilkan soal yang berbeda untuk setiap orang. Di baris selanjutnya dilakukan interasi untuk menampilkan soal. Selanjutnya adalah menampilkan pilihan jawaban untuk setiap pertanyaan. Kode lengkap halaman ini seperti di bawah
<!DOCTYPE html>
<html>
<head>
<title>Kuis Sederhana</title>
</head>
<body>
<form action="hasil.php" method="POST">
<?php
try {
$pdo = include "koneksi.php";
$query = $pdo->prepare("select * from pertanyaan order by rand() limit 50");
$query->execute();
echo '<ol>';
while ($pertanyaan = $query->fetch()) {
echo '<li>';
echo htmlentities($pertanyaan['deskripsi']);
$query2 = $pdo->prepare("select * from jawaban where id_pertanyaan = :id_pertanyaan order by rand()");
$query2->execute(array("id_pertanyaan" => $pertanyaan['id']));
echo '<ol type="A">';
while($jawaban = $query2->fetch()) {
echo '<li>';
echo '<input type="radio" name="jawaban['.$pertanyaan['id'].']" value="'.$jawaban['id'].'"/> ';
echo htmlentities($jawaban['deskripsi']);
echo '</li>';
}
echo '</ol>';
echo '</li>';
}
echo '</ol>';
} catch (Exception $e) {
echo "Gagal menampilkan pertanyaan. ";
echo "Error: ".$e->getMessage();
}
?>
<button type="submit">Kirim Jawaban</button>
</form>
</body>
</html>
Pada baris ke-17 kita menggunakan SQL query untuk membaca jawaban pilihan ganda untuk pertanyaan yang sedang di tampilkan. Kembali kita menggunakan order by rand()
untuk menampilkan pilihan ganda acak. Baris ke-19 <ol type="A">
digunakan untuk menampilkan pilihan ganda dengan label A, B, C, D. Di baris selanjunya dilakukan iterasi untuk menampilkan pilihan ganda dengan radio button di depannya untuk memilih jawaban.
Perhatikan baris ke-22 <input type="radio" name="jawaban['.$pertanyaan['id'].']" value="'.$jawaban['id'].'"/>
, kode ini akan membuat radio button seperti <input type="radio" name="jawaban[1]" value="1"/>
. Setelah tombol kirim diklik maka radio button ini akan mengirim data ke server berupa array seperti di bawah:
array(
'1' => 2,
'2' => 4,
...
'{id_pertanyaan} => '{id jawaban yang dipilih siswa}'
}
Dengan demikian jawaban siswa dapat divalidasi dengan mudah. Kode di atas jika dijalankan di browse akan menghasilkan tampilan seperti gambar di bawah.
Setelah siswa menjawab pertanyaan yang ditampilkan maka kita perlu memvalidasi jawaban mereka dan menampilkan hasilnya. Buatlah file hasil.php
dan tambahkan kode html berikut:
<!DOCTYPE html>
<html>
<head>
<title>Hasil Kuis</title>
</head>
<body>
<h1>Hasil Kuis Anda</h1>
</body>
</html>
Kemudian di bagian body tambahkan kode php untuk validasi jawaban siswa.
<?php
$pdo = include "koneksi.php";
if (empty($_POST['jawaban']) === false) {
$html = '<ol>';
$totalSkor = 0;
foreach ($_POST['jawaban'] as $idPertanyaan => $idJawaban) {
// Query pertanyaan
$query = $pdo->prepare("select * from pertanyaan where id = :id");
$query->execute(array("id" => $idPertanyaan));
$pertanyaan = $query->fetch();
$html .= '<li>';
$html .= htmlentities($pertanyaan['deskripsi']);
// Query jawaban
$query2 = $pdo->prepare("select * from jawaban where id = :id and id_pertanyaan = :id_pertanyaan");
$query2->execute(array(
'id' => $idJawaban,
'id_pertanyaan' => $idPertanyaan
));
$jawaban = $query2->fetch();
if (!$jawaban) {
$html .= '<p style="color:red">Salah</p>';
} else {
$html .= '<p>Jawaban: '. $jawaban['deskripsi'].'</p>';
if ($jawaban['benar'] == 1) {
$html .= '<p style="color:green">Benar</p>';
$totalSkor += $pertanyaan['skor'];
} else {
$html .= '<p style="color:red">Salah</p>';
}
}
$html .= '</li>';
}
$html .= '</ol>';
// Tampilkan Skor
echo '<h1>Selamat Skor Anda: '.$totalSkor.'</h1>';
// Tampilan Detail Jawaban
echo '<h2>Detail Hasil Anda</h2>';
echo $html;
}
?>
Seperti disebutkan di atas jawaban siswa akan di kirim dalam bentuk array. Maka dilakukan iterasi untuk memvalidasi jawaban siswa mulai baris ke-6. Di baris ke-8 data soal dibaca ke database menggunakan id pertanyaan. Kemudian di baris ke-14 digunakan SQL query "select * from jawaban where id = :id and id_pertanyaan = :id_pertanyaan"
untuk mencari pilihan ganda berdasakan id pertanyaan dan id jawaban yang dipilih siswa. Di baris ke-20, jika data jawaban tidak ditemukan ditampilkan tulisan merah salah
. Di baris selanjutnya dilakukan pengecekan apakah jawaban yang dipilih siswa benar, jika benar total skor ditambahkan dan ditamplikan tulisan benar
. Selanjutnya dari baris ke-36 ditampilkan total skor yang diperoleh siswa dan detail hasil untuk masing masih pertanyaan.
Pada tutorial php membuat kuis sederhana ini kita menggunakan order by rand()
untuk menampilkan pertanyaan dan jawaban dengan acak. Kemudian kita kembuat halaman hasil untuk menampilkan hasil yang diperoleh siswa setelah menjawab semua soal. Pada tutorial ini tidak mencakup halaman untuk menambahkan atau menedit pertanyaan. Ada beberapa tutorial di website ini yang membahasa tentang cara menyimpan dan mengedit data. Jika Anda ingin melihat contoh untuk itu silahkan sampaikan di kolom komentar di bawah. Begitu juga kalau ada pertanyaan. Anda juga dapat menonton video demonstrasi tutorial ini di channel Youtube MyPHPtutorials. Selamat Mencoba.