ตัวอย่างการจัดรูปแบบต่อไปนี้ เป็นการใช้งาน jquery ร่วมกับ bootstrap css ในการเปลี่ยน input file
ให้เป็นปุ่มที่สามารถกดใช้งานได้ง่าย พร้อมเทคนิคเล็กน้อย เช่น เมื่อเลือกไฟล์ แล้วให้แสดงชื่อไฟล์
พร้อมมีปุ่ม ยกเลิกการเลือกไฟล์
ดังตัวอย่างการทำงานดังนี้
โค้ดตัวอย่างทั้งหมด demo_index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Document</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<style type="text/css">
.mg-top{margin-top:5px;}
.mg-top10{margin-top:10px;}
.btn-upload{
margin-top:5px;
}
</style>
<br>
<br>
<div class="container" style="width:600px;">
<form action="" method="post" enctype="multipart/form-data" name="form1">
<?php for($i=1;$i<=3;$i++){?>
<div class="form-group">
<label for="photo-up<?=$i?>" class="col-sm-3 control-label mg-top10 text-right">Photo <?=$i?>:</label>
<div class="col-sm-9">
<!-- เพื่อให้สอดคล้องกับการใช้งาน jquery อย่างน้อยให้ element ทั้งสามอันอยู่ติดกัน -->
<input type="file" class="form-control file-up" name="photoup[]" id="photo-up<?=$i?>" style="display:none;">
<div class="btn btn-sm btn-default btn-upload"> Choose File</div>
<div class="btn btn-sm btn-danger mg-top btn-remove-file" style="display:none;">X</div>
</div>
</div>
<?php } ?>
<div class="form-group">
<div class="col-sm-9 col-sm-offset-3">
<br>
<button type="submit" class="btn btn-primary">Send</button>
</div>
</div>
</form>
<br style="clear:both;">
<br>
<?php
// มีการเลือกไฟล์สำหรับอัพโหลดอย่างน้อย 1 ไฟล์
if(isset($_FILES['photoup']['name']) && implode("",$_FILES['photoup']['name'])!=""){
$uploads_dir = 'uploads'; // โฟลเดอร์สำหรับเก็บไฟล์
$totalFile = count($_FILES['photoup']['name']); // จำนวน input file ทั้งหมด
for($i = 0; $i < $totalFile; $i++){ // วนลูปจัดการไฟล์แต่ละไฟล์
$tmpFile = $_FILES['photoup']['tmp_name'][$i];
$fileName = $_FILES['photoup']['name'][$i]; // เก็บชื่อไฟล์
if($fileName!=""){
$info = pathinfo($fileName);
echo "<pre>";
print_r($info); // ข้อมูลไฟล์
echo "</pre>";
$ext = $info['extension']; // เก็บค่านามสกุลไฟล์
$setFileName = time(); // กำหนดชื่อไฟล์ใหม่
$fileName_new = $setFileName.".".$ext;
echo $fileName." -- ".$fileName_new."<br>"; // ชื่อไฟล์ และชื่อไฟล์ใหม่
if(is_dir($uploads_dir)){
if(move_uploaded_file($tmpFile, $uploads_dir."/".$fileName_new)){
echo $fileName_new." uploaded!!<br>"; // ชื่อไฟล์ที่อัพโหลดสำเร็จ
///////// เพิ่มคำสั่งอื่นๆ ตามต้องการ
}else{ echo "อัพโหลดไฟล์ล้มเหลว "; }
}else{ echo "ไม่มีโฟลเดอร์นี้ ".$uploads_dir; }
}
}
}
?>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"></script>
<script type="text/javascript">
$(function(){
// เมื่อคลิกที่ปุ่มเลือกไฟล์
$(".btn-upload").on("click",function(){
// ให้ input file เกิด event click
$(this).prev("input:file").trigger("click");
});
// ถ้ามีการเปลี่ยนไฟล์ที่อัพโหลด
$(".file-up").on("change",function(){
var fileLength = $(this)[0].files.length; // เลือกไฟล์หรือไม่
if(fileLength!=0){ // ถ้าเลือกไฟล์
$(this).next(".btn-upload").text($(this).val());
$(this).nextAll(".btn-remove-file").show();
}else{ // ถ้าไม่ได้เลือกไฟล์
$(this).next(".btn-upload").text("Choose File");
$(this).nextAll(".btn-remove-file").hide();
}
});
// ถ้าคลิกที่ปุ่มยกเลิกเลือกไฟล์
$(".btn-remove-file").on("click",function(){
var el = $(this).prevAll("input:file");
el.wrap('<form>').closest('form').get(0).reset();
el.unwrap();
$(this).prev(".btn-upload").text("Choose File");
$(this).hide();
});
});
</script>
</body>
</html>
ในตัวอย่างเป็นการใช้งาน input file แบบ array มีโค้ดตัวอย่างในการตรวจสอบและอัพโหลดไฟล์
สามารถนำไปประยุกต์ใช้งานเพิ่มเติมได้