Не могу загрузить несколько файлов PHP

У меня проблема. Я хочу иметь возможность загружать один или несколько файлов из html, а затем с помощью ajax и php сохранять их на своем сервере. Если я просто хочу загрузить один файл, он работает нормально, но если я хочу загрузить более одного, это не работает. Дело в том, что у меня есть таблица с 4 вариантами, последний из которых — загрузить. Но под этим есть кнопка ДОБАВИТЬ, поэтому, когда я нажимаю на эту кнопку, появляется другая таблица (та же самая таблица), и именно здесь у меня проблема. Это часть кода HTML:

   <table id = "myTable" class = " table order-list">
              <tbody id = "personalInfo">
                <tr>
                  <td class = "col-sm-2">
                    <input type = "text" class = "form-control" name = "name0"
                      placeholder = "<?php echo  $translate['name'][$lang]?>">
                  </td>
                  <td class = "col-sm-2">
                    <input type = "text" class = "form-control" name = "surname0"
                    placeholder = "<?php echo  $translate['surname'][$lang]?>">
                  </td>
                  <td class = "col-sm-2">
                    <input type = "text" class = "form-control datepickerYear" name = "age0" autocomplete = "off"
                    placeholder = "2000" required />
                  </td>
                  <td class = "col-sm-2">
                    <div class = "pt-1">
                      <input type = "file" class = "form-control" id = "UploadFile" name = "UploadFile0" accept = "application/pdf" required />
                    </div>
                  </td>
                  
                  <td class = "col-sm-1"><a class = "deleteRow"></a>
                  </td>
                </tr>
              </tbody>
              <tfoot>
                <tr>
                  <td colspan = "5" style = "text-align: left;">
                    <input type = "button" class = "btn btn-danger " id = "addRow"
                      value = "<?php echo  $translate['add'][$lang]?>" />
                  </td>
                </tr>
                <tr>
                </tr>
              </tfoot>
            </table>

Хорошо, а затем я использую JS, чтобы добавить еще одну строку, когда я нажимаю кнопку ДОБАВИТЬ. Все работает нормально, но с файлом делаю так:

 var fileCounter = 0;  

      const fileSelector2 = document.getElementById('UploadFile');
      var file2;
      
      fileSelector2.addEventListener('change', (event) => {
        
        file2 = event.target.files[fileCounter];
        fileCounter++;
      });

А затем с JS я использую ajax для отправки POST на php. Часть php такова:

$name=$json->fullName ;

            $location = "../location/" .$name.$cont. ".pdf"; 

                        
            if (!move_uploaded_file($_FILES['file2']['tmp_name'], $location)) {
                echo json_encode(-1);
                exit();
            }

Как я уже сказал, когда я просто загружаю один файл, он работает нормально, но с более чем одним файлом я не знаю, как сохранить и использовать POST с несколькими файлами.

Отвечает ли это на ваш вопрос? Как выбрать несколько файлов с помощью <input type = "file">?

DarkBee 25.01.2023 10:36

@DarkBee, нет, потому что в моем случае я не хочу загружать несколько файлов в один <intput>, у меня есть несколько <input> с несколькими файлами (не всегда одинаковое количество), поэтому я хочу сохранить их в одной переменной ( как массив), а затем загружать их по одному.

iuatsj 25.01.2023 10:40
i have multiple <input> with multiple files - Согласно коду, который вы разместили, нет. Пожалуйста, предоставьте весь необходимый код и информацию
DarkBee 25.01.2023 10:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Следующий код позволяет загружать несколько файлов.

HTML:

<form action = "upload.php" method = "post" enctype = "multipart/form-data">
    <input type = "file" name = "files[]" multiple>
    <input type = "submit" value = "Upload">
</form>

Javascript:

$(document).ready(function(){ 

    $('form').on('submit', function(e){

        e.preventDefault();

        var formData = new FormData($(this)[0]);

        $.ajax({

            url: 'upload.php', // point to server-side PHP script 
            dataType: 'text',  // what to expect back from the PHP script, if anything
            cache: false,
            contentType: false,
            processData: false,
            data: formData,                         
            type: 'post',

            success: function(response){

                alert(response); // display response from the PHP script, if any

            }

         });

    });                                             
});                                          

PHP (загрузить.php):

<?php 

    if (isset($_FILES['files'])) {

        $errors = array();

        foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {

            $file_name = $_FILES['files']['name'][$key]; // get the file name of the uploaded file            

        }
    }
?> 

Возможная копия этого вопроса. Вы не можете просто скопировать/вставить код без указания авторства

DarkBee 25.01.2023 10:48

уважаемый @DarkBee, Нет, я не копирую и вставляю, а уже воспроизвел эту проблему у себя

BhAvik Gajjar 25.01.2023 11:23

Полезный ответ для меня, чтобы загрузить несколько файлов

Ali Usman 26.01.2023 05:44

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