2015-06-21 3 views
2

У меня есть простая форма html, в которой есть текстовые поля и файлы, созданные из цикла 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 везде:

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

Теперь ваша $key переменная в PHP является как индекс для файла и для текстовых полей.

Edit: Когда вы делаете это так, вам нужно удалить цикл в цикле, как теперь вы перезаписать свои $key/$value переменные внешнего контура во внутреннем цикле.

Вам нужен только один цикл, и вам нужно подготовить инструкцию sql перед циклом (вы сейчас не готовите его). Затем в вашем цикле вы можете использовать переменную $key для выполнения вашей инструкции один раз с соответствующими переменными $_POST.

+0

Я также пробовал это на самом деле. Нет изменений вообще – Dejavu

+0

@Dejavu Вам также нужно обновить код базы данных в цикле, чтобы не использовать цикл, поскольку теперь вы переписываете переменные '$ key' /' $ value'. Я добавлю дополнительную информацию к вопросу. – jeroen

+0

Хорошо, спасибо, но я не мог понять, как написать один цикл для обоих файлов и текстовых полей. – Dejavu

Смежные вопросы