Created
January 21, 2017 03:59
-
-
Save thaiall/bd701817a7767686e110c245c3d4c5c3 to your computer and use it in GitHub Desktop.
ข้อสอบออนไลน์ แบบเลือกตอบ แจ้งคะแนนสอบ แต่ไม่เฉลย ส่งเสริมให้ค้นคว้าด้วยตนเอง และฝึกทำได้หลายครั้ง เมื่อทำเสร็จจะบันทึกคะแนนแต่ละรอบเข้า 100 รายการล่าสุด มีใบรับรอง (Certificate) แบบออนไลน์แชร์ไป Social Media เพื่อเป็นขวัญกำลังใจให้กับผู้ที่มีความมุ่งมั่น
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// ปรับปรุง : 2560-01-19 (เริ่มพัฒนา : 2558-01-22 ปรับจาก test10.php) | |
// ============================= | |
// ลักษณะของโปรแกรม (Program Specification) | |
// - สุ่มทั้ง คำถาม และคำตอบ | |
// - จำนวนแบบทดสอบมีเท่าใดก็ได้ ขึ้นกับแฟ้มแบบทดสอบ โดยไม่ต้องแก้ไขโปรแกรม | |
// - ตัวเลือกมีสูงสุดได้ 7 ตัวเลือก เพราะตัวแปร $c[ ] กำหนดไว้อย่างนั้น | |
// - ฟังก์ชัน session_save_path() ถูกอธิบายใน Short 12 ของ http://www.thaiall.com/php/indexo.html | |
// - เพิ่มบริการ share certificate ใน version 2 เมื่อ 20 มกราคม 2560 | |
// ============================= | |
// Variables 1 | |
$bgcolor = "#ddffdd"; | |
if (isset($_REQUEST["subj"])) $gsubj = "subj=".$_REQUEST["subj"]; else $gsubj = ""; | |
if (isset($_SESSION['name'])) $name = $_SESSION['name']; else $name = ""; | |
if (isset($_SESSION['surname'])) $surname = $_SESSION['surname']; else $surname = ""; | |
if (isset($_POST["name"])) { | |
$name = $_POST["name"]; | |
$_SESSION['name'] = $name; | |
} | |
if (isset($_POST["surname"])) { | |
$surname = $_POST["surname"]; | |
$_SESSION['surname'] = $surname; | |
} | |
// ============================= | |
// Variable 2 | |
$version = "2.600120"; | |
$program_name = "tense10.php"; | |
$directory = "http://www.thaiall.com/quiz/"; | |
$data_name_prefix = "tense10"; | |
$data_name = "present1"; | |
$score_name = "tense10score.txt"; | |
$background = "tense10bg.gif"; | |
$t_now = date("M j,Y g:i:s"); | |
$total_user = 100; // เก็บข้อมูลสมาชิกเพียง 100 ระเบียนเท่านั้น | |
// ============================= | |
// Variable 3 | |
$qid["past1"] = "Past tense (Quiz ID : 1)"; | |
$qid["pastcon1"] = "Past continuous tense (Quiz ID : 2)"; | |
// ============================= | |
// Variable 4 | |
$google300 = ''; | |
$google728 = ''; | |
$google160 = ''; | |
// ============================= | |
// Variable 5 | |
if (isset($_REQUEST["subj"])) $data_name = $_REQUEST["subj"]; | |
// http://www.firstimpressionsimprinting.com/gpage11.html (tense10.gif = boy) | |
$header = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">'. "<head><title>แบบทดสอบ Tense ชุด ". $data_name ."</title> | |
<meta http-equiv=content-type content='text/html; charset=windows-874'> | |
<meta name='keywords' content='tense,present,past,future' /> | |
<meta name='description' content='tense is a verb-based method used to indicate the time' /> | |
<link type='text/css' rel='stylesheet' href='rsp62.css'><link rel='icon' type='image/x-icon' href='rsp.ico' /><style type='text/css'> | |
textarea{font-family:microsoft sans serif;font-size:14px;color:blue;background:white;} | |
td{font-family:THChakraPetch,microsoft sans serif;font-size:25px;} | |
body{font-family:THChakraPetch,microsoft sans serif;font-size:30px;} | |
</style></head><body bgcolor=$bgcolor topmargin='0' leftmargin='0' style='background-image:url(" . $background . ")'> | |
<table width=760 align=center bgcolor=black> | |
<tr><td style='font-size:48px;color:white;text-align:center'>TEN TEST CENTER</td></tr> | |
<tr><td style='text-align:center'>" . $google728 . "</td></tr></table>"; | |
$header_cert = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">'. "<head><title>CERTIFICATE by TEN TEST CENTER</title> | |
<meta http-equiv=content-type content='text/html; charset=windows-874'> | |
<meta name='keywords' content='certificate,ten test cener,enthusiasm,quiz,exercise' /> | |
<meta name='description' content='CERTIFICATE by TEN TEST CENTER คือ ใบรับรอง (Certificate) ที่ออกให้กับผู้เข้ามาทำข้อสอบ และได้คะแนนเต็มในแต่ละชุดข้อสอบ เพื่อเป็นขวัญและกำลังใจแก่ผู้มีความมุ่งมั่นเป็นที่ตั้ง ขอชื่นชม' /> | |
<link type='text/css' rel='stylesheet' href='rsp62.css'><link rel='icon' type='image/x-icon' href='rsp.ico' /><style type='text/css'> | |
td{font-family:THChakraPetch,microsoft sans serif;font-size:25px;} | |
body{font-family:THChakraPetch,microsoft sans serif;font-size:30px;} | |
</style></head><body bgcolor=$bgcolor topmargin='0' leftmargin='0' style='background-image:url(" . $background . ")'> | |
<table width=760 align=center bgcolor=black> | |
<tr><td style='font-size:48px;color:white;text-align:center'>CERTIFICATE by TEN TEST CENTER</td></tr> | |
<tr><td style='text-align:center'>" . $google728 . "</td></tr></table>"; | |
$footer = "<table width=760 align=center cellspacing=1 bgcolor=white><tr><td style='font-size:20px;text-align:center'> | |
<a href=". $directory . $program_name ."?action=report>สถิติ 100 รายการ</a> : <a href=". $directory . $program_name ."?$gsubj>เริ่มใหม่</a> : <a href=test10.gif>ภาพเตรียมข้อสอบ</a> : <a href=?action=source>รหัสต้นฉบับ</a> : รุ่น $version : เวลา : $t_now | |
</td></tr></table></body></html>"; | |
$error_name = "<table align=center><td bgcolor=white><font color=red size=6>กรอกชื่อ หรือนามสกุล ไม่ครบ<br/>ต้องอ่านคำชี้แจงนะครับ | |
ตอนนี้กลับไป [เริ่มใหม่] ได้เลย</td></table>"; | |
$error_subj = "<table align=center><td bgcolor=white><font color=red size=6>ไม่พบแฟ้มวิชาที่ท่านต้องการสอบ<br/>ต้องกลับไปเลือกวิชาให้ถูกต้อง</td></table>"; | |
$remark = "<tr><td bgcolor=#660000 colspan=2><font color=white> | |
- ถ้าไม่กรอกทั้ง name และ surname จะไม่ตรวจให้ | |
<br/>- ถ้าทำแบบทดสอบไม่ครบทุกข้อ จะไม่ตรวจให้ | |
<br/>- ระบบเก็บผลสอบเพียง 100 ระเบียนล่าสุด | |
<br/>- ผลการตรวจจะเผยแพร่ทั้ง ชื่อ สกุล คะแนน และเวลา | |
</td></tr>"; | |
$remark_send = "<font color=red>ต้องกรอกทั้งชื่อ และสกุล(อังกฤษ) และทำทุกข้อ"; | |
// ============================= | |
// Share Certificate | |
if (isset($_REQUEST["cert"]) && $_REQUEST["cert"] =="share") { | |
header('Content-Type: text/html; charset=windows-874'); | |
echo $header_cert; | |
echo "<table width=760 align=center cellspacing=1 bgcolor=#444444><tr><td style='text-align:center;'>"; | |
echo "<img src=$program_name" . "?cert=print&name=" . $_GET['name'] . "&surname=" . $_GET['surname'] . "&course=" . $_GET['course'] . "&time=" . $_GET['time'] . " width=728>"; | |
echo '<br/><font color=white>เพื่อเป็นขวัญและกำลังใจแก่ผู้มีความมุ่งมั่นเป็นที่ตั้งในการทำแบบทดสอบ ขอชื่นชม</font></td></tr></table>"; | |
echo $footer; | |
exit; | |
} | |
// ============================= | |
// Print Certificate | |
if (isset($_REQUEST["cert"]) && $_REQUEST["cert"] =="print") { | |
function cthai($str) { | |
$res=array(); | |
for($i=0;$i<strlen($str);$i++) { | |
array_push($res,"&#".getThaiUniCodeVal($str[$i]).";"); | |
} | |
$ress=implode("",$res); | |
return $ress; | |
} | |
function getThaiUniCodeVal($ch) { | |
if(ord($ch)>128) return (3552+(ord($ch)-128)); else return (ord($ch)); | |
} | |
header('Content-Type: image/png'); | |
$certbg = 'tense10cert.png'; | |
$font = $_SERVER["DOCUMENT_ROOT"] . "/quiz/rsp_thchakrapetch.ttf"; | |
$im = imagecreatefrompng($certbg); | |
$blue = ImageColorAllocate($im, 10, 10, 200); | |
$gname = base64_decode($_GET["name"]); | |
$gsurname = base64_decode($_GET["surname"]); | |
$gcourse = base64_decode($_GET["course"]); | |
$on = base64_decode($_GET["time"]); | |
// imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text ) 320 - (strlen($name) * 30) | |
imagettftext($im,30, 0, 320 - (strlen($gname . " " . $gsurname) * 6), 165, $blue, $font, cthai($gname . " " .$gsurname)); | |
imagettftext($im,24, 0, 320 - (strlen($gcourse) * 5), 260, $blue, $font, cthai($gcourse)); | |
imagettftext($im,24, 0, 320 - (strlen($on) * 5), 300, $blue, $font, cthai($on)); | |
imagepng ($im); | |
imagedestroy($im); | |
exit; | |
} | |
// ============================= | |
// View Source Code | |
if (isset($_GET["action"])) { | |
echo $header; | |
if ($_GET["action"] == "source") { | |
$ar = file($program_name); | |
echo "<table align=center width=760><td bgcolor=#dddddd><center><font size=6>SOURCE CODE</font><br/><textarea cols=120 rows=25 wrap=off>"; | |
foreach ($ar as $k=>$v) echo htmlspecialchars($v); | |
echo "</textarea></td></table>"; | |
} | |
if ($_GET["action"] == "report") { | |
$ar = file($score_name); | |
?> | |
<table width="760" align="center" cellspacing="1" bgcolor="white"><tr><td> | |
<b>ความหมายของการทดสอบ</b> | |
<br/>การทดสอบ (Testing) หรือ การประเมิน (Evaluation) เป็นกลไกสำคัญของการประกันคุณภาพการศึกษา | |
เป็นตัวบ่งชี้ระดับความสามารถของผู้เรียน ซึ่งมี 2 แบบ คือ แบบทดสอบแบบปรนัย เป็นแบบที่เหมาะสำหรับวัดผลการเรียน | |
ของผู้เข้าสอบจำนวนมาก มีความเที่ยงตรง และเกณฑ์การให้คะแนนที่เชื่อถือได้ แบบทดสอบแบบอัตนัย | |
เป็นแบบที่เหมาะกับการวัดความคิดริเริ่มสร้างสรรค์ โดยเปิดให้แสดงความคิดเห็นสำหรับแบบทดสอบที่มีโอกาสถูกได้หลายแบบ | |
แต่ไม่เหมาะกับผู้เข้าสอบจำนวนมาก | |
</td><td width="300"> | |
<center> | |
<?php echo $google300; ?> | |
</center> | |
</td></tr></table> | |
<?php echo "<table width=760 align=center cellspacing=1 bgcolor=#f9f9f9> | |
<tr bgcolor=black align=center><td align=center colspan=7><font color=white size=6>สถิติผู้ทำแบบทดสอบ</td></tr> | |
<tr bgcolor=#dddddd align=center><td>ลำดับ</td><td>ชื่อ-สกุล</td><td>รหัสวิชา</td><td>ถูก</td> | |
<td>ทั้งหมด</td><td>เวลาเริ่ม</td><td>เวลาเสร็จ</td></tr>"; | |
$i=0; | |
$bg = ""; | |
foreach ($ar as $k=>$v) { | |
$i++; | |
if (!isset($_GET["top"]) || $i <= 10) { | |
$ar = split("\t",$v); | |
if (strlen($bg) == 0) $bg = " bgcolor=#ddffff"; else $bg = ""; | |
if ($ar[3] == $ar[4]) $bg = " bgcolor=#ffdddd"; | |
echo "<tr $bg><td>$i</td><td><b>$ar[0] $ar[1]</b></td><td><a href=?subj=$ar[2]>$ar[2]</a></td> | |
<td align=center>$ar[3]</td><td align=center>$ar[4]</td><td>$ar[5]</td><td>$ar[6]</td></tr>"; | |
} | |
} | |
echo "</table>"; | |
} | |
echo $footer; | |
exit; | |
} | |
// ============================= | |
// Get Random value and Read file | |
$cnt_quiz = 0; | |
$data_namef = $data_name_prefix . $data_name . ".php"; | |
if (!file_exists($data_namef)) { | |
echo $error_subj.$footer; | |
exit; | |
} | |
$ar = file($data_namef); | |
foreach ($ar as $v) { | |
$q = split("\t",$v); | |
if (strlen($q[2]) > 0) { // ตรวจว่ามีเฉลยหรือไม่ | |
$qok{$cnt_quiz} = $v; | |
$rnd{$cnt_quiz} = rand(); | |
$cnt_quiz = $cnt_quiz + 1; | |
} | |
} | |
// ============================= | |
// General Variable | |
$c[1] = array(1,2,3,4,7,5,6); | |
$c[2] = array(5,7,2,3,4,1,6); | |
$c[3] = array(4,1,2,5,7,3,6); | |
$c[4] = array(2,3,5,4,1,6,7); | |
$c[5] = array(4,6,7,3,1,2,5); | |
$c[6] = array(7,6,5,2,4,1,3); | |
$c[7] = array(2,4,1,3,7,6,5); | |
// ============================= | |
// Check Answer | |
if (isset($_POST["action"]) && isset($_SESSION['start'])) { | |
echo $header; | |
if ($_POST["action"] == "check") { | |
if (strlen($_POST["name"]) == 0 || strlen($_POST["surname"]) == 0) { | |
echo $error_name.$footer; | |
unset($_SESSION["start"]); | |
exit; | |
} | |
$right = 0; | |
$wrong = 0; | |
$qok{$cnt_quiz} = $v; | |
foreach ($qok as $k=>$v) { | |
$q = split("\t",$v); | |
$qans{$q[0]} = $q[2]; | |
} | |
foreach ($_POST as $k=>$v) { | |
if ($k != "action" && $k != "name" && $k != "surname" && $k != "total" && $k != "subj") { | |
if (strlen($v) > 0) { | |
if ($qans{$k} == $v) $right++; else $wrong++; | |
} | |
} | |
} | |
$total = $_POST["total"]; | |
if ($total <= ($right + $wrong)) { | |
$wrong = $total - $right; | |
echo "<table width=760 align=center cellspacing=1 bgcolor=white>"; | |
echo "<td><center><font size=6><b>ผลการสอบของ</b> ". $_POST["name"] . " " . $_POST["surname"]; | |
echo "<br/><b>ทำถูก</b> = <font color=red>$right ข้อ</font>"; | |
echo " <b>ทำผิด</b> = <font color=red>$wrong ข้อ</font>"; | |
echo " <b>จำนวนข้อสอบ</b> = <font color=red>$total ข้อ</font>" ; | |
echo "<br/><b>เริ่มทำเวลา</b> = <font color=blue>". $_SESSION['start'] ."</font>"; | |
echo " <b>ทำเสร็จเวลา</b> = <font color=blue>". $t_now ."</font>"; | |
echo "</center></td></table>"; | |
if ($total == $right) { | |
echo "<table width=760 align=center cellspacing=1 bgcolor=white><td style='text-align:center;font-size:40px;'>"; | |
echo "<a href=$program_name". "?cert=share&name=" . base64_encode($_SESSION['name']) . "&surname=" . base64_encode($_SESSION['surname']) . "&course=" . base64_encode($qid[$data_name]) . "&time=" . base64_encode($_SESSION['start']) . ">"; | |
echo "กดที่นี่<br/>เพื่อแชร์ <b>ใบรับรอง</b><br/>ไปยังเครือข่ายสังคม<br>Press here<br>to share this certificate<br/>in social media</a></td><td>"; | |
echo "<a href=$program_name". "?cert=share&name=" . base64_encode($_SESSION['name']) . "&surname=" . base64_encode($_SESSION['surname']) . "&course=" . base64_encode($qid[$data_name]) . "&time=" . base64_encode($_SESSION['start']) . ">"; | |
echo "<img src=$program_name" . "?cert=print&name=" . base64_encode($_SESSION['name']) . "&surname=" . base64_encode($_SESSION['surname']) . "&course=" . base64_encode($qid[$data_name]) . "&time=" . base64_encode($_SESSION['start']) . " border=0 width=300> "; | |
echo "</a></td></table>"; | |
} | |
$data = $_POST["name"]."\t".$_POST["surname"]."\t".$_POST["subj"]."\t"; | |
$data = $data . $right."\t".$total."\t".$_SESSION['start']."\t".$t_now."\n"; | |
$fr = array(); | |
if (file_exists($score_name)) $fr = file($score_name); | |
$limit = count($fr); | |
if ($total_user <= $limit) $limit = $total_user - 1; | |
$fw=fopen ($score_name,"w"); | |
fputs ($fw,$data); | |
for ($i=0;$i<$limit;$i++) fputs ($fw,$fr[$i]); | |
fclose ($fw); | |
echo "<meta http-equiv=refresh content='300;url=". $program_name . "?action=report&top=10'>"; | |
unset($_SESSION["start"]); | |
// session_unset(); | |
} else { | |
echo "<table align=center><td bgcolor=white><center><font color=red size=6>ท่านทำข้อสอบเพียง : " . ($right + $wrong) ." ข้อ<br/>"; | |
echo "ไม่ครบ ". $total . " ข้อ<br/>จึงไม่ตรวจให้ .. ท่านต้องกลับไปทำให้ครบ</td></tr></table>"; | |
} | |
} | |
} else { | |
// ============================= | |
// Show Question | |
$ar = file($data_namef); | |
$q = split("\t",$ar[0]); | |
echo $header; | |
$_SESSION['start'] = $t_now; | |
// ทีแรกคิดว่าจะส่ง value ทั้งผ่าน post และ get แต่ส่งไปให้กับ image แล้ว จึงยกเลิก get | |
//echo "<form id=testten action='$directory". $program_name . "?name=" . base64_encode($_SESSION['name']) . "&surname=" . base64_encode($_SESSION['surname']) . "&course=" . base64_encode($qid[$data_name]) . "&time=" . base64_encode($t_now) . "' method=post> | |
//<table width='760' align='center' border='1' bordercolor='black' cellspacing='0'> | |
//<tr><td bgcolor=#dddddd><center><b>$qid[$data_name]</b></center>"; | |
echo "<form id=testten action='$directory". $program_name . "' method=post> | |
<table width='760' align='center' border='1' bordercolor='black' cellspacing='0'> | |
<tr><td bgcolor=#dddddd><center><b>$qid[$data_name]</b></center>"; | |
asort($rnd); // ทำให้ array จัดเรียงตามค่าสุ่ม | |
$total_question = 0; | |
echo "<table><td><table width='600' align='center' style='background-color:#f2f2f2;'>"; | |
$bg = ""; | |
foreach ($rnd as $k=>$v) { | |
$total_question++; | |
$q = split("\t",$qok{$k}); | |
if (strlen($bg) == 0) $bg = " bgcolor='#ffffdd'"; else $bg = ""; | |
echo "<tr $bg><td style='font-size:40px'>"; | |
echo $total_question.". ".$q[1]; | |
$cok = rand(1,7); | |
for($i=3;$i<10;$i++) { | |
if (isset($q[$c[$cok][$i - 3] + 2])) { | |
if (strlen($q[$c[$cok][$i - 3] + 2]) > 0 && $q[$c[$cok][$i - 3] + 2] != "\r\n" && $q[$c[$cok][$i - 3] + 2] != "\n") | |
echo "<dd><input type='radio' name=$q[0] value='". ($c[$cok][$i - 3]) ."'>". $q[$c[$cok][$i - 3] + 2]."</dd>"; | |
} | |
} | |
echo "</td>"; | |
// if ($total_question == 1) { echo ""; } เดิมวาง banner แนวตั้งที่นี่ แต่มีปัญหาการกด tab เลือกคำตอบตอบ จะเสียลำดับการทำงาน จึงย้ายไปนอกลูป | |
echo "</tr>"; | |
} | |
echo "</table></td><td width=160 valign=top bgcolor=gray>$google160</td></table>"; | |
echo "<table width=760 bgcolor=white align=center><tr><td>"; | |
echo "<table width='400' align='center' bgcolor='#dddddd'> | |
<tr><td bgcolor='black' colspan=2><font size='6' color='white'>คำชี้แจง</td></tr> | |
$remark | |
<tr><td align='right'>name :</td><td><input name='name' type=textbox size='20' value='$name'> ex. burin</td></tr> | |
<tr><td align='right'>surname :</td><td><input name='surname' type=textbox size='20' value='$surname'> ex. rujjanapan</td></tr> | |
</table><center><input type='submit' value='ส่งคำตอบ' style='width:250px;font-size:30px;height:50px;background-color:#ffff00'> | |
<br/>$remark_send | |
<input type='hidden' value='check' name='action'> | |
<input type='hidden' value=$total_question name='total'> | |
<input type='hidden' value=$data_name name='subj'>"; | |
echo "</td><td>". $google300 . "</td></table></form>"; | |
} | |
echo $footer; | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment