ปัญหาการ upload ไฟล์ลง DB

<?
 $numfile = 5;
 

 echo "<form method=\"post\" =\"upload.php\" enctype=\"multipart/form-data\">
";
 for($i=1;$i<=$numfile;$i++)
 {
  echo "<input type=\"file\" name=\"item_file[]\" size=\"30\"><br>
";
 }
 echo "<input type=\"submit\" name=\"submit\" value=\"submit\">
";
    echo "</form>
";
?>
 

จากโค๊ดผมต้องการเขียนโปรแกรมการอัฟโหลดไฟล์หลาย ๆ ไฟล์เพื่อ insert ลง DB

ไฟล์ upload.php 

 for($j=0; $j < count($_FILES[item_file][name]); $j++)
  {
   echo $filen = $_FILES[item_file][name][$j]; //file name
   //$j+1;
   
   
   $result = InsertData($dbname, upload, "name, type, size","'$filen', '', ''");
  }
ปัญหาที่พบคือถ้าเรากำหนด $numfile=5 เพื่อแสดง input file ให้ Browse ไฟล์จำนวน 5 อัน

แต่ถ้าเรามีการ browse ไฟล์เพียง 2 อัน เวลาที่ insert ลง DB มันก็จะลงทั้ง 5 อันครับ  โดยมี 2 เรคอร์ดที่มีไฟล์และอีก 3 เรคคอร์ดจะว่างครับ

จะมีวิธีการ count ข้อมูลที่เรา upload ไฟล์จิง ๆ ยังไงคับ

23 ต.ค. 2551 7 3,360

ใช้วิธีการตรวจสอบว่า มีการส่งไฟล์มาหรือไม่ครับ

if ( $_FILES[item_file][tmp_name] != '' )
{
  // มีไฟล์ส่งมาด้วย
};

 

#1

ไม่ได้ครับ

คือแบบนี้ครับ
ตอนที่เรากำหนดตัวแปร $numfile =5
เวลาที่เรานำมาเข้า Loop For นั้น
for($i=0,$i<$numfile,$i++)

มันก็จะวนลูปเพื่อ insert   ทั้งหมด 5 รอบครับ

โดยถ้าผมมีการ  browse ข้อมูลเพียง 2  อันแล้ว upload  เนี่ยมันจะมีข้อมูลที่ insert เข้าไป 5 เรคคอร์ด
โดยที่มีข้อมูล 2 เรคคอร์ด และอีก 3 เรคคอร์ด  มันจะว่างครับ

ผมต้องการแบบว่าให้มีข้อมูลที่ insert ลง DB เพียง 2 อันตามที่เรา Browse ไฟล์จริง ๆ ครับ

 

#2

555+++

แสดงว่าไม่เข้าใจจริงๆ

หลักการก็คือตรวจสอบว่า มีการ browser ไฟล์มาทั้งหมดกี่อัน ไม่ว่าจะมี browser มาทั้งหมดกี่ตัว

การตรวจสอบว่ามีการ browser มาหรือไม่ ใน input ชนิดไฟล์ ก็คือการตรวจสอบค่าในตัวแปร input

ลองใช้คำสั่งนี้ดู print_r( $_FILES ) เพื่อดูว่ามี input ชนิดไฟล์ทั้งหมดกี่อัน และอันไหนที่มีการส่งไฟล์บ้าง และมี paraneter หรือรูปแบบยังไง แล้วเอาค่าที่ได้มาใช้ในการตรวจสอบ

ทีนี้ถ้ารู้ว่า ตัวแปรอันไหนที่จะบอกได้ว่า มีการส่งไฟล์มา ก็ใช้อันนั้น มาตรวจสอบ ว่า มีการส่งมาหรือไม่ ซี่งโดยปกติก็จะใช้กับ tmp_name ถ้าตัวแปรนี้มีค่ามา ก็แสดงว่ามีการ browser มา

ผมบอกวิธีการตรวจสอบให้ ส่วนจะเอาไปใช้ยังไงก็ต้องไปประยุกต์เอา วิธีการก็ไม่ซับซ้อนอะไร ก็แค่ตรวจว่า มีการส่งไฟล์มาหรือไม่ ถ้ามี ก็เอาไป insert เท่านั้น

การใช้ input ชนิด array อาจยุ่งยากหากจัดการตรวจสอบไม่เหมาะสม ให้ลองใช้คำสั่ง print_r เพื่อดูว่าการส่งค่าใปนยังไงครับ

อ้อ มีตัวอย่างอัปโหลด หลายๆ ไฟล์บนเว็บ ลองศึกษาดูอาจช่วยได้ครับ

#3

ยังงงอยู่เลยครับ หุหุ

รบกวนอธิบายอีกนิด...หรือมีเว็บต้วอย่างให้ดูเป็นแนว ๆ หน่อยครับ

#4

ตัวอย่างอัปโหลด หลายๆ ไฟล์บนเว็บ ลองศึกษาดูอาจช่วยได้ครับ

มีตั้งหลายโปรเจ็คที่ใช้เทคนิคนี้ gallary ก็ใช้ GCMS ก็ใช้ ถ้าจะหาตัวอย่างก็มีเยอะแยะบนเว็บครับ

#5

ขอบคุณมากครับได้แล้วครับ  ผมเขียนแบบนี้

 

for($i=0;$i<count($_FILES[item_file][name]);$i++){

if($_FILES[item_file][name][$i]){
 $filen = $_FILES[item_file][name][$i];
 $result = InsertData($dbname, attach, "Fname, Type","'$filen','$type'");
 }
}
 

 

#6

ยินดีด้วยครับ

และผมก็ขอขอบคุณสำหรับการโพสต์ผลลัพท์การแก้ปัญหาที่สำเร็จแล้วครับ เป็นตัวอย่างที่ดีครับ

#7
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 1024
^