Internet Fax To Email - Unlimited

Unlimited Faxes, No Fees, Dedicated Phone Number

Free Website Templates
kecebongsoft » PHP : Soal Pilihan Ganda

kecebongsoft


Blog, Portfolios, Creativity

PHP : Soal Pilihan Ganda

Posted in Tutorial by Dedi Purwanto on the July 6th, 2007

Kemarin, seorang teman menanyakan tentang hal ini. Dakuw juga sering berfikir kenapa tidak ada tutorial yang seperti ini, rata-rata tutorial tersebut lebih mengarah ke teknik-teknik pemrograman, bukan alur logika yang mengarah pada kasus-kasus spesifik seperti ini (CMIIW). Mungkin beberapa berpendapat, bahwa mereka harus membangun logika sendiri. Bagaimana kalau logikanya Pentium tidur seperti dakuw :D (becanda deng).

Just an opinion. Oke deh, disini kita akan mencoba membuat web sederhana yang menampilkan sejumlah soal dari sekian soal secara acak, dan setiap soal disertai dengan 4 pilihan (pilihan ganda). Setelah soal-soal tersebut dijawab oleh user, maka akan ditampilkan halaman yang mengecek jawaban tersebut benar/salah. Mudah kan?

Pertama, kita desain dulu databasenya, buka phpmyadmin atau MySQL Front atau apapun yang biasa dipakai untuk manajemen database MySQL. Tabel pertama adalah table soal, yang akan menyimpan soal-soal.

Sintaks : (sql)
  1.  
  2. CREATE TABLE `soal` (
  3.   `id` int(99) NOT NULL AUTO_INCREMENT,
  4.   `soal` text NOT NULL,
  5.   PRIMARY KEY  (`id`)
  6. );
  7.  

ID adalah primary key dari tiap record, sedangkan field “soal” akan menyimpan text-text soal. Tabel “soal” sudah jadi, sekarang kita buat tabel jawaban.

Sintaks : (sql)
  1.  
  2. CREATE TABLE `jawaban` (
  3.   `id` int(99) NOT NULL AUTO_INCREMENT,
  4.   `soal` int(99) NOT NULL,
  5.   `jawaban` text NOT NULL,
  6.   `benar` tinyint(1) NOT NULL,
  7.   PRIMARY KEY  (`id`)
  8. );
  9.  

Field “id”, adalah primary key dari tiap record. Field “soal” adalah foreign key yang menunjuk pada tabel soal. Misalkan pada sebuah record di tabel jawaban, terdapat nilai “3” pada field “soal”, maka itu berarti jawaban tersebut milik soal yang ber-id “3” pada tabel soal. Field “jawaban” adalah field yang menyimpan teks jawaban. Field “benar” adalah field yang menentukan jawaban tersebut benar atau tidak (karena peraturannya adalah pilihan berganda), mungkin saja ada banyak jawaban untuk satu soal, tapi hanya satu yang benar. Kita akan set 0 untuk tiap jawaban yang salah, dan 1 untuk jawaban yang benar.
Oke, tabel udah jadi, sekarang kita masuk ke script, perlu diingat struktur file disini dibuat sesederhana mungkin, tapi jangan diikuti untuk website sebenarnya yak :D .

Ini script untuk menampilkan soal dan jawabannya, jangan khawatir tiap baris sudah diberi komentar penjelas kok :D. Klo di jelasin disini lagi justru berbelit-belit :D, simpan dengan nama soal_view.php :

