2015-06-21 22 views
2

我有一個簡單的html表單,它具有從foreach循環創建的文本框和文件輸入。我可以用我的代碼上傳文件,但無法更新我的數據庫。不過,我可以上傳數據庫,如果我提出查詢foreach循環之外,但我不能更新文件名Mysql更新多個文本框並同時上傳多個文件

foreach($_FILES['fileName']['name'] as $key => $value) { 

    $file_name = $_FILES['fileName']['name'][$key]; 
    $file_size = $_FILES['fileName']['size'][$key]; 
    $file_tmp = $_FILES['fileName']['tmp_name'][$key]; 
    $file_ext = pathinfo($file_name, PATHINFO_EXTENSION); 
    $uploadLocation = "../upload/".$file_name; 

    $move = move_uploaded_file($file_tmp,$uploadLocation); 

    if($move) { 


     foreach($_POST['imageID'] as $key => $value) { 
     $image_ID = $_POST['imageID'][$key]; 
     $image_title = $_POST['imageTitle'][$key]; 
     $updateImage = $db->execute(
      "UPDATE images 
      SET image_title=?, image_name=? 
      WHERE ID=$image_ID AND page_id=$page_id", 
      array($image_title, $file_name) 
     ); 
     } 


     echo "Updated"; 

    }else{ 
     echo "Something went wrong!"; 
    } 

} 

我的形式:

<?php 
    // Get images and image titles from the database 
    $content_images = $db->get_rows("SELECT * FROM images WHERE page_id = $page_id AND image_type = 'content' "); 

    foreach ($content_images as $image) : 
     $image_ID = $image->ID; 
     $image_name = $image->image_name; 
     $image_title = $image->image_title; 

?> 

<input name="imageTitle[<?php echo $image_ID; ?>]" type="text" value="<?php echo $image_title; ?>"> 

<img src="<?php echo $upload_folder.$image_name; ?>" alt="<?php echo $image_title; ?>"> 

<input type="file" name="fileName[]"> 
<input type="hidden" name="imageID[<?php echo $image_ID; ?>]" value="<?php echo $image_ID 

<?php 
    endforeach; 
?> 

回答

1

問題是你在使用數組的方式您的表單:

... 
<input type="file" name="fileName[]"> 
           ^^ zero-based index 
<input type="hidden" name="imageID[<?php echo $image_ID; ?>]" 
            ^^^^^^^^^^^^^^^^^^^^^^^^^^ ID from database index 
... 

請注意,您將文件和其他表單字段使用ID作爲索引使用從零開始的索引。

因此,當您將此信息發送到服務器時,文件的索引與文本字段的索引沒有任何關係。

解決辦法是到處使用的ID:

... 
<input type="file" name="fileName[<?php echo $image_ID; ?>]"> 
<input type="hidden" name="imageID[<?php echo $image_ID; ?>]" 
... 

現在,在你的PHP變量$key既是對文件和文本字段的索引。

編輯:當你那樣做,你需要消除環路的環路現在要覆蓋外環的你$key/$value變量在內部循環。

你只需要一個循環,你需要在循環之前準備好你的sql語句(你現在沒有準備好它)。然後在你的循環中,你可以使用$key變量來執行你的語句一次與相應的$_POST變量。

+0

我也試過,其實。完全沒有任何變化 – Dejavu

+0

@Dejavu您還需要在循環中更新數據庫代碼,以便在覆蓋'$ key' /'$ value'變量時不使用循環。我會在問題中增加更多信息。 – jeroen

+0

好的謝謝,但我無法弄清楚如何爲文件和文本框編寫一個循環 – Dejavu