Загрузка нескольких файлов с НЕСКОЛЬКИМИ входами

Я создаю конструктор шаблонов электронной почты, который позволяет мне вводить содержимое, которое затем заполняет шаблон электронной почты в формате html. Часть формы позволяет добавлять новые разделы. В каждом разделе есть вход для загрузки, который позволяет пользователям добавлять миниатюру изображения в этот раздел. Я изо всех сил пытаюсь понять, как отправлять несколько изображений в одной форме, которые поступают из нескольких входов (вместо того, чтобы просто установить для одного входа значение «несколько»).

Вот HTML

<div class = "row">
        <div id = "example1" class = "list-group col">
          <div class = "list-group-item article">
            <h4>Article Heading:</h4>
            <input type = "text" name = "ArticleHeading[]" 
    placeholder = "Type your heading" />
            <h4>Article Subheading:</h4>
            <input type = "text" name = "ArticleHeading[]" 
    placeholder = "Type your subheading"/>
            <h4>Thumbnail Image:</h4>
            <input type = "file" name = "fileToUpload" 
   id = "fileToUpload">
          </div>
        </div>
      </div>

Вот PHP:

//IMAGE UPLOADING
    $target_dir = "uploads/";
    $target_file = $target_dir . 
    basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = 
    strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    // Check if image file is a actual image or fake image
    if (isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"] 
   ["tmp_name"]);
    if ($check !== false) {
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
     }
     }
     // Check if file already exists
     if (file_exists($target_file)) {
     echo "Sorry, file already exists.";
     $uploadOk = 0;
     }
     // // Check file size
     // if ($_FILES["fileToUpload"]["size"] > 500000) {
     //     echo "Sorry, your file is too large.";
     //     $uploadOk = 0;
     // }
     // Allow certain file formats
     if ($imageFileType != "jpg" && $imageFileType != "png" 
      && $imageFileType != "jpeg"
     && $imageFileType != "gif" ) {
     echo "Sorry, only JPG, JPEG, PNG & GIF files are 
     allowed.";
     $uploadOk = 0;
     }
     // Check if $uploadOk is set to 0 by an error
     if ($uploadOk == 0) {
     echo "Sorry, your file was not uploaded.";
     // if everything is ok, try to upload file
     } else {
     if (move_uploaded_file($_FILES["fileToUpload"] 
     ["tmp_name"], $target_file)) {
     } else {
         echo "Sorry, there was an error uploading your 
     file.";
     }
     }
     $thumbnailPath = "uploads/".$_FILES["fileToUpload"] 
     ["name"];
     //END IMAGE UPLOADING

Я попытался назвать входной файл name="file[]", а затем использовать массив для загрузки каждого файла, но каждый раз вылетала ошибка.... не знаю, что еще делать.

Установка имени на file[] должна работать, но имейте в виду, что $_FILES['file'] тогда также будет массивом. Таким образом, для первого файла вам потребуется доступ к $_FILES['file'][0]['name'] вместо $_FILES['file']['name']. В качестве альтернативы дайте каждому входу уникальное имя.

rickdenhaan 21.02.2019 00:37

name = "file[]" - правильный подход, покажите этот код и фактические ошибки

user10051234 21.02.2019 00:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
1 352
2

Ответы 2

Добавьте атрибут enctype = "multipart/form-data" в свою форму.

См. эта тема для получения дополнительной информации.

Это для загрузки одного входа. Моя проблема в том, что я загружаю несколько изображений с нескольких входов. Спасибо хоть!

John Steve 21.02.2019 01:20

Я понял, что поступаю правильно, задав имя массиву изображений. Мне нужно было создать цикл for(), который затем проходил через массив и назначал каждый путь к файлу другому массиву. Затем я присвоил каждому значению в этом массиве тег.

Вот HTML:

            <input type = "file" name = "upload[]" multiple = "multiple">

Вот PHP:

//$files = array_filter($_FILES['upload']['name']); //something like that to be used before processing files.
// Count # of uploaded files in array
$total = count($_FILES['upload']['name']);
echo $total."<br>";
$newArray = array();

// Loop through each file
for( $i=0 ; $i < $total ; $i++ ) {

  //Get the temp file path
  $tmpFilePath = $_FILES['upload']['tmp_name'][$i];

  //Make sure we have a file path
  if ($tmpFilePath != ""){
    //Setup our new file path
    $newFilePath = "uploads/" . $_FILES['upload']['name'][$i];

    //Upload the file into the temp dir
    if (move_uploaded_file($tmpFilePath, $newFilePath)) {
      //Handle other code here

    }
  }
}

Другие вопросы по теме