ข้ามไปที่เนื้อหาหลัก

การสร้างข้อสอบออนไลน์ และตรวจข้อสอบ ด้วย PHP

ครั้งก่อน เคยพูดเรื่อง การใช้ตัวแปรในตัวแปร ของ PHP และ การส่งค่า Array ของ PHP ซึ่งทำให้การทำงานสะดวก รวดเร็ว ไม่ต้องเขียนโค้ดยาว

คราวนี้ จะเป็นการนำมาใช้เรื่องการตรวจข้อสอบ

ในตัวอย่างนี้ ประกอบด้วยไฟล์ 2 ไฟล์ คือ ไฟล์ข้อสอบ ชื่อ quiz.php และไฟล์ตรวจข้อสอบ ชื่อ checkit.php

ไฟล์ข้อสอบ (quiz.php)
มีการส่งค่าเฉลยคำตอบที่ถูก ชื่อวิชา เกณฑ์การสอบผ่าน และให้ผู้เข้าสอบกรอกชื่อตัวเอง การส่งค่าเฉลยคำตอบ ชื่อวิชา และเกณฑ์การสอบผ่าน ส่งแบบ hidden โดยผู้ออกข้อสอบเป็นผู้กำหนด ส่วนชื่อผู้เข้าสอบ ให้ผู้เข้าสอบพิมพ์เองผ่านหน้าจอ

ไฟล์ตรวจข้อสอบ(checkit.php)
รับค่าจากไฟล์ quiz.php และนำมาตรวจคำตอบ พร้อมทั้งพิจารณาผลสอบว่าสอบผ่านหรือไม่ แล้วแจ้งผลทางหน้าจอ

ไฟล์ตรวจข้อสอบ สามารถใช้ตรวจข้อสอบได้หลายวิชา แต่ละวิชามีจำนวนข้อไม่จำกัด

โค้ดตัวอย่างไฟล์ข้อสอบ (quiz.php)

<?php
$subjectName = "ความรู้ทั่วไป";
//เฉลยข้อที่ถูก -- ไม่จำกัดจำนวนข้อ
$correctAns=array("ข","ก","ค","ง","ค","ง"); 
//เกณฑ์การผ่านขั้นต่ำ
$cutpoint = 60;
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=tis-620">
<title>ตัวอย่างข้อสอบ</title>
<body>
<form method="POST" action="checkit.php">  
<P><H1>แบบทดสอบตัวอย่าง</H1><P>
1) อำเภอสวนผึ้ง อยู่ในจังหวัดอะไร<br>
<input type="radio" value="ก" name="question1">ก) เพชรบุรี<br>
<input type="radio" value="ข" name="question1">ข) ราชบุรี<br>
<input type="radio" value="ค" name="question1">ค) ลพบุรี<br>
<input type="radio" value="ง" name="question1">ง) สุพรรณบุรี<br>
<br>
2) สะพานข้ามแม่น้ำแคว อยู่ในจังหวัดอะไร<br>
<input type="radio" value="ก" name="question2">ก)กาญจนบุรี<br>
<input type="radio" value="ข" name="question2">ข) ประจวบคีรีขันธ์<br>
<input type="radio" value="ค" name="question2">ค) นครปฐม<br>
<input type="radio" value="ง" name="question2">ง) ราชบุรี<br>
<br>
3) พระพุทธชินราช อยู่จังหวัดอะไร<br>
<input type="radio" value="ก" name="question3">ก) เชียงใหม่<br>
<input type="radio" value="ข" name="question3">ข) สุโขทัย<br>
<input type="radio" value="ค" name="question3">ค) พิษณุโลก<br>
<input type="radio" value="ง" name="question3">ง) พิจิตร<br>
<br>
4) อำเภอกาบเชิง อยู่ในจังหวัดอะไร<br>
<input type="radio" value="ก" name="question4">ก) อุบลราชธานี<br>
<input type="radio" value="ข" name="question4">ข) หนองคาย<br>
<input type="radio" value="ค" name="question4">ค) บุรีรัมย์<br>
<input type="radio" value="ง" name="question4">ง) สุรินทร์<br>
<br>
5) หาดบางแสน อยู่ในจังหวัดอะไร<br>
<input type="radio" value="ก" name="question5">ก) ระยอง<br>
<input type="radio" value="ข" name="question5">ข) จันทบุรี<br>
<input type="radio" value="ค" name="question5">ค) ชลบุรี<br>
<input type="radio" value="ง" name="question5">ง) ตราด<br>
<br>
6) พระธาตไชยา อยู่ในจังหวัดอะไร<br>
<input type="radio" value="ก" name="question6">ก) นครปฐม<br>
<input type="radio" value="ข" name="question6">ข) นครพนม<br>
<input type="radio" value="ค" name="question6">ค) นครราชสีมา<br>
<input type="radio" value="ง" name="question6">ง) นครศรีธรรมราช<br>
<br>
<br>ชื่อของผู้เข้าสอบ
<input type="text" name="usrName" size="80">
<?php
foreach($correctAns as $value)
{
  echo '<input type="hidden" name="result[]" value="'. $value. '">';
}
echo "<input type = hidden name = \"subjName\" value='$subjectName'>";
echo "<input type = hidden name = \"cpoint\" value=$cutpoint>";
?>

