PHP จะไม่แปลงข้อมูลช่องทำเครื่องหมายหลายช่องที่มีชื่อเดียวกันให้เป็นอาร์เรย์โดยอัตโนมัติเหมือนกับที่ ASP ทำ ซึ่งทำให้ใช้งานไม่สะดวก แต่ยังมีวิธีแก้ปัญหาอยู่ ซึ่งก็คือการใช้จาวาสคริปต์ในการประมวลผลล่วงหน้า ช่องทำเครื่องหมายหลายช่องที่มีชื่อเดียวกันยังคงอยู่ในรูปแบบของอาร์เรย์ใน JavaScript ดังนั้นก่อนที่จะส่งแบบฟอร์ม คุณสามารถใช้ JavaScript เพื่อรวมข้อมูลในช่องทำเครื่องหมายลงในอาร์เรย์อักขระและกำหนดให้กับองค์ประกอบที่ซ่อนอยู่ในแบบฟอร์ม จากนั้น ใช้ PHP ฟังก์ชั่นระเบิดแยกวิเคราะห์อาร์เรย์นี้เพื่อให้สามารถถ่ายโอนข้อมูลกล่องกาเครื่องหมายได้ ด้านล่างนี้เป็นตัวอย่าง
สมมติว่ามีรูปแบบดังกล่าว:
<form name="form1" id="form1" method="post" action="myphp.php" onSubmit="return Checker()">
<input type="checkbox" name="item" value="1">1<br><
<input type="checkbox" name="item" value="2">2<br><
<input type="checkbox" name="item" value="3">3<br><
<input type="checkbox" name="item" value="4">4<br><
<ประเภทอินพุต = "ซ่อน" ชื่อ = "รายการ" ค่า = "" >
<ประเภทอินพุต = "ส่ง" ค่า = "ส่ง" >
</แบบฟอร์ม>
แบบฟอร์มนี้มีกล่องกาเครื่องหมายสี่ช่องที่มีชื่อเป็นรายการทั้งหมด เมื่อผู้ใช้คลิกปุ่มส่ง ฟังก์ชันตัวตรวจสอบจะถูกเรียก และหากตัวตรวจสอบส่งคืนค่าจริง แบบฟอร์มจะถูกส่งกลับหากส่งกลับค่าเท็จ แบบฟอร์มจะไม่ถูกส่ง ฟังก์ชัน Checker ที่นี่คือฟังก์ชันการประมวลผลล่วงหน้าที่เราต้องการเขียน เพิ่มจาวาสคริปต์ต่อไปนี้ในส่วนหัวของ HTML:
<script language="javascript">
-
ตัวตรวจสอบฟังก์ชัน ()
-
form1.items.value = "";
if ( !form1.item.length ) // มีเพียงช่องทำเครื่องหมายเดียวคือ form1.item.length = undefinition
-
ถ้า (form1.items.checked)
form1.items.value = form1.item.value;
-
อื่น
-
สำหรับ ( i = 0 ; i < form1.item.length ; i++ )
-
if (form1.item(i).checked) // มีช่องทำเครื่องหมายในช่องทำเครื่องหมาย {
form1.items.value = form1.item(i).value;
สำหรับ ( j = i + 1 ; j < form1.item.length ; j++ )
-
ถ้า (form1.item(j).checked)
-
form1.items.value += " "; //ใช้ช่องว่างเป็นตัวคั่น form1.items.value += form1.item(j).value;
-
-
หยุดพัก;
-
-
-
กลับเป็นจริง;
-
-
</script>
ใช้
คำสั่งนี้ใน myphp.php:
$items = explode(" ", $HTTP_POST_VARS["items"]);
ตัวเลือกเหล่านี้สามารถแยกออกเป็นอาร์เรย์ได้ ควรสังเกตว่าค่าในตัวเลือกไม่สามารถมีตัวคั่นได้ (ในที่นี้คือช่องว่าง)