GORAGOD.com

ตัวอย่างการอัปโหลดหลายไฟล์พร้อมการแจ้ง error

ตัวอย่างการอัปโหลดแบบแปลกๆอันหนึ่งที่มีสมาชิกถามมาบนบอร์ด ผมเห็นว่าแปลกดีก็เลยเอามาทำให้มันใช้งานได้ครับ

ความต้องการของเขาก็คือฟอร์มอัปโหลด แบบอัปโหลดได้ครั้งละหลายไฟล์ โดยที่เมื่อ submit แล้ว ไฟล์ใดไม่ error ให้อัปโหลดไปก่อน ส่วนไฟล์ใดที่ error ให้แจ้ง error ภายหลังจากที่อัปโหลดทั้งหมดเรียบร้อย และกลับมาแสดงฟอร์มอัปโหลดอีกครั้ง

<?php
if (!empty($_FILES)) {
     // แอเรย์ของไฟล์ที่ยอมให้อัปโหลด
     $validfile = array("image/pjpeg","image/jpeg","image/gif");

     // จองตัวแปร
     $error = array();
     $type_error = array();
    
     foreach ($_FILES["pic"]["error"] as $ekey => $evalue) {
          switch ($evalue) {
          case 1:
          case 2:
               $error[$ekey] = "ขนาดของไฟล์ที่ $ekey มากกว่า " . bytestokb($limit_size) . " KB";
               break;
          case 3:
               $error[$ekey] = "ไฟล์ที่ $ekey ถูกส่งมาแค่เพียงบางส่วน";
               break;
          case 4:
               $error[$ekey] = "ไม่มีการส่งไฟล์ที่ $ekey มา";
               break;
          }
    
          if (!isset($error[$ekey]) && !in_array($_FILES["pic"]["type"][$ekey] , $validfile)) {
               $type_error[$ekey] = "ไฟล์ที่ $ekey ไม่ใช่รูปภาพ ";
          }
     }
    
     if (count($error) > 0 || count($type_error) > 0) {
          // มีข้อผิดพลาด
          echo implode('<br />', $error);
          echo '<br />';
          echo implode('<br />', $type_error);
     }
    
     foreach ($_FILES["pic"]["tmp_name"] as $ekey => $evalue) {
          if (empty($error[$ekey]) && empty($type_error[$ekey])) {
               echo "อัปโหลด $evalue<br />";
          }
     }
}
?>
<form method="POST" enctype="multipart/form-data" name="img_file">
<input type="hidden" name="MAX_FILE_SIZE" value="{$limit_size}">
<input type="file" name="pic[]"><br>
<input type="file" name="pic[]"><br>
<input type="file" name="pic[]"><br>
<input type="file" name="pic[]"><br>
<input type="submit" name="submit" value="upload">
</form>