Mari kita lihat algoritma dan kodenya. Atau anda bisa lihat demonya. Untuk kuis online sederhana tanpa ajax dan konversi timer dalam menit dan detik, silahkan dowload di sini
- Membuat tabel banksoal di MySQL
- Membuat form untuk tulis nama user dan pemilihan topik pertanyaan
- Mengambil pertanyaan menggunakan ajax jquery json
- Meng-generate json data pertanyaan dan pilihan jawaban dari MySQL menggunakan PHP
- Menjalankan timer
- Memasukkan dan mengecek waktu di javascript cookies
- Menampilkan pertanyaan dan pilihan jawaban
- Menghitung hasil kuis
- Kode lengkapnya
Membuat tabel banksoal di MySQL
CREATE TABLE `banksoal` ( `soalid` int(5) NOT NULL auto_increment, `topik` tinytext NOT NULL, `pertanyaan` text NOT NULL, `pilihan_a` tinytext NOT NULL, `pilihan_b` tinytext NOT NULL, `pilihan_c` tinytext NOT NULL, `pilihan_d` tinytext NOT NULL, `jawaban` varchar(1) NOT NULL, PRIMARY KEY (`soalid`) )
Membuat form untuk tulis nama user dan pemilihan topik pertanyaan
index.php<html> <head> <title>Kuis Online</title> </head> <body bgcolor="#FFFFCC" onunload=keluar()> <center> <p> </p> <p> </p> <p> </p> <form action="soal.php" method="get"> Nama: <br> <input type=text name=nama><p> Jenis soal: <br> <select name="topik"> <?php include "koneksi.php"; $topik = mysql_query("SELECT DISTINCT topik FROM banksoal"); while($t = mysql_fetch_array($topik)){ echo "<option>".$t['topik']."</option>\n"; } ?> </select> <p> <input type=submit value="mulai"> </body> </html>
Mengambil pertanyaan menggunakan ajax jquery json
soal.phptopik = $("#divtopik").html(); url = "ambilsoal.php?topik="+topik $.ajax({ url: url, dataType: 'json', cache: false, success: function(msg){ topik = msg; setinputpilihan(); setinputjawaban() tampilkan(); mainkanwaktu(); } });topik kita ambil dari <div id="divtopik"> yang nilainya kita ambil dari form index.php
setinputpilihan(), adalah fungsi untuk meng-generate <input type=hidden name="pilihan[]"> yang nanti berguna untuk menampung jawaban-jawaban yang dipilih oleh user.
setinputjawaban(), adalah fungsi untuk meng-generate <input type=hidden name="jawaban[]"> yang nanti berguna untuk meletakkan jawaban tiap pertanyaan.
setinputpilihan() dan setinputjawaban() berguna untuk pengolahan di PHP untuk menghitung jawaban.
Meng-generate json data pertanyaan dan pilihan jawaban dari MySQL menggunakan PHP
ambilsoal.php<?php include "koneksi.php"; $topik = $_GET['topik']; $data = mysql_query("SELECT * FROM banksoal WHERE topik='$topik'"); $json = '{"soal":[ '; while($x = mysql_fetch_array($data)){ $json .= '{'; $json .= '"id":"'.$x['soalid'].'", "topik":"'.htmlspecialchars($x['topik']).'", "pertanyaan":"'.htmlspecialchars($x['pertanyaan']).'", "a":"'.$x['pilihan_a'].'", "b":"'.$x['pilihan_b'].'", "c":"'.$x['pilihan_c'].'", "d":"'.$x['pilihan_d'].'", "jawaban":"'.$x['jawaban'].'" },'; } $json = substr($json,0,strlen($json)-1); $json .= ']'; $json .= '}'; echo $json; ?>Jika kita running, akan membentuk data form json seperti berikut:
{"soal":[ { "id":"1", "topik":"internet", "pertanyaan":"Website paling populer di dunia?", "a":"google.com", "b":"facebook.com", "c":"yahoo.com", "d":"kaskus.us", "jawaban":"a" },{ "id":"2", "topik":"internet", "pertanyaan":"Pencipta PHP", "a":"Bill Gates", "b":"Steve Jobs", "c":"Rasmus Lerdorf", "d":"Larry Page", "jawaban":"c" } ] }
Menjalankan timer
Berikut adalah fungsi untuk membuat countdownvar totalwaktu = 20; //batas waktu pengerjaan semua soal function mainkanwaktu(){ if(totalwaktu>0){ $("#divtotalwaktu").html(totalwaktu); totalwaktu--; timer = setTimeout("mainkanwaktu()",1000); }else{ clearTimeout(timer); habis = 1; document.getElementById("formulir").submit(); } }document.getElementById("formulir").submit(); berguna jika waktu sudah habis maka kita langsung mensubmit form
Memasukkan dan mengecek waktu di javascript cookies
function getCookie(c_name){ if (document.cookie.length>0){ c_start=document.cookie.indexOf(c_name + "="); if (c_start!=-1){ c_start=c_start + c_name.length+1; c_end=document.cookie.indexOf(";",c_start); if (c_end==-1) c_end=document.cookie.length; return unescape(document.cookie.substring(c_start,c_end)); } } return ""; } function setCookie(c_name,value,expiredays){ var exdate=new Date(); exdate.setDate(exdate.getDate()+expiredays); document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString()); } function checkCookie(){ totalwaktucookies=getCookie('waktucookies'); if (totalwaktucookies!=null && totalwaktucookies!=""){ totalwaktu = totalwaktucookies; }else{ setCookie('waktucookies',totalwaktu,7); } }Jika user refresh, maka kita masukkan nilai totalwaktu ke cookies, cara mendeteksinya adalah dengan deteksi event onunload, kita pasang di tag <body onunload="keluar()">
berikut adalah kode fungsi keluar(), yang berfungsi memasukkan nilai totalwaktu yang sedang berjalan ke cookies
function keluar(){ if(habis==0){ setCookie('waktucookies',totalwaktu,7); }else{ setCookie('waktucookies',0,-1); } }
Menampilkan pertanyaan dan pilihan jawaban
function tampilkan(){ if(indexsoal<topik.soal.length){ nomorsoal = indexsoal + 1; $("#divnomor").html("Soal "+nomorsoal+" dari "+ topik.soal.length); $("#divpertanyaan").html(topik.soal[indexsoal].pertanyaan); $("#divpertanyaan").fadeIn(2000); $("#jawaban_a").html("<input type='radio' onclick='setnilai(this.value)' name='R"+indexsoal+"'value='a'>A. "+topik.soal[indexsoal].a); $("#jawaban_b").html("<input type='radio' onclick='setnilai(this.value)' name='R"+indexsoal+"'value='b'>B. "+topik.soal[indexsoal].b); $("#jawaban_c").html("<input type='radio' onclick='setnilai(this.value)' name='R"+indexsoal+"'value='c'>C. "+topik.soal[indexsoal].c); $("#jawaban_d").html("<input type='radio' onclick='setnilai(this.value)' name='R"+indexsoal+"'value='d'>D. "+topik.soal[indexsoal].d); $("#divoption").slideDown(750); }else{ habis = 1; document.getElementById("formulir").submit(); } }
Menghitung hasil kuis
nilaiakhir.php<?php echo "Nama: ".$_POST['nama']."<br>"; $jumlahbenar = 0; $i = 1; foreach($_POST['pilihan'] as $key => $value){ if($value == $_POST['jawaban'][$key]){ $j = "benar"; $jumlahbenar++; }else{ $j = "<font color='red'>salah</font>"; } echo "No $i : $value ($j)<br>"; $i++; } echo "Jumlah benar = $jumlahbenar"; ?>
Kode lengkapnya
Untuk kode lengkapnya silahkan download source code, untuk di sini melihat demoUntuk kuis online sederhana tanpa ajax dan konversi timer dalam menit dan detik, silahkan dowload di sini
1 komentar: