ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: rtee ที่ 24 สิงหาคม 2012, 15:53:14



หัวข้อ: ถามเรื่องบันทึกข้อมูลลง db 2 ข้อมูลในครั้งเดียว
เริ่มหัวข้อโดย: rtee ที่ 24 สิงหาคม 2012, 15:53:14
คือ ผมมีฟอร์มที่ให้แนบรูปภาพส่งไปตามฟอร์ม post ได้ด้วย
แล้วพอเข้าไปที่ไฟล์สคริปต์
ก็จะให้บันทึกข้อมูลไฟล์รูปเหล่านี้ โดยให้ duplicate ตัวเองเป็น 2 ไฟล์ และเก็บข้อมูลลงฐานข้อมูลเป็น 2 records ครับ..

อืม เดี๋ยวจะงง เอางี้ เดี๋ยวให้ดูโค้ดนะครับ

อันนี้เป็นฟอร์มสำหรับโพสรูปขึ้นไป
โค๊ด:
<form method="post" action="script.php" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" />
</form>

อันนี้เป็นไฟล์สคริปต์ //ข้ามขั้นตอนการติดต่อฐานข้อมูลนะครับ เพราะจะมีอีกไฟล์ทำหน้าที่ติดต่อฐานข้อมูลอยู่แล้ว
โค๊ด:
<?php
$file 
$_FILES["file"];
if (
$file["size"]>0) {
  for(
$i=1;$i<=2;$i++){
    
$filename $i."_".$file["name"];
    if (
copy($file["tmp_name"],"upload/"$filename)){
      
mysql_query("INSERT INTO table (filename) VALUES ('".$filename."')");
      
$id mysql_insert_id();
    }
  }
}
?>


แต่ปัญหาก็คือ...
ไฟล์ที่ 1 สามารถอัพโหลดได้ปกติ และบันทึกข้อมูลลงฐานข้อมูลได้ปกติ
แต่
ครั้งที่ 2 มันเฟล และฟ้องว่า failed to open stream: No such file or directory

เลยอยากรู้ว่า มันจะเกี่ยวข้องกับการประกาศตัวแปร $file หรือไม่ครับ ?


หัวข้อ: Re: ถามเรื่องบันทึกข้อมูลลง db 2 ข้อมูลในครั้งเดียว
เริ่มหัวข้อโดย: siammbk ที่ 27 สิงหาคม 2012, 18:16:01
ดูที่ database ก่อนคับว่า ตรง id ได้ตั้งไว้หรือป่าว
และตรง id เนี่ย ได้ตั้งให้เป็น auto_increment หรือป่าว


หัวข้อ: Re: ถามเรื่องบันทึกข้อมูลลง db 2 ข้อมูลในครั้งเดียว
เริ่มหัวข้อโดย: kobkung ที่ 27 สิงหาคม 2012, 22:09:24
เอไม่เคยลองแบบนี้

ลอง echo ค่าออกมาดูว่าครั้งที่ 2 temp ของ file ยังอยู่ไหม
$filename = $i."_".$file["name"];
echo $filename;

กับ ตัวนี้ $file["tmp_name"]


หัวข้อ: Re: ถามเรื่องบันทึกข้อมูลลง db 2 ข้อมูลในครั้
เริ่มหัวข้อโดย: icez ที่ 27 สิงหาคม 2012, 22:13:40
// ไม่เกี่ยวกับคำถาม
วิธีย้าย file ที่ upload มาให้ใช้คำสั่ง move_uploaded_file ครับ อย่าใช้ copy เสี่ยงต่อการถูก inject


หัวข้อ: Re: ถามเรื่องบันทึกข้อมูลลง db 2 ข้อมูลในครั้งเดียว
เริ่มหัวข้อโดย: c0untry-m@n ที่ 27 สิงหาคม 2012, 22:41:51
บรรทัดนี้พิมพ์ตกไปหรือเปล่าครับ

โค๊ด:
if (copy($file["tmp_name"],"upload/"$filename)){

น่าจะแบบนี้หรือเปล่า แต่ error คนละตัว ไม่น่าเกี่ยวกับคำถามนี้

โค๊ด:
if (copy($file["tmp_name"],"upload/".$filename)){

เอาเป็นว่าเผื่อพิมพ์ตกไปจริงๆ ละกันครับ


หัวข้อ: Re: ถามเรื่องบันทึกข้อมูลลง db 2 ข้อมูลในครั้งเดียว
เริ่มหัวข้อโดย: massacre ที่ 28 สิงหาคม 2012, 02:54:30
copy tmp -> file1
copy file1 -> file2
ก็น่าจะได้แล้วครับ


หัวข้อ: Re: ถามเรื่องบันทึกข้อมูลลง db 2 ข้อมูลในครั้งเดียว
เริ่มหัวข้อโดย: EMINEM ที่ 28 สิงหาคม 2012, 08:30:08

อันนี้ผมมั่วนะครับ  :wanwan004:

<?php
$file1 = $_FILES["file"];
$file2 = $_FILES["file"];

if ($file1["size"]>0) {

    $filename1 = "1_".$file1["name"];
    $filename2 = "2_".$file2["name"];
    if (copy($file1["tmp_name"],"upload/"$filename1)&&copy($file2["tmp_name"],"upload/"$filename2)){
      mysql_query("INSERT INTO table (filename) VALUES ('".$filename1."')");
      mysql_query("INSERT INTO table (filename) VALUES ('".$filename2."')");
      $id = mysql_insert_id();
    }

}
?>


แต่ผมว่า
แบบนี้น่าจะดีกว่าครับ
copy tmp -> file1
copy file1 -> file2
ก็น่าจะได้แล้วครับ