Sintaks : (php)
  1.  
  2. <?
  3.         $db=mysql_connect("localhost","root","");
  4.         if($db)
  5.         {
  6.                 if(mysql_select_db("tutorial_1"))
  7.                 {
  8.                         // Database selected
  9.                 }
  10.                 else
  11.                 {
  12.                         echo "Can’t select database!";
  13.                         exit;
  14.                 }       
  15.         }
  16.         else
  17.         {
  18.                 echo "Can’t Connect to MySQL Server!"
  19.                 exit;
  20.         }
  21. ?>
  22.  
  23. <form method="post" action="soal_process.php">
  24. <?
  25.         // Inisialisasi variabel
  26.         $soal=array(); // Array yang digunakan untuk menyimpan "id" soal
  27.         $soal_max=3; // Jumlah soal yang akan ditampilkan
  28.         $nomor=1; // nomor urutan soal
  29.        
  30.         // Kumpulkan nilai-nilai "id" yang ada pada tabel "soal", simpan ke array "soal"
  31.         $query=mysql_query("SELECT * FROM soal");
  32.         while($row=mysql_fetch_array($query))
  33.         {
  34.                 $soal[]=$row[id];
  35.         }
  36.        
  37.         // Yup, array "soal" sudah terisi, tinggal diacak dan di buang hingga isinya tinggal $soal_max
  38.         // fungsi array_rand, tidak mengacak isi dari array, melainkan hanya nomor urut dari array
  39.         // karena itu kita gunakan variabel $soal_urut, untuk menyimpan urutan soal yang sudah diacak
  40.         // MIS : sebelum diacak :
  41.         // isi array (0=>"1",1=>"2",2=>"3",3=>"4",4=>"5") angka di sebelah kiri adalah nomor urut array
  42.         // dan yang disebelah kanan adalah isi dari array tersebut
  43.         // fungsi array_rand, hanya mengacak urutannya, bukan nilainya.
  44.         $soal_urut=array_rand($soal,$soal_max);
  45.         while($s=each($soal_urut))
  46.         {
  47.                 // ambil nomor soal
  48.                 $soal_nomor=$s["value"]; // ambil nomor urut array
  49.                 $soal_nomor=$soal[$soal_nomor]; // ambil array dengan nomor urut $soal_nomor
  50.                
  51.                 // tampilkan soal
  52.                 $query=mysql_query("SELECT * FROM soal WHERE id=".$soal_nomor);
  53.                 $row=mysql_fetch_array($query);  
  54.                 echo "<b>$nomor. ".$row[soal]." ?</b>
  55. ";
  56.                
  57.                 // tampilkan pilihan ganda, dalam bentuk radio button
  58.                 // value pada radio button kita set sesuai "id" dari jawaban tersebut
  59.                 // jadi, nanti pada saat di proses, cukup kita cek apakah jawaban dengan "id"
  60.                 // tersebut nilai "benar"nya 0 atau 1.
  61.                 $query=mysql_query("SELECT * FROM jawaban WHERE soal=".$soal_nomor);
  62.                 while($row=mysql_fetch_array($query))
  63.                 {
  64.                         $id=$row[id];
  65.                         $jawab=$row[jawaban];
  66.                         $benar=$row[benar];
  67.                        
  68.                         // kita beri nama radio buttonnya jawab_$soal_nomor, kalau "id" soal yang sekarang
  69.                         // adalah 10, maka radio buttonnya jadi jawab_10, dst.
  70.                         echo "<input type=\"radio\" name=\"jawab_$soal_nomor\" value=\"$id\">$jawab
  71. ";
  72.                 }
  73.                 // Oh iya, disini juga kita buat string yang isinya array soal yang sudah diacak tadi
  74.                 // tujuannya, untuk kita masukan ke hidden field, dan ikut di transfer bersama
  75.                 // form, kemudian nanti di pecah lagi menjadi array pada soal_process.php
  76.                 // string ini berguna untuk menyimpan urutan soal mana saja yang ditampilkan sekarang
  77.                 $soal_nomor_send.=$soal_nomor . ",";
  78.                
  79.                 // Ini nomor urut soal, untuk tampilan saja
  80.                 $nomor++;
  81.         }
  82.         // Karena string dari array soal yang kita kumpulkan tadi sudah selesai, namun
  83.         // karakter terakhirnya masih ada "koma" (mis : "5,3,2,1,"), jadi kita ilangin komanya dulu
  84.         $soal_nomor_send=substr($soal_nomor_send,0,strlen($soal_nomor_send)-1);
  85.        
  86.         // yup, sekarang string dari array soal sudah jadi, tinggal di masukan ke hidden field
  87.         echo "<input type=\"hidden\" name=\"soal_nomor\" value=\"$soal_nomor_send\">";
  88. ?>
  89. <input type="submit" value="Jawab">
  90. </form>
  91.  

