通过AJAX上传文件和PHP处理中的geting错误



我用这个东西撞墙已经4个小时了。

我创建了一个输入(多个文件(,如下所示,它不在表单中

<label for="adaugaFisiere" class="btn btn-success tip" title="Poți adăuga fișiere JPG,PDF,DOC,XLS" data-original-title="Adauga imagini"><span>Adaugă fișiere</span></label>
<input type="file" multiple="" id="adaugaFisiere" name="docImgs[]" class="filestyle invisible" required="" accept="image/*,.pdf,.doc,.docx,.xls,.xlsx" onChange="updateList(<?= $nextNrDoc ?>)">

接下来,我有下面的JavaScript代码,它将文件上传到PHP文件

function updateList(nrDoc){
var inputFiles = $('#adaugaFisiere').prop('files');
var formData = new FormData();
formData.append('listFiles', inputFiles);
$.ajax({
url: 'exec/files-upload.php',
type: 'POST',
cache: false,
data: formData,
contentType: false,
processData: false,
//Ajax events
success: function(html){
$('#fileList').html(html);
},
fail: function(res){
alert('Eroare upload');
}
});

}

最后,PHP文件

var_dump($_POST);
$name_array = $_FILES['listFiles']['name'];
$tmp_name_array = $_FILES['listFiles']['tmp_name'];
// Number of files
$count_tmp_name_array = count($tmp_name_array);

PHP文件更大,但这并不重要,因为我在文件顶部看到一个错误。

dump_var返回这个:

array(1) { ["listFiles"]=> string(17) "[object FileList]" } 

紧随其后的是错误:

Warning: Undefined array key "listFiles" in D:xampphtdocscityadminexecfiles-upload.php on line 4
Warning: Trying to access array offset on value of type null in D:xampphtdocscityadminexecfiles-upload.php on line 4
Warning: Undefined array key "listFiles" in D:xampphtdocscityadminexecfiles-upload.php on line 5
Warning: Trying to access array offset on value of type null in D:xampphtdocscityadminexecfiles-upload.php on line 5

我绕了一圈,但还是想不通。如果dump_var显示到达PHP文件的数据,为什么会出现这个错误?有人知道吗?

请不要对此进行投票,任何人,我刚刚为那些与我处境相同的人发布了帖子。

我从这个线程得到了答案

PHP/Javascript/AAJAX文件通过拖放上传。文件转换为字符串

关键是,当一个输入中有多个文件时,需要循环遍历每个文件,并将其作为数组添加到formData中。之后,您可以在PHP中将其检索为$_FILES[][]。可以使用formData.append()将另一个$_POST[]数据附加到formData,并在PHP处理程序中获得$_POST[]$_FILES[][]数组。

所以,我没有做formData.append("fileList", fileList);,而是做了

for (let i = 0; i < fileList.length; i++) {
formData.append("fileList[]", fileList[i]);
}
formData.append('nextId', nrDoc);
formData.append('post', 'files-upload');

在那次更改之后,我可以访问PHP处理程序中的文件,以及我发送的其他变量。

它曾经在一段时间前工作过,但我一直忙于其他类型的项目,我没有意识到AJAX处理请求的方式肯定发生了变化。

现在,一切都按设计进行,没有任何警告或错误。希望其他人能在这篇文章中找到解决方案!

最新更新