Dedi Purwanto

Tentang keseharian, pemikiran dan masalah seorang remaja biasa.

Contoh script soal pilihan ganda pada PHP

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.

CREATE TABLE `soal` (
`id` int(99) NOT NULL AUTO_INCREMENT,
`soal` text NOT NULL,
PRIMARY KEY  (`id`)
);

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

CREATE TABLE `jawaban` (
`id` int(99) NOT NULL AUTO_INCREMENT,
`soal` int(99) NOT NULL,
`jawaban` text NOT NULL,
`benar` tinyint(1) NOT NULL,
PRIMARY KEY  (`id`)
);

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 :

<?
$db=mysql_connect("localhost","root","");
if($db)
{
if(mysql_select_db("tutorial_1"))
{
// Database selected
}
else
{
echo "Can�t select database!";
exit;
}
}
else
{
echo "Can�t Connect to MySQL Server!";
exit;
}
?>
<form method="post" action="soal_process.php">
<?
// Inisialisasi variabel
$soal=array(); // Array yang digunakan untuk menyimpan "id" soal
$soal_max=3; // Jumlah soal yang akan ditampilkan
$nomor=1; // nomor urutan soal
// Kumpulkan nilai-nilai "id" yang ada pada tabel "soal", simpan ke array "soal"
$query=mysql_query("SELECT * FROM soal");
while($row=mysql_fetch_array($query))
{
$soal[]=$row[id];
}
// Yup, array "soal" sudah terisi, tinggal diacak dan di buang hingga isinya tinggal $soal_max
// fungsi array_rand, tidak mengacak isi dari array, melainkan hanya nomor urut dari array
// karena itu kita gunakan variabel $soal_urut, untuk menyimpan urutan soal yang sudah diacak
// MIS : sebelum diacak :
// isi array (0=>"1",1=>"2",2=>"3",3=>"4",4=>"5") angka di sebelah kiri adalah nomor urut array
// dan yang disebelah kanan adalah isi dari array tersebut
// fungsi array_rand, hanya mengacak urutannya, bukan nilainya.
$soal_urut=array_rand($soal,$soal_max);
while($s=each($soal_urut))
{
// ambil nomor soal
$soal_nomor=$s["value"]; // ambil nomor urut array
$soal_nomor=$soal[$soal_nomor]; // ambil array dengan nomor urut $soal_nomor
// tampilkan soal
$query=mysql_query("SELECT * FROM soal WHERE id=".$soal_nomor);
$row=mysql_fetch_array($query);
echo "<b>$nomor. ".$row[soal]." ?</b>";

// tampilkan pilihan ganda, dalam bentuk radio button
// value pada radio button kita set sesuai "id" dari jawaban tersebut
// jadi, nanti pada saat di proses, cukup kita cek apakah jawaban dengan "id"
// tersebut nilai "benar"nya 0 atau 1.
$query=mysql_query("SELECT * FROM jawaban WHERE soal=".$soal_nomor);
while($row=mysql_fetch_array($query))
{
$id=$row[id];
$jawab=$row[jawaban];
$benar=$row[benar];

// kita beri nama radio buttonnya jawab_$soal_nomor, kalau "id" soal yang sekarang
// adalah 10, maka radio buttonnya jadi jawab_10, dst.
echo "<input type=\\"radio\\" name=\\"jawab_$soal_nomor\\" value=\\"$id\\">$jawab";
}
// Oh iya, disini juga kita buat string yang isinya array soal yang sudah diacak tadi
// tujuannya, untuk kita masukan ke hidden field, dan ikut di transfer bersama
// form, kemudian nanti di pecah lagi menjadi array pada soal_process.php
// string ini berguna untuk menyimpan urutan soal mana saja yang ditampilkan sekarang
$soal_nomor_send.=$soal_nomor . ",";

// Ini nomor urut soal, untuk tampilan saja
$nomor++;
}
// Karena string dari array soal yang kita kumpulkan tadi sudah selesai, namun
// karakter terakhirnya masih ada "koma" (mis : "5,3,2,1,"), jadi kita ilangin komanya dulu
$soal_nomor_send=substr($soal_nomor_send,0,strlen($soal_nomor_send)-1);

// yup, sekarang string dari array soal sudah jadi, tinggal di masukan ke hidden field
echo "<input type=\\"hidden\\" name=\\"soal_nomor\\" value=\\"$soal_nomor_send\\">";
?>
<input type="submit" value="Jawab">
</form>

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

