วันพฤหัสบดีที่ 28 มีนาคม พ.ศ. 2556

การส่งค่า Array ผ่านแบบฟอร์มของ PHP

โจทย์:

ต้องการส่งรายชื่อบุคคลซึ่งเก็บอยู่ในตัวแปร Array ของ PHP โดยส่งผ่านฟอร์ม จะทำอย่างไร
ตัวแปรที่มีรายชื่อบุคคลคือ  $nameArray = array("ประสงค์","ประสิทธิ์","ประสาท");

หลักการ
นำค่าที่อยู่ใน Array ไปใส่ในลง form element โดยให้อยู่ในรูปของ PHP Array แล้วส่งออกไปยังไฟล์ PHP ที่รับค่า

วิธีการ

ไฟล์แบบฟอร์ม
(ไฟล์ myform.php)

<html><body>
<form method="POST" action="showarray.php">
<?php
$nameArray = array("ประสงค์","ประสิทธิ์","ประสาท");
foreach($nameArray as $names){ //นำค่าไปใส่ form element
  echo '<input type="hidden" name="members[]" value="'. $names. '">';
}
?>
คลิกเพื่อส่งข้อมูล<br>
<input type="submit" value=" ส่ง ">
</body></html>

แสดงผล


 
ในกรณีที่เราสร้างแบบฟอร์มสำหรับกรอกข้อมูล ก็สามารถรับค่าเข้ามาเป็น Array และส่งออกได้ทันที เช่น
(ไฟล์ myform.html)

<HTML><BODY>
<form method="POST" action="showarray.php">
สมาชิกคนที่ 1:<input type="text" name="members[]"/><br/>
สมาชิกคนที่ 2:<input type="text" name="members[]"/><br/>
สมาชิกคนที่ 3:<input type="text" name="members[]"/><br/><br>
คลิกปุ่มเพื่อส่งรายชื่อ<br><br>
<input type="submit" name="sendNames" value=" ส่ง ">
</form>
</BODY></HTML>

แสดงผล




ไฟล์ที่รับค่า
(ไฟล์ showarray.php)

<?php
//$memberNames รับค่าเข้ามาและมีสถานะเป็น Array
$memberNames=$_POST['members'];
//นับจำนวนสมาชิกที่ส่งมา
$numOfPeople = sizeof($memberNames);
echo $numOfPeople . "<br>"; //3
//แสดงชื่อสมาชิก คนที่ 2
$secondPerson=$memberNames[1];
echo $memberNames[1]; //ประสิทธิ์ (ส่งมาจาก myform.php)
?>

แสดงผล




การประยุกต์ใช้งาน

ตัวอย่างการส่งเฉลยคำตอบจากข้อสอบ และนำไปตรวจด้วย PHP

ไฟล์ข้อสอบ (myTest.php)

<?php
$subjectName = "ข้อสอบออนไลน์";
$correctAns=array("ข","ก");  //เฉลยข้อที่ถูก -- ไม่จำกัดจำนวนข้อ
?>
<HTML><BODY>
<form method="POST" action="checkAns.php">  
1) อำเภอบางแพ อยู่ในจังหวัดอะไร<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>
<?php
foreach($correctAns as $value){
  echo '<input type="hidden" name="correct[]" value="'. $value. '">';
}
echo "<input type = hidden name = \"subjName\" value='$subjectName'>";
?>
<BR><BR>
   <input type="submit" value="ส่งข้อมูล" name="ok">
   <INPUT TYPE="RESET" VALUE="ยกเลิก">
   </FORM>
   </BODY></HTML>
แสดงผล



ไฟล์ตรวจคำตอบ (checkAns.php)

<?php
$subjName = $_POST["subjName"];
$correctAns = $_POST["correct"];  // $correctAns เป็น Array ประกอบด้วย คำตอบที่ถูก ที่ส่งมาจากตัวข้อสอบ
$numOfQstns = sizeof($correctAns);
$score = 0;
// รับคำตอบ และเก็บไว้ในตัวแปร Array ชื่อ $stAns
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++;
  };
   };
echo "ท่านทำข้อสอบวิชา$subjName ถูก จำนวน $score ข้อ";
?>

แสดงผล

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


ไม่มีความคิดเห็น:

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