สอบถามเรื่อง Array ในสคริปตัวอย่างขอสอบออนไลน์ครับ
สวัสดีครับ
อยากสอบถามเกี่ยวกับการเขียนข้อสอบดังตัวอย่างครับ
ผมได้สคริปมาจากที่นี่ครับ http://www.thongjoon.com/2013/04/php_7.html
ก็มีประสบการณ์เขียน php mysql น้อยมาก
ตอนนี้นำข้อสอบใส่ database และดึงออกมาพร้อมเฉลยได้ แต่ว่าในส่วนของ เฉลย ที่จะเอามาเก็บใน array ผมทำไม่เป็นครับ
รบกวนผู้รู้ช่วยชี้แนะด้วยนะครับ ในตัวอย่างเป็นการระบุ array ลงไปเลย แต่ผมต้องการดึงค่าเฉลยจาก database มาเก็บแทนครับ
ผมแนบสคริปมาให้ช่วยดูครับ ขอบคุณมากครับ
ผมอาจจะโพสต์ไม่ถูกต้อง หรือผิดพลาดประการใดต้องขออภัยด้วยนะครับ
น้องใหม่ครับ
รูปโครงสร้าง database
----------------------------------------------------------
filequestion.php
-------------------------------------------------------------
<!doctype html>
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<title>แบบทดสอบออนไลน์</title>
</head>
<body>
<div>
<H1>ชุดที่ 1/2014<br>แบบทดสอบชุดนี้มีทั้งหมด 42 ข้อ</H1>
<form id="form" method="POST" action="checkit.php">
<p>ชื่อของผู้เข้าสอบ
<input type="text" name="usrName"></p>
<p>หมายเลขประจำตัว
<input type="text" name="usrCode"></p>
<p>อีเมล์
<input type="text" name="usrEmail"></p><br><br>
<?php
$con=mysqli_connect("localhost","root","","mytestonline");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($con,"SET NAMES UTF8");
$result = mysqli_query($con,"SELECT * FROM testing ORDER BY rand()");
?>
<?php
$no=1;
while($row = mysqli_fetch_array($result)) {
echo "<div class=\"starttest\">";
echo"<span class=\"hanswer\">". $no." ".$row['question']."</span>";
echo "<br>";
echo "<input class=\"_normal\" type=\"radio\" value=\"1\" name=\"question".$row['id']."\">".$row['c1'];
echo "<br>";
echo "<input class=\"_normal\" type=\"radio\" value=\"2\" name=\"question".$row['id']."\">".$row['c2'];
echo "<br>";
echo "<input class=\"_normal\" type=\"radio\" value=\"3\" name=\"question".$row['id']."\">".$row['c3'];
echo "<br>";
echo "<input class=\"_normal\" type=\"radio\" value=\"4\" name=\"question".$row['id']."\">".$row['c4'];
echo "</div><br>";
echo "<span class=\"hbanswer\">เฉลย </span>". $row['answer'];
echo "<br>";
echo "<span class=\"hbanswer\">คำอธิบาย </span>".$row['des_answer'];
echo "</div><br><br>";
$no++;
}
?>
<?php
$subjectName = "แบบทดสอบออนไลน์ โดย อ.สมศักดิ์";
//เฉลยข้อที่ถูก -- ไม่จำกัดจำนวนข้อ
//ตรงนี้ครับ ที่ต้องการให้เป็นการดึงค่าเฉลยมาใส่แทนครับ
$correctAns=array("1","2","1","1","2","1");
//--------------
//เกณฑ์การผ่านขั้นต่ำ
$cutpoint = 60;
?>
<?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>";
?>
<h2>กรุณาตรวจทานเพื่อให้แน่ใจอีกครั้งก่อนส่งข้อสอบ</h2><br><br>
<input type="submit" value="ส่งข้อมูล" name="ok">
<INPUT TYPE="RESET" VALUE="ยกเลิก">
</FORM>
</div>
</body>
</html>
----------------------------------------------------------------------------------------------
ส่วนไฟล์เช็คคำตอบ
เป็นแบบนี้ครับ ผมไม่ได้แก้อะไร ซึ่งก็ใช้ได้ ตรวจได้ครับ
แต่เวลาทำไม่ครบข้อ มันขึ้นข้อความเตือน ไม่อยากให้ขึ้นเลยครับทำไม่เป็นอันนี้
checkit.php
---------------------------------------------
<?php
$thisUserName = trim($_POST["usrName"]);
$thisUserMail = trim($_POST["usrMail"]);
$thisUserCode = trim($_POST["usrCode"]);
$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 "อีเมล์: $thisUserMail<br>";
echo "โทรศัพท์: $thisUserCode<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)\">";
echo "<p><a href=\"ans.php\" alt\"ดาวน์โหลด\">ดาวน์โหลดไฟล์ข้อสอบพร้อมเฉลย</a></p>";
}
?>Tag : PHP, MySQL
ประวัติการแก้ไข 2014-06-28 18:28:44
Date :
2014-06-28 18:24:34
By :
tungtiew
View :
1695
Reply :
3
$correctAns=array("1","2","1","1","2","1");
แก้เป็น
$correctAns[$row['id']]=$row[['answer'];
หมายถึงแบบนี้เปล่าครับ
ถ้าเวลาแสดงก็
for($correctAns as $id=>$ans){
echo " id=$id , answer=$ans"; // ประยุกต์ตามความต้องการเองได้เลยครับ
}
Date :
2014-06-29 00:41:00
By :
xbeginner01
ขอบคุณมากนะครับคุณ xbeginner01 ที่กรุณาตอบให้ ผมลองเอาไปใช้แล้ว ใช้ได้ครับ
แต่ตรงนี้มันฟ้อง error
for($correctAns as $id=>$ans){
echo " id=$id , answer=$ans"; // ประยุกต์ตามความต้องการเองได้เลยครับ
}
////////////////////////////
Parse error: syntax error, unexpected 'as' (T_AS), expecting ';' in C:\www\htdocs\test-cpa\register.php on line 64
//////////////////////////////
ไม่ทราบว่าคืออะไรครับและต้องแก้ไขอย่างไร ถึงจะ view ได้
ขอรบกวนสอบถามเพิ่มเติมอีกเรื่องนะครับว่า
ในหน้า checkit.php ถ้าหากเราต้องการให้แสดงคำถามและคำตอบของ user จากหน้าแรกเหมือนเป็นการสรุปในหน้านี้ด้วย
ว่า user ทำผิดข้อไหน จะต้องเขียนเพิ่มแบบไหนครับ
อย่างไรก็ขอขอบคุณมากนะครับ
ถ้าหากว่าติดขัดเรื่องใดอีกคงต้องรบกวนพื้นที่ในนี้อีกครับ
ประวัติการแก้ไข 2014-07-04 12:51:51
Date :
2014-07-04 12:48:36
By :
tungtiew
for($correctAns as $id=>$ans){
แก้เป็น
foreach($correctAns as $id=>$ans){
Date :
2014-07-04 13:03:00
By :
Chaidhanan
Load balance : Server 00