ปัญหาการ 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 ไฟล์จิง ๆ ยังไงคับ
ใช้วิธีการตรวจสอบว่า มีการส่งไฟล์มาหรือไม่ครับ
if ( $_FILES[item_file][tmp_name] != '' )
{
// มีไฟล์ส่งมาด้วย
};
ไม่ได้ครับ
คือแบบนี้ครับ
ตอนที่เรากำหนดตัวแปร $numfile =5
เวลาที่เรานำมาเข้า Loop For นั้น
for($i=0,$i<$numfile,$i++)
มันก็จะวนลูปเพื่อ insert ทั้งหมด 5 รอบครับ
โดยถ้าผมมีการ browse ข้อมูลเพียง 2 อันแล้ว upload เนี่ยมันจะมีข้อมูลที่ insert เข้าไป 5 เรคคอร์ด
โดยที่มีข้อมูล 2 เรคคอร์ด และอีก 3 เรคคอร์ด มันจะว่างครับ
ผมต้องการแบบว่าให้มีข้อมูลที่ insert ลง DB เพียง 2 อันตามที่เรา Browse ไฟล์จริง ๆ ครับ
555+++
แสดงว่าไม่เข้าใจจริงๆ
หลักการก็คือตรวจสอบว่า มีการ browser ไฟล์มาทั้งหมดกี่อัน ไม่ว่าจะมี browser มาทั้งหมดกี่ตัว
การตรวจสอบว่ามีการ browser มาหรือไม่ ใน input ชนิดไฟล์ ก็คือการตรวจสอบค่าในตัวแปร input
ลองใช้คำสั่งนี้ดู print_r( $_FILES ) เพื่อดูว่ามี input ชนิดไฟล์ทั้งหมดกี่อัน และอันไหนที่มีการส่งไฟล์บ้าง และมี paraneter หรือรูปแบบยังไง แล้วเอาค่าที่ได้มาใช้ในการตรวจสอบ
ทีนี้ถ้ารู้ว่า ตัวแปรอันไหนที่จะบอกได้ว่า มีการส่งไฟล์มา ก็ใช้อันนั้น มาตรวจสอบ ว่า มีการส่งมาหรือไม่ ซี่งโดยปกติก็จะใช้กับ tmp_name ถ้าตัวแปรนี้มีค่ามา ก็แสดงว่ามีการ browser มา
ผมบอกวิธีการตรวจสอบให้ ส่วนจะเอาไปใช้ยังไงก็ต้องไปประยุกต์เอา วิธีการก็ไม่ซับซ้อนอะไร ก็แค่ตรวจว่า มีการส่งไฟล์มาหรือไม่ ถ้ามี ก็เอาไป insert เท่านั้น
การใช้ input ชนิด array อาจยุ่งยากหากจัดการตรวจสอบไม่เหมาะสม ให้ลองใช้คำสั่ง print_r เพื่อดูว่าการส่งค่าใปนยังไงครับ
อ้อ มีตัวอย่างอัปโหลด หลายๆ ไฟล์บนเว็บ ลองศึกษาดูอาจช่วยได้ครับ
ยังงงอยู่เลยครับ หุหุ
รบกวนอธิบายอีกนิด...หรือมีเว็บต้วอย่างให้ดูเป็นแนว ๆ หน่อยครับ
ตัวอย่างอัปโหลด หลายๆ ไฟล์บนเว็บ ลองศึกษาดูอาจช่วยได้ครับ
มีตั้งหลายโปรเจ็คที่ใช้เทคนิคนี้ gallary ก็ใช้ GCMS ก็ใช้ ถ้าจะหาตัวอย่างก็มีเยอะแยะบนเว็บครับ
ขอบคุณมากครับได้แล้วครับ ผมเขียนแบบนี้
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'");
}
}
ยินดีด้วยครับ
และผมก็ขอขอบคุณสำหรับการโพสต์ผลลัพท์การแก้ปัญหาที่สำเร็จแล้วครับ เป็นตัวอย่างที่ดีครับ