อ่านก่อน PHP: การอัพโหลดไฟล์
การอัพโหลดครั้งละหลายไฟล์จะเขียนให้ใช้ move_uploaded_file หลายๆ บรรทัดก็ได้ครับ แต่คนมาแก้ที่หลังจะบอกว่า “ถึก” ( สมมุติ ว่าถ้าต้องแก้เพิ่มอย่างตรวจชนิดไฟล์ หรือจำกัดขนาด ก็ต้องแก้หลายครั้งไปด้วย ถ้ามีซัก 5 ตัวก็สนุกแล้ว )
ก่อนอื่นแก้ส่วนของฟอร์มให้ส่งได้ครั้งละหลายๆ ไฟล์ก่อน
1 2 3 4 5 6 7 8 | < 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
1 2 3 4 5 6 7 8 9 10 | 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 อัพโหลดไฟล์ขึ้นมาหรือว่างเปล่า
ดูเพิ่มเติม