วันอาทิตย์ที่ 7 เมษายน พ.ศ. 2556

การสร้างข้อสอบออนไลน์ และตรวจข้อสอบ ด้วย 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)\">";
   }
?>

แสดงผล

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

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




3 ความคิดเห็น:

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

    ตอบลบ

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

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

    ตอบลบ