<BR><BR>
   <input type="submit" value="ส่งข้อมูล" name="ok">
   <INPUT TYPE="RESET" VALUE="ยกเลิก">
   </FORM>

</body>
</html>

ไฟล์ตรวจข้อสอบ (checkit.php)

<html>
<head>
<title>ตรวจข้อสอบ</title>
<meta http-equiv="Content-Type" content="text/html; charset=tis-620">
</head>
<body>
<?php
$thisUserName = trim($_POST["usrName"]);
$subjName = $_POST["subjName"];
$cutpoint = $_POST["cpoint"];
$correctAns = $_POST["result"];  // $correctAns เป็น Array ประกอบด้วย คำตอบที่ถูก ที่ส่งมาจากตัวข้อสอบ
$numOfQstns = sizeof($correctAns);
$score = 0;
// รับคำตอบ
for ($i=1; $i<=$numOfQstns; $i++)
   {
      $stAns[$i-1] = trim($_POST["question" . $i]);  
   }
// ตรวจคำตอบ
for ($i=0; $i<=($numOfQstns-1); $i++)
   {
  $correct = $correctAns[$i];
        $stAnswer = $stAns[$i];
  if($stAnswer == $correct) {
  $score++;
  };
   };
    $percentage = number_format($score/$numOfQstns*100, 2, '.', '');
 echo "ชื่อผู้ทำข้อสอบ:  $thisUserName<br>";
 echo "ข้อสอบวิชา: $subjName <br>";
 echo"ทำข้อสอบได้ทั้งหมด: $score ข้อ คิดเป็นร้อยละ $percentage <br>";
 echo "<br><br><b>ผลการสอบ</b>";
   if($percentage >=$cutpoint) {
   echo "<br> ผ่าน";
   }else{
    echo "<br><span style=\"color: #f00;\"> ท่านไม่ผ่านเกณฑ์ $cutpoint %</span><p><input type=\"button\" value=\"ทำข้อสอบใหม่\" onClick=\"history.go(-1)\">";
   }
?>

แสดงผล

ถ้าทำข้อสอบผ่านเกณฑ์

ถ้าสอบไม่ผ่านเกณฑ์




ความคิดเห็น

  1. ขอบคุณมากๆๆเลยนะครับ ขอถามอะไรหน่อยได้ไหมครับ คือว่าข้อมูลได้ถูกบันทึกลง database ไหมครับ

    ตอบลบ

  2. ตั้งระบบ เก็บข้อมูล คนที่เข้ามาสอบ ไปที่ google ไดรฟ์ ได้ไหมครับ

    ตอบลบ
  3. ดูจาก code ไม่ได้ลง Database แน่นอนครับเขียนแบบ Hard Code เพราะคนสอนอยากให้เรามีพื้นฐาน ผมทำระบบ Exam Online อยู้ลองเข้าไปดูได้ครับ http://www.boxskill.com

    ตอบลบ

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

อุปมา อุปไมย สำนวนการเปรียบเทียบ ของไทย

การเตรียมสอบ ก.พ. ภาค ก. เพื่อสอบบรรจุเข้ารับราชการ มีการทดสอบความสามารถทั่วไป มักจะมี
ข้อสอบที่เกี่ยวกับอุปมาอุปไมย  ข้อสอบมีลักษณะ ให้หาตัวเลือกที่มีความหมาย ความสัมพันธ์คล้ายคลึง หรือเหมือนกับที่โจทย์กำหนดให้มา  หรือเติมข้อความที่มีความหมายสอดคล้องกับคำอุปมาอุปไมยที่ยกมาให้ เป็นต้น ดังนั้น การเข้าใจความหมายของคำอุปมาอุปไมย จึงช่วยให้ทำข้อสอบได้ดียิ่งขึ้น

คำอุปมาอุปไมย หมายถึง ถ้อยคำที่เป็นสำนวนพวกหนึ่ง กล่าวทำนองเปรียบเทียบ ให้เห็นจริง เข้าใจแจ่มแจ้งชัดเจน และสละสลวยน่าฟังมากขึ้น การพูดหรือการเขียน นิยมหาคำอุปมาอุปไมยมาเติมให้ได้ความชัดเจนเกิดภาพพจน์ เข้าใจง่าย เช่น

คนดุ หากต้องการให้ความหมายชัดเจน น่าฟัง และเกิดภาพพจน์ชัดเจนก็ต้องอุปมาอุปไมยว่า “ดุ เหมือน เสือ”
ขรุขระมาก การสื่อความยังไม่ชัดเจนไม่เห็นภาพ ต้องอุปมาอุปไมยว่า “ขรุขระเหมือนผิวมะกรูด” หรือ “ขรุขระเหมือนผิวพระจันทร์” ก็จะทำให้เข้าใจ ความหมายในรูปธรรมชัดเจนมากยิ่งขึ้น