Dan ini, adalah file untuk memproses jawaban, simpan dengan nama file soal_process.php :

Sintaks : (php)
  1.  
  2. <?
  3.         $db=mysql_connect("localhost","root","");
  4.         if($db)
  5.         {
  6.                 if(mysql_select_db("tutorial_1"))
  7.                 {
  8.                         // Database selected
  9.                 }
  10.                 else
  11.                 {
  12.                         echo "Can’t select database!";
  13.                         exit;
  14.                 }       
  15.         }
  16.         else
  17.         {
  18.                 echo "Can’t Connect to MySQL Server!"
  19.                 exit;
  20.         }
  21. ?>
  22.  
  23. <?
  24.         // Inisialisasi variabel
  25.         $user_jawab=array(); // Array yang digunakan untuk menyimpan jawaban user dari form tadi
  26.         $soal_urut=array(); // Array yang digunakan untuk menyimpan urutan soal dari form tadi (hidden field)
  27.         $nomor=1; // nomor urutan soal
  28.  
  29.         $soal_urut=$_POST["soal_nomor"]; // Ambil hidden field dari form tadi
  30.         $soal_urut=explode(",",$soal_urut); // pecah menjadi array, pecah berdasarkan tanda ","
  31.        
  32.         // Tampilkan soal-soal yang tadi
  33.         while($s=each($soal_urut))
  34.         {       
  35.                 $soal_nomor=$s["value"]; // ambil "id" soal
  36.                
  37.                 // tampilkan soal
  38.                 $query=mysql_query("SELECT * FROM soal WHERE id=".$soal_nomor);
  39.                 $row=mysql_fetch_array($query);  
  40.                 echo "<b>$nomor. ".$row[soal]." ?</b>
  41. ";
  42.                
  43.                 // tampilkan pilihan ganda
  44.                 $query=mysql_query("SELECT * FROM jawaban WHERE soal=".$soal_nomor);
  45.                 while($row=mysql_fetch_array($query))
  46.                 {
  47.                         $id=$row[id];
  48.                         $jawab=$row[jawaban];
  49.                         $benar=$row[benar];
  50.                        
  51.                         // kita ambil "id" jawaban yang di submit user dari form tadi
  52.                         $user_jawab=$_POST["jawab_$soal_nomor"];
  53.                        
  54.                         // apakah "id" jawaban yang sedang ada di query ini sama dengan "id"/value pada radio button yang disubmit user?
  55.                         if($user_jawab==$id){
  56.                                 if($benar==0){ // apakah salah jawaban si user?
  57.                                         $jawab_status="<span style=’color:red;’><< Jawaban Anda… Salah!</span>";
  58.                                 }else{ // atau benar?
  59.                                         $jawab_status="<span style=’color:blue;’><< Jawaban Anda… Benar!</span>";
  60.                                 }
  61.                         }
  62.                         else // kalau "id"nya tidak sama
  63.                         {
  64.                                 $jawab_status="";
  65.                         }
  66.                        
  67.                         // tampilkan radio buttonnya
  68.                         echo "<input type=\"radio\" name=\"jawab_$soal_nomor\" value=\"$id\">$jawab $jawab_status
  69. ";
  70.                 }
  71.                
  72.                 $nomor++; // nomor urut soal, hanya tampilan saja
  73.         }
  74. ?>
  75.  

Oke deh, selamat mencoba, don’t hestitate to reply klo ketemu bug :D

2 Responses to 'PHP : Soal Pilihan Ganda'

Subscribe to comments with RSS or TrackBack to 'PHP : Soal Pilihan Ganda'.

  1. bonti said,

    on July 22nd, 2007 at 8:26 am

    mas…sintaks soalnya udah dicoba tapi ko ga bisa jalan aja ya cuma muncul pertanyaannya aja tanpa ada pilihan jawabannya…cara nampilin pilihan jawaban yang ada di database pake radiobutton itu gmn

  2. ayi said,

    on January 5th, 2008 at 4:36 am

    minta jawaban bwt ujian jeni

Leave a Reply


Blog ini telah mendukung penggunaan Gravatar, jika Anda belum memiliki Account Gravatar, siap-siap gambarnya berubah menjadi semut.