Monthly Archive 2011-04-19

Byphunsanit

PHP: การอัพโหลดไฟล์หลายไฟล์

อ่านก่อน PHP: การอัพโหลดไฟล์
การอัพโหลดครั้งละหลายไฟล์จะเขียนให้ใช้ move_uploaded_file หลายๆ บรรทัดก็ได้ครับ แต่คนมาแก้ที่หลังจะบอกว่า “ถึก” (สมมุติ ว่าถ้าต้องแก้เพิ่มอย่างตรวจชนิดไฟล์ หรือจำกัดขนาด ก็ต้องแก้หลายครั้งไปด้วย ถ้ามีซัก 5 ตัวก็สนุกแล้ว)
ก่อนอื่นแก้ส่วนของฟอร์มให้ส่งได้ครั้งละหลายๆ ไฟล์ก่อน

<form action="uploading.php" method="post" enctype="multipart/form-data">
<br /><input type="file" name="pictures[]" />
<br /><input type="file" name="pictures[]" />
<br /><input type="file" name="pictures[]" />
<br /><input type="file" name="pictures[]" />
<br /><input type="file" name="pictures[]" />
<input type="submit" />
</form>


สังเกตุดู picture โดนเติม s (บอกว่ามีมากกว่า 1 อันนี้ไม่บังคับ เป็นแค่หลักการตั้งชื่อที่ดี) และมี [] เพิ่มขึ้นมา อันนี้เพื่อบอกว่า pictures เป็นอาร์เรย์ มีพรรคพวก ไม่ได้ตัวคนเดียวแล้วนะ
ไฟล์ uploading.php

if (isset($_FILES['pictures']))
{
    foreach ($_FILES['pictures']['error'] as $index => $value)
    {
        if ($value == UPLOAD_ERR_OK)
        {
            move_uploaded_file($_FILES['pictures']['tmp_name'][$index] ,'uploads/'.$_FILES['pictures']['name'][$index]);
        }
    }
}


เราใช้ foreach ทำงานที่ซ้าๆ ให้ สังเกตุว่า $_FILES[‘pictures’] จะมี [$index] เพิ่มขึ้นมา อันนี้คือดัชนีที่จะบอกว่า เรากำลังทำงานกับ pictures ตัวที่เท่าไหร่
เงื่อนไข $value == UPLOAD_ERR_OK ทำหน้าที่ตรวจดูว่า pictures อัพโหลดไฟล์ขึ้นมาหรือว่างเปล่า
ดูเพิ่มเติม