ข้อสอบ สุ่มไม่ซ้ำ และ javascript
เว็บเพจสำรอง (Backup Webpages) : thaiall.com | perlphpasp.com | 101-idea.com
ปรับปรุง : 2549-07-08 (ปรับอ่านง่าย)
RANDOM QUIZ BY PHP
ANSWER CHECKING BY JAVASCRIPT

ลักษณะ : สุ่มข้อสอบแบบไม่ซ้ำ และเฉลยทันทีด้วย javascript
ทดสอบโปรแกรมที่ ชุดสอบเป็นข้าราชการส่วนท้องถิ่น (อบต.) หรือ http://www.pkorat.com/test/test.php
    สารบัญ
  1. ข้อควรทราบ
  2. Source ของ php : อ่านแฟ้ม สุ่มตัวเลข และแสดงข้อสอบ พร้อมตรวจด้วย javascript
  3. ผลจากการ run php : จะได้ผลลัพธ์ในรูป html ซึ่งใช้หลักการของ input และ javascript ตรวจคำตอบ
  4. แบบฝึกหัด
ข้อควรทราบ
  1. ตัวอย่างทั้งหมดทดสอบที่ se-ed.net/thaiall ซึ่งในบทนี้จะแสดงให้เห็นการอ่านข้อมูลจากแฟ้มแบบ text มาแสดงผล ในรูปแบบของข้อสอบให้ได้ลองทำทันที ดังนั้นหลักการของบทเรียนชุดนี้ จึงมีแนวการเขียนโปรแกรม 3 เรื่อง คือ
    a. การสร้างข้อสอบ
    b. การสุ่มตัวเลขแบบไม่ซ้ำ
    c. การเขียน javascript แบบตรวจข้อสอบได้ทันที
  2. บทเรียนนี้ใช้แฟ้ม 2 แฟ้มเท่านั้น คือ
    2.1 dquiz.txt ทำหน้าที่เก็บข้อสอบให้ dquiz.php มาเรียกไปใช้
    2.2 dquiz.php ทำหน้าที่อ่านข้อมูลมาแสดงข้อสอบแบบสุ่ม
  3. หน้าตาของข้อมูลในแฟ้ม dquiz.txt ที่ใช้เก็บข้อสอบ มี 5 ข้อ หรือ 5 บรรทัด (ท่านสามารถใช้ notepad หรือ excel พิมพ์ตามที่เห็นข้างล่างนี้ อย่าให้เพี้ยนไปเชียวนะครับ และทุกอักษรชิดซ้าย กั้นระหว่าง field ด้วยเครื่องหมาย : เป็นอันใช้ได้)
    qg001:สุนัขทั่วไปมีกี่ขา:1:2:3:4:4
    qg002:ดาวของพระเจ้ามีกี่แฉก:4:5:6:7:2
    qg003:ดาวของซาตานมีกี่แฉก:4:5:6:7:3
    qg004:ant แปลว่าอะไร:มด:ช้าง:ไก่:หนู:1
    qg005:superman มาจากดาวอะไร:crystal:ดวงจันทร์:ดาวอังคาร:ดาวแดง:1
  4. โปรแกรมนี้สั้น ท่านลอง apply ทำให้สามารถ ตรวจข้อสอบ เมื่อทำเสร็จหมดทุกข้อดูสิครับ .. ผมไม่เฉลยนะครับ แต่ถ้ามีปัญหา ก็ลอง mail มาคุยกันได้
  5. ทดสอบโปรแกรมข้อสอบที่ http://www.thaiall.com/php/dquiz.php หรือ click here


Source ของ php
(อ่านแฟ้ม สุ่มตัวเลข และแสดงข้อสอบ พร้อมตรวจด้วย javascript)
หลักการทำงาน
1. เปิดแฟ้ม แล้วอ่านข้อมูลเก็บลงอาเร์ทั้งหมด
2. สุ่มตัวเลข ไม่ให้มีการซ้ำกัน และไม่ติดกัน
3. นำเลขที่เลือกพิมพ์ข้อสอบ โดยรับค่าด้วย input
4. ใช้ javascript ช่วยในการตรวจ แล้วเฉลยทันที
ทดสอบโปรแกรม click here
<body><font face="microsoft sans serif" size=0>
ข้อสอบแบบสุ่ม ตอบแล้วทราบผลทันที ด้วย javascript<hr>
<?
# read file keep in array
$cntrec = 0;
$file = fopen("dquiz.txt","r");
while (!feof($file)) {
 $buffer = fgets($file,4096);
 if (ord($buffer) > 0) {
  $cntrec++;
  $keepr[$cntrec] = $buffer;
 }
}
# for random number
srand((double)microtime()*1000000);
for ($i=1 ; $i <= $cntrec;$i++) {
   # เดิมผมใช้ rand บรรทัดเดียว แต่เลขไม่ห่างกันมาก ก็เลยใช้ % ซึ่งหมายถึง mod ช่วย
   $q = rand(1,1000000) + rand(1,100000);
   $v = ($q % $cntrec) + 1;
   $found = 0;
   for ($j=1 ; $j < $i;$j++) {
   if ($r[$j] == $v) { $found = 1;}
   }
   if ($found == 1) { $i--; } else { $r[$i] = $v; }
}
# for choose and print the question
for ($i=1 ; $i <= $cntrec;$i++) {
  $k = split (":",$keepr[$r[$i]]);
  echo "$i. <b>$k[1]</b> [$k[0]]<br>";
  echo "<input type=radio onclick=ok(";
  if ($k[6] == 1) { echo "1"; } else { echo "0"; }
  echo ")>",$k[2],"<br>";
  echo "<input type=radio onclick=ok(";
  if ($k[6] == 2) { echo "1"; } else { echo "0"; }
  echo ")>",$k[3],"<br>";
  echo "<input type=radio onclick=ok(";
  if ($k[6] == 3) { echo "1"; } else { echo "0"; }
  echo ")>",$k[4],"<br>";
  echo "<input type=radio onclick=ok(";
  if ($k[6] == 4) { echo "1"; } else { echo "0"; }
  echo ")>",$k[5],"<br>";
  echo "<hr noshade width=50% color=red>";
}
?>
</body>
<script language=JavaScript>
<!--
function ok(value) {
  if (value == "1") {
    alert('Right ถูกครับ ดีใจด้วย ลองทำข้อต่อไปนะครับ');
  } else {
    alert('Wrong ผิดครับ เสียใจด้วย ถ้าให้คิดใหม่ท่านว่าข้อใดถูก');
  }
}
//-->
</script>