คำอุปมาอุปไมยที่ควรรู้จัก (พิมพ์คำ/ข้อความ แล้วกดปุ่ม "ค้นหา")

แนวข้อสอบ เงื่อนไขสัญลักษณ์

ครั้งที่แล้ว ได้แนะนำหลักการทำ ข้อสอบ ก.พ. ภาค ก. ความสามารถทั่วไป เงื่อนไขสัญลักษณ์ มา แล้ว ถ้าใครยังไม่ได้อ่าน ก็คลิกกลับไปอ่านได้
ความจริง ข้อสอบเงื่อนไขสัญลักษณ์ เป็นข้อสอบไม่ยาก ถ้าเข้าใจหลักการ และมีทักษะความชำนาญ ใจเย็น ๆ อย่าตื่นเต้น โดยเฉพาะการดูเครื่องหมายต่าง ๆ อย่าดูผิด เช่น เครื่องหมายมากกว่า (>) น้อยกว่า (<) เป็นต้น เพราะการแก้ปัญหาโจทย์เงื่อนไขสัญลักษณ์ หรือ inequality ก็คล้ายกับการแก้ปัญหาสมการโดยทั่วไป นั่นเอง คือ สามารถบวก ลบ คูณ หาร ด้วยจำนวนที่เท่ากัน ทั้งสองข้างของเครื่องหมายได้ กลับเศษเป็นส่วนได้ แต่ก็มีบางเรื่อง บางรายละเอียดที่แตกต่างกันบ้าง ซึ่งอ่านได้จาก ข้อสอบ ก.พ. ภาค ก. ความสามารถทั่วไป เงื่อนไขสัญลักษณ์ นะครับ ครั้งนี้ จึงเป็นการนำแนวข้อสอบ เงื่อนไขสัญลักษณ์ เพื่อนำมาฝึกทำให้เกิดทักษะความชำนาญ เพื่อจะได้ทำข้อสอบได้รวดเร็วขึ้น เพราะในห้องสอบ เวลาจัดได้ว่ามีค่ามาก ยิ่งทำเร็วและถูกต้อง ยิ่งดี คำสั่ง

เลือกตอบข้อ 1. ถ้าข้อสรุปทั้งสอง ถูกด้องหรือเป็นจริง ตามเงื่อนไข
เลือกตอบข้อ 2. ถ้าข้อสรุปทั้งลอง ผิดหรือไม่เป็นจริง ตามเงื่อนไข
เลือกตอบข้อ 3. ถ้าข้อ…

เทคนิคการทำ ข้อสอบ อนุกรม ของ ก.พ.

|ประเภทของอนุกรม เทคนิคการทำโจทย์เลข อนุกรม ข้อแนะนำเพิ่มเติม |


ข้อสอบเลขอนุกรม ของ ก.พ. ต้องการวัดความถนัดทางด้านตัวเลข โดยการจัดทำตัวเลขเป็นชุด ๆ ที่มีความสัมพันธ์กันบางอย่าง โดยให้ผู้เข้าสอบได้แสดงความถนัดด้านตัวเลข ในการวิเคราะห์และแก้ปัญหาตามที่โจทย์ระบุ


ประเภทของอนุกรม รูปแบบความสัมพันธ์ของตัวเลขอนุกรมเท่าที่พบบ่อย ๆ มีหลายประเภท เช่น

ก. อนุกรมเชิงเดี่ยว 

ได้แก่ชุดตัวเลขที่เป็นอนุกรมเพียงชุดเดียว เช่น
ค่าของตัวเลขเพิ่มขึ้นต่อเนื่องอย่างเป็นระบบ โดยการบวก หรือ คูณ ตัวเลขก่อนหน้า เช่น บวกด้วยตัวเลขที่เป็นค่าคงที่ เช่น    5   10   15   20   ...?...
บวกด้วยตัวเลขที่มีระบบ เช่น     1    2    5    10   ...?...
คูณด้วยค่าคงที่ เช่น   1   3   9   27   ...?...
มีทั้ง บวก ลบ คูณ หรือหาร สลับกัน เช่น บวกแล้วคูณด้วยค่าคงที่สลับกัน ดังตัวอย่าง  5   7    14   16  32   ...... มีการ บวก ลบ คูณ หรือ หาร ร่วมกัน เช่น  15   31   63   127   255  ...?...
ในตัวอย่างนี้ จะเห็นว่า ตัวเลขตัวแรกคูณด้วย 2 และบวกด้วย 1 จะได้ตัวเลขตัวถัดไป คูณด้วยค่าคงที่ที่เป็นเศษส่วน ให้สังเกตความสัมพันธ์ว่า ตัวเลขก่อนหน้า …