GORAGOD.com

เทคนิคการรับค่าจาก Input ชนิด Array

ช่วงนี้เขียนเรื่องฟอร์ม และ Input แบบ Array ติดๆกันหลายเรื่องเลย อันเนื่องมาจากมีหลายคำถาม ถามกันมาพอสมควร ปกติแล้ว ตอนสร้าฟอร์มแบบ Array คงไม่งงกันเท่าไร แค่ไม่ระบุ id ของ input ลงไปเท่านั้น แต่อีตอนรับสิ จะรู้ได้ไง ว่าอันไหนเป็นอันไหน

เทคนิคนี้คงต้องอาศัยความเข้าใจเกี่ยวกับ array และคำสั่ง foreach มาประยุกต์ใช้ก่อนละครับ

<?php
     if (isset($_POST[submit])) { // ตรวจสอบว่ามาจากการ submit หรือไม่
         print_r($_POST);
         print_r($_FILES);
         // text แบบ array
          foreach($_POST[text] AS $i => $text) {
               echo "value of text[$i]='$text'<br />";
          }
          // text แบบ array
          foreach($_POST[num] AS $i => $text) {
               echo "value of num[$i]='$text'<br />";
          }
          // file แบบ array
          foreach($_FILES[file][tmp_name] AS $i => $file) {
               if ($file != '') { // ตรวจสอบว่ามีการเลือกไฟล์มาหรือไม่
                    echo "value of file[$i][tmp_name]='$file'<br />";
                    echo "size of file[$i][size]='".$_FILES[file][size][$i]."' byte<br />";
               }
          }
     }
?>

<form action="?" method="post" enctype="multipart/form-data">
<p>Input แบบ dynamic Array (ไม่ระบุ id ของ array)</p>
<p><input type="text" name="text[]" /></p>
<p><input type="text" name="text[]" /></p>
<p>Input แบบ Array (ระบุ id ของ array มาด้วย)</p>
<p><input type="text" name="num[0]" /></p>
<p><input type="text" name="num[1]" /></p>
<p>Input ชนิดไฟล์ แบบ dynamic Array (ไม่ระบุ id ของ array)</p>
<p><input type="file" name="file[]" /></p>
<p><input type="file" name="file[]" /></p>
<p><input type="submit" name="submit" value="Submit" /></p>
</form>

เริ่มต้นก็มาดูกันก่อนเลย คำสั่ง print_r() จะสามารถบอกได้ว่า มีอะไรบ้างหนอที่ส่งมาบ้าง เพื่อดูผลลัพท์ และ รูปแบบ เพื่อมาใช้งานกับ Array ได้

text จะถูกส่งมาในรูปแอเรย์แบบที่ไม่ระบุอันดับ ซึ่งเราสามารถอ่านค่าที่ส่งมาได้จาก foreach ซึ่งอันดับสามารถอ่านได้จากตัวแปร $i ในโค้ดครับ

ส่วนค่าต่างๆ สามารถอ่านได้จากตัวแปร $text หรือ $num หรือ $file ที่เป็นตัวหนาครับ ในส่วนของ input ชนิด file ซึ่งยังมี property อื่นๆ ที่สามารถอ่านได้อีกก็สามารถอ่านได้จากตัวแปร $_FILE[file][size][$i] ครับ

จากตัวอย่างการส่งไฟล์ ถึงแม้ว่าเราจะมี Input หลายอัน แต่เราสามารถที่จะอ่านค่าจาก Input ที่เลือกไฟล์ไว้เท่านั้นได้ด้วยการตรวจสอบตัวแปร $file เพื่อดูค่าว่างครับ