<?
$db=mysql_connect("localhost","root","");
if($db)
{
if(mysql_select_db("tutorial_1"))
{
// Database selected
}
else
{
echo "Can�t select database!";
exit;
}
}
else
{
echo "Can�t Connect to MySQL Server!";
exit;
}
?>

&lt;?
// Inisialisasi variabel
$user_jawab=array(); // Array yang digunakan untuk menyimpan jawaban user dari form tadi
$soal_urut=array(); // Array yang digunakan untuk menyimpan urutan soal dari form tadi (hidden field)
$nomor=1; // nomor urutan soal

$soal_urut=$_POST["soal_nomor"]; // Ambil hidden field dari form tadi
$soal_urut=explode(",",$soal_urut); // pecah menjadi array, pecah berdasarkan tanda ","

// Tampilkan soal-soal yang tadi
while($s=each($soal_urut))
{
$soal_nomor=$s["value"]; // ambil "id" soal

// tampilkan soal
$query=mysql_query("SELECT * FROM soal WHERE id=".$soal_nomor);
$row=mysql_fetch_array($query);
echo "<b>$nomor. ".$row[soal]." ?</b>";

// tampilkan pilihan ganda
$query=mysql_query("SELECT * FROM jawaban WHERE soal=".$soal_nomor);
while($row=mysql_fetch_array($query))
{

$id=$row[id];
$jawab=$row[jawaban];
$benar=$row[benar];

// kita ambil "id" jawaban yang di submit user dari form tadi
$user_jawab=$_POST["jawab_$soal_nomor"];

// apakah "id" jawaban yang sedang ada di query ini sama dengan "id"/value pada radio button yang disubmit user?
if($user_jawab==$id){
if($benar==0){ // apakah salah jawaban si user?
$jawab_status="<span style=�color:red;�>&lt;&lt; Jawaban Anda� Salah!</span>";
}else{ // atau benar?
$jawab_status="<span style=�color:blue;�>&lt;&lt; Jawaban Anda� Benar!</span>";
}
}
else // kalau "id"nya tidak sama
{
$jawab_status="";
}

// tampilkan radio buttonnya
echo "<input type=\\"radio\\" name=\\"jawab_$soal_nomor\\" value=\\"$id\\">$jawab $jawab_status";
}
$nomor++; // nomor urut soal, hanya tampilan saja
}
?>

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

About these ads