ผลจากการ run โปรแกรม dquiz.php
(จะได้ผลลัพธ์ในรูป html ซึ่งใช้หลักการของ input และ javascript ตรวจคำตอบ)
ตัวอย่างหน้าตาของผลลัพธ์
1. ดาวของพระเจ้ามีกี่แฉก [qg002]
4
5
6
7

2. ant แปลว่าอะไร [qg004]
มด
ช้าง
ไก่
หนู

3. superman มาจากดาวอะไร [qg005]
crystal
ดวงจันทร์
ดาวอังคาร
ดาวแดง

4. สุนัขทั่วไปมีกี่ขา [qg001]
1
2
3
4

5. ดาวของซาตานมีกี่แฉก [qg003]
4
5
6
7

<body>
1. <b>ดาวของพระเจ้ามีกี่แฉก</b> [qg002]<br>
<input type=radio onclick=ok(0)>4<br>
<input type=radio onclick=ok(1)>5<br>
<input type=radio onclick=ok(0)>6<br>
<input type=radio onclick=ok(0)>7<br>
<hr noshade width=50% color=red>
2. <b>ant แปลว่าอะไร</b> [qg004]<br>
<input type=radio onclick=ok(1)>มด<br>
<input type=radio onclick=ok(0)>ช้าง<br>
<input type=radio onclick=ok(0)>ไก่<br>
<input type=radio onclick=ok(0)>หนู<br>
<hr noshade width=50% color=red>
3. <b>superman มาจากดาวอะไร</b> [qg005]
<br><input type=radio onclick=ok(1)>crystal<br>
<input type=radio onclick=ok(0)>ดวงจันทร์<br>
<input type=radio onclick=ok(0)>ดาวอังคาร<br>
<input type=radio onclick=ok(0)>ดาวแดง<br>
<hr noshade width=50% color=red>
4. <b>สุนัขทั่วไปมีกี่ขา</b> [qg001]<br>
<input type=radio onclick=ok(0)>1<br>
<input type=radio onclick=ok(0)>2<br>
<input type=radio onclick=ok(0)>3<br>
<input type=radio onclick=ok(1)>4<br>
<hr noshade width=50% color=red>
5. <b>ดาวของซาตานมีกี่แฉก</b> [qg003]<br>
<input type=radio onclick=ok(0)>4<br>
<input type=radio onclick=ok(0)>5<br>
<input type=radio onclick=ok(1)>6<br>
<input type=radio onclick=ok(0)>7<br>
<hr noshade width=50% color=red>
</body>
<script language=JavaScript>
<!--
function ok(value) {
  if (value == "1") {
    alert('Right ถูกครับ ดีใจด้วย ลองทำข้อต่อไปนะครับ');
  } else {
    alert('Wrong ผิดครับ เสียใจด้วย ถ้าให้คิดใหม่ท่านว่าข้อใดถูก');
  }
}
//-->
</script>


แบบฝึกหัด
  1. ให้ copy source code ไปทดสอบให้ใช้งานได้
  2. ลองปรับแต่ง โดยเพิ่มข้อสอบ หรือเพิ่มตัวเลือก หรือปรับ code
    เพราะการแสดงตัวเลือกใน code สามารถลดจำนวนบรรทัดได้ ด้วยการทำซ้ำ
  3. ลองเพิ่มชุดข้อสอบ
ผู้สนับสนุน ยินดีรับ ผู้สนับสนุน เว็บไซต์ด้านการศึกษา
กลุ่มเว็บไซต์นี้ เริ่มพัฒนา พ.ศ.2542
โดยบุคลากรทางการศึกษาด้านคอมพิวเตอร์
โทร. 081-9927223 (ผมเป็นคนลำปางหนา)
ปล. ขอไม่รับ work at home / อาหารเสริม

แนะนำเว็บใหม่ : ผลการจัดอันดับ
รักลำปาง : thcity.com : korattown.com : topsiam.com : มหาวิทยาลัยเนชั่น
ศูนย์สอบ : รวมบทความ : ไอทีในชีวิตประจำวัน : ดาวน์โหลด : facebook.com
ติดต่อ ทีมงาน ชาวลำปาง มีฝันเพื่อการศึกษา Tel.08-1992-7223