Membuat Kuis Sederhana Dengan PHP

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.

  1. Menyiapkan database dan tabel
  2. Menyiapkan pertanyaan dan jawaban
  3. Membuat koneksi ke database
  4. Menampilkan pertanyaan dan jawaban dengan acak
  5. Menampilkan hasil kuis.

Bagi yang ingin melihat video demo di youtube, silahkan kunjungin di: Tutorial PHP Membuat Kuis Sederhana

Cara insert data di phpMyAdmin

Menyiapkan Database dan Table

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

struktur table kuis

Menyiapkan Pertanyaan dan Jawaban

Gunakan phpMyAdmin untuk menyiapkan pertanyaan dan jawaban. Setelah table terbuat gunakan menu insert untuk menambahkan soal dan jawaban. Seperti gambar di bawah.

Cara insert data di phpMyAdmin

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.

Membuat Koneksi ke Database

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.

Menampilkan Pertanyaan dan Jawaban Dengan Acak

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.

Program Kuis Sederhana

Menampilkan Hasil Kuis

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.

Kesimpulan

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.