50 responses to “Contoh script soal pilihan ganda pada PHP

  1. evoy 29 November, 2007 pukul 6:03 am

    kok gak bisa yah gw.. sama binun…

  2. raka 30 November, 2007 pukul 1:36 am

    heuh bingun euy … lebih rinci dong ..

  3. Fathinuddin 12 Desember, 2007 pukul 3:13 am

    sedikit binun, saya gak ngerti ada sintaks di baris 12 dan 18 yang mengandung huruf-huruf aneh, gimana yeu ?

  4. Sugih 16 Januari, 2008 pukul 8:04 am

    Terima kasih, scriptnya berjalan dengan normal meskipun awalnya nemu bug, tapi syukur lumayan ke handle…
    Boleh ada pertanyaan ga?
    1. Gimana script untuk design interface input soal dan jawaban?
    2. Buat nge-random radio button-nya gimana? supaya ga cuma urutan no soal tapi berikut dengan pilihannya….

    Terima Kasih banyak……

  5. roy 29 Januari, 2008 pukul 4:23 am

    saya telah mencoba menjalankannya tpi ada kesalahan yaitu:
    1. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\dataweb\belajar_mandiri\soal_proses.php on line 39

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\dataweb\belajar_mandiri\soal_proses.php on line 44

    kira-kira apanya yah yang salah?terima kasih

  6. Rizki 29 Januari, 2008 pukul 9:29 am

    lho kok…….emm! masih blm ngetri nich! ada yang lebih detail g?

  7. bambang 6 Februari, 2008 pukul 8:08 am

    mohom disend tutorialnya. thks

  8. yudha DeLonge 3 Maret, 2008 pukul 7:01 pm

    om lum ngerti,,,,,

    bisa lebih detail lagi gag,,

    di tunggu catatannya,,

    hehehehhe

  9. ichsan 7 Maret, 2008 pukul 12:38 pm

    gw pengen cari soal PG komputer
    tolong kasih tau nyarinya di mana

  10. f3r4 10 April, 2008 pukul 12:53 pm

    mau mencari contoh soal php

  11. puas haryani 10 April, 2008 pukul 2:20 pm

    tolong bantuin gue donk bikin script tentang film dokumenter
    kalo bisa sekalian iklan layanan masyarakat.terima kasih

  12. erna wulandari 10 April, 2008 pukul 2:23 pm

    tolong bantuin aku donk bikin proposal tentang profil dan layanan masyarakat.terima kasih

  13. nana 25 April, 2008 pukul 6:29 pm

    bingung nie!!!!!!!!!!!!!! da yang lebih simple ga? kan q masih newbie

  14. Sugix TopLiRik.com 29 April, 2008 pukul 8:14 pm

    jurusnya bagus mas… cmn biar lebih afdol disertakan file .zip siap u/ di download :D jd klo copy paste begini biasanya ada yg error.

    Trs, ada contoh jadinya (Demo) pastinya lebih Wow..

    salam kenal.. maaf hanya sebagai masukan, berdasarkan koment2 diatas pada bingung :D

  15. dedi 2 Juni, 2008 pukul 8:27 pm

    umpang di download yah mas,,
    ntar kalo ada apa2 saya kasih tahu
    makasih atas share-nya smoga mendapat balasan dari yang maha kuasa

  16. enong 3 Juli, 2008 pukul 12:49 pm

    ok mas trim kebetulan q da tgs cari script . saya setuju dengn PENDAPAT mas sugik.

  17. sangdedi 8 September, 2008 pukul 10:54 am

    mantab,, dicoba dulu yah scriptnya,, thx banget udh nge-share

  18. romeo 24 Januari, 2009 pukul 3:37 pm

    bang/mbak,tuk yg tahu tutorial PHP,
    minta tolong kirimin,nya URL nya dunk

    w mw coba2x dll,pengen belajar

    TQ

    • Anonymous 11 Desember, 2009 pukul 1:12 pm

      romeo :
      bang/mbak,tuk yg tahu tutorial PHP,
      minta tolong kirimin,nya URL nya dunk
      w mw coba2x dll,pengen belajar
      TQ

    • Anonymous 11 Desember, 2009 pukul 1:13 pm

      luqman :
      pny contoh soal pemrograman php (file) yang agak berat gak ….
      kirim via ftpnya ke email klo bisa

      romeo :
      bang/mbak,tuk yg tahu tutorial PHP,
      minta tolong kirimin,nya URL nya dunk
      w mw coba2x dll,pengen belajar
      TQ

      zzzzzzzzzzzzzz

  19. budi 26 Mei, 2009 pukul 11:25 pm

    artikelnya cukup bagus, tapis saya rasa terlalu banyak query.

  20. magapala 28 Mei, 2009 pukul 10:45 am

    mas yang punya web…aku ng-copy yach..makasih, moga-moga bhasil..
    ntar xalo aku bgung..aku mohon dbantuin ya mas..thanks

  21. redy erianto 6 Juli, 2009 pukul 10:50 am

    mas termakasih atas script yg telah di berikan, sangat bermanfaat sekali buat q…..oh ya…..script untuk memberi nilainya bagai mana????
    q dah terapin syntax yg mas berikan…tapi tu kan sampai pengoreksian jawaban…

    kalau script untuk beri nilainya gimana???
    misal q ada soal…….kalau benar bernilai 4 kalau salah bernilai 0…
    q mau nentukan hasil / score nya gmn….please…..tolong ya mas….makasih banyak ya,…..

  22. redy erianto 6 Juli, 2009 pukul 10:53 am

    mas….tolongin aq ya mas……..nentukan scorenya gmn
    …….

    oh ya…satu lagi……
    kalau memberi grafik atas penilaian tu gmn script nya…….
    makasih ya mas…..

    mas baik dech…..

  23. Ipul 10 Agustus, 2009 pukul 10:55 am

    Klu blh tolong kirim scrip pilihan ganda php yang udah jadi ke email aku dong,mohon bantuanya…tanks

  24. firman timur 13 Oktober, 2009 pukul 9:05 am

    as yang punya web…aku ng-copy yach..makasih.soalnya aku lagi cari soal2 PHP tugas kuL makasih ya/./.

  25. luqman 20 Oktober, 2009 pukul 8:40 pm

    pny contoh soal pemrograman php (file) yang agak berat gak ….
    kirim via ftpnya ke email klo bisa

  26. Sial 4 Januari, 2010 pukul 10:19 am

    ahhh,,,
    malah makin pusing ..
    apa” aja yg perlu di ganti di dlm script tsb kasi tanda dong…
    gimana sih mas ini..

  27. hanafi 19 Maret, 2010 pukul 3:49 am

    mas mau nanya ni klo mau buat scrip php tentang soal pilihan ganda terus apabila waktunya abis buat mengisi data terus datanya nggak bisa di pilih lagi tu gimana ya scripnya?
    makasih…

  28. Nisa 5 April, 2010 pukul 11:37 am

    Hwa!!Tolong posting dong tampilan hasilnya,,pusssing nih..

  29. indra 27 April, 2010 pukul 12:19 am

    Script-nya banyak yang error, kalo bisa disertai gambar !!!
    Maaf cuma masukkan aja!!!

  30. indra 27 April, 2010 pukul 12:30 am

    Hallo…..
    Mana orang-nya …?????

  31. fian 29 April, 2010 pukul 6:15 pm

    prasa’n banyak yang tanya ko’ malah g’ di jwab2 ma tuan rumah jngn2 tu script cman copy paste dari orang jg…

  32. jaka 16 Oktober, 2010 pukul 12:27 pm

    salam kenal. makasih infonya

  33. syamsul kharis 18 Desember, 2010 pukul 6:04 am

    oya mau tanya ini tulisan mksud ny apa,,,,?(�)

  34. TRIK KOMPUTER DAN INTERNET 31 Januari, 2011 pukul 10:33 am

    SALAM KENAL PAK …

    BACA JUGA :

    “Trik membuat IDM terbaru lebih super cepat untuk download ”

    http://trik-komputer-internet.blogspot.com/2011/01/internet-download-manager-idm-siapa.html

    MAKASIH DAN SUKSES SELALU.

  35. sitoksiji 8 Mei, 2011 pukul 6:39 am

    terimakasih mas ilmunya smg Allah mbalas kebaikan anda. amin

  36. manda angelo batio 26 Juni, 2011 pukul 12:42 am

    mas dimna yah nyari soal pg dengan 4o soal aja…
    tolong bantu yah

  37. Rahadian Muhammad 4 April, 2012 pukul 9:11 pm

    Bagus sekali ..
    Tapi ko ane coba gagal mulu ye ..? coba tolong diperjelas lagi gan . makasih ..

  38. Hary 22 April, 2012 pukul 12:24 am

    Mantap gan! Terimakasih atas pembahasannya benar2 berguna nih buat saya..

  39. wonkdjava 23 Mei, 2012 pukul 7:54 am

    Ada contoh data isi data basenya tak? terutama untuk database jawaban?

  40. ipulborneo 30 September, 2012 pukul 8:06 pm

    Terima kasih atas logikanya.

  41. mizuno mx irons 1 Desember, 2012 pukul 12:07 am

    Hey there! I just wanted to ask if you ever have any
    problems with hackers? My last blog (wordpress) was hacked and
    I ended up losing months of hard work due to no back up.
    Do you have any solutions to stop hackers?

  42. Light 4 All 14 Maret, 2013 pukul 6:20 am

    Reblogged this on Tamam Corporation and commented:
    Share bagi teman-teman

  43. Linca (Jual Program Absensi) 27 Juni, 2013 pukul 10:56 am

    wah riber juga ya, tapi tetap maskasih ya gan, paling tidak bisa saya coba pelajarin dulu…

  44. alfian 20 September, 2013 pukul 4:55 pm

    kok munculnya kayak gini ya gan ?
    Parse error: syntax error, unexpected T_STRING, expecting ‘,’ or ‘;’ in C:\xampp\htdocs\ian\soal_viuw.php on line 68

  45. yogi erwanda (@erwandayogie) 24 Oktober, 2013 pukul 6:49 pm

    gan saya ada masalah nih..
    saya punya kasus seperti ini..
    membuat pertanyaan dan jawaban yang lebih dari 100 pertanyaan tapi tiap 25 pertanyaan satu tombol simpan..jadi masalahnya tiap saya memilih satu jawaban dan memilih jawaban pada pertanyaan yang lain radio buttonnya ga tetap gan..berpindah sesuai jawaban yang baru saya pilih dengan beda pertanyaan..
    jadi saya mau nanya nech gan apa script php agar radio buttonnya tidak berpindah ke jawaban yang lain..
    klo ada solusinya tolong d share y gan..

  46. Anonymous 19 November, 2013 pukul 6:53 pm

    agan ada cara dengan JSP/ javascriptnya gak gan

Berikan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.

%d blogger menyukai ini: