ตัวอย่างการอัปโหลดหลายไฟล์พร้อมการแจ้ง error
ตัวอย่างการอัปโหลดแบบแปลกๆอันหนึ่งที่มีสมาชิกถามมาบนบอร์ด ผมเห็นว่าแปลกดีก็เลยเอามาทำให้มันใช้งานได้ครับ
ความต้องการของเขาก็คือฟอร์มอัปโหลด แบบอัปโหลดได้ครั้งละหลายไฟล์ โดยที่เมื่อ submit แล้ว ไฟล์ใดไม่ error ให้อัปโหลดไปก่อน ส่วนไฟล์ใดที่ error ให้แจ้ง 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>