У меня проблема. Я хочу иметь возможность загружать один или несколько файлов из 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 с несколькими файлами.
@DarkBee, нет, потому что в моем случае я не хочу загружать несколько файлов в один <intput>, у меня есть несколько <input> с несколькими файлами (не всегда одинаковое количество), поэтому я хочу сохранить их в одной переменной ( как массив), а затем загружать их по одному.
i have multiple <input> with multiple files - Согласно коду, который вы разместили, нет. Пожалуйста, предоставьте весь необходимый код и информацию



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Следующий код позволяет загружать несколько файлов.
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, Нет, я не копирую и вставляю, а уже воспроизвел эту проблему у себя
Полезный ответ для меня, чтобы загрузить несколько файлов
Отвечает ли это на ваш вопрос? Как выбрать несколько файлов с помощью <input type = "file">?