我有一个问题,为什么我的响应中会遇到此错误,我有一个模块,需要使用Ajax和php作为后端上传多个文件。
警告:count():参数必须是在第行的 C:\ xampp \ htdocs \ PSMID \ Function \ mediaAddFunction.php 中实现Countable的数组或对象> 17
9
警告:count():参数必须是在第行的 C:\ xampp \ htdocs \ PSMID \ Function \ mediaAddFunction.php 中实现Countable的数组或对象> 17
我将与大家分享我已经制作的示例代码。
前端:
var storeFile =[];
$('#media_file').on('change',function(e){
var files = e.target.files;
$.each(files, function(i, file) {
storeFile.push(file);
})
})
$('.news_media_button').on('click',function(){
const media_pages = $('#media_pages').val();
const media_title = $('#media_title').val();
//const media_content = $('#media_content').val();
const ck_editor_content = CKEDITOR.instances['media_content'].getData();
const media_link = $('#media_link').val();
const media_file = $('#media_file').prop('files')[0];
const hidden_auth_user = $('#hidden_auth_user').val();
const data = new FormData();
data.append('media_pages',media_pages);
data.append('media_title',media_title);
data.append('media_content',ck_editor_content);
data.append('media_link',media_link);
data.append('files',storeFile[0]);
data.append('hidden_auth_user',hidden_auth_user);
Swal.fire({
title: 'Are you sure to save this data?',
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#008B74',
confirmButtonText: 'Okay'
}).then((result) => {
if (result.value) {
$.ajax({
url:'./Function/mediaAddFunction.php',
data:data,
type:'POST',
dataType:'JSON',
enctype: 'multipart/form-data',
processData: false,
contentType: false,
success:function(response){
console.log(response);
// Swal.fire(
// 'Success!',
// 'Data Saved.',
// 'success'
// )
// if(response.status == 'Success') {
// location.reload();
// }
},
error:function(response) {
console.log(response);
}
});
}
})
});
后端:
for($i=0;$i<count($_FILES["files"]["name"]);$i++)
{
echo $_FILES["files"]["name"][$i];
}
HTML:
<div class="container-fluid">
<div class="jumbotron" style="background-color:white">
<div class="container-fluid">
<input type="hidden" value="" id="hidden_auth_user" name="">
<div class="container">
<div class="row">
<h2 class="col-md-10">News Media</h2>
<button class="btn btn-primary news_media_button col-md-2 form-control" id="custom_button">Save Data</button>
</div>
<hr>
<br><br>
<div class="row">
<div class="col-md-6">
<label style="font-weight: 500; font-size:14px;">Choose Media Page</label>
<select class="form-control" id="media_pages">
<option value="announcement">Announcement</option>
<option value="news_online">News Online</option>
<option value="info_graphics">Info Graphics</option>
</select>
</div>
<div class="col-md-6">
<label style="font-weight: 500; font-size:14px;">Title</label>
<input type="text" name="media_title" id="media_title" placeholder="Title" class="form-control">
</div>
</div>
<br><br>
<div class="row">
<div class="col-md-6">
<label style="font-weight: 500; font-size:14px;">File Upload</label>
<div class="custom-file">
<input type="file" name="files[]" multiple placeholder="Title" id="media_file" value="" class="custom-file-input form-control">
<label class="custom-file-label" for="inputGroupFile04"></label>
</div>
</div>
<div class="col-md-6">
<label style="font-weight: 500; font-size:14px;">File Link</label>
<input type="text" name="" placeholder="Link" id="media_link" value="" class=" form-control">
</div>
</div>
<br><br>
<div class="row">
<div class="col-md-12">
<label style="font-weight: 500; font-size:14px;">Content</label>
<textarea cols="12" name="content_article" class="form-control" id="media_content"></textarea>
<script>
CKEDITOR.replace('content_article');
</script>
</div>
</div>
<br><br>
<div class="row">
<div class="col-md-12">
</div>
</div>
</div>
</div>
</div>
</div>
答案 0 :(得分:-1)
您发布的php代码完全如下:
后端:
for($i=0;$i<count($_FILES["files"]["name"]);$i++)
{
echo $_FILES["files"]["name"][$i];
}
使用您的代码,我拥有
注意:未定义索引:D:\ Web \ test \ files \ files-2.php中的文件 第6行
警告:count():参数必须是数组或对象, 在第6行的D:\ Web \ test \ files \ files-2.php中实现Countable
要修复代码,您必须使用以下方式更改后端:
if (isset($_FILES["files"]["name"])) {
for ($i = 0; $i < count($_FILES["files"]["name"]); $i++) {
echo $_FILES["files"]["name"][$i];
}
}
这将解决您的问题...魔术代码是:
if (isset($_FILES["files"]["name"])) {
...
}
仅测试了我的files-1.php
文件,没有警告或错误,它在带有PHP/7.3.6 (64it)
和PHP/7.2.17 (64bit)
的真实服务器上运行良好...也已在具有相同PHP版本的localhost上进行了测试...
files-1.php:
<?php
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post">
<label for="files1">File:</label> <input type="file" id="files1" name="files[]" size="35"><br>
<label for="files2">File:</label> <input type="file" id="files2" name="files[]" size="35"><br>
<input type="submit" value="Send">
</form>
<?php
if (isset($_FILES['files']['name'])) {
for ($index = 0; $index < count($_FILES['files']['name']); $index++) {
if ($_FILES['files']['name'][$index] != "") {
echo $_FILES['files']['name'][$index];
}
}
}
?>
根据您的示例,我下面的示例(files-2.php
)几乎没有变化,在这里我没有警告或错误...实际上正在PHP/7.3.6
和PHP/7.2.17
上工作服务器...还在我的本地主机上使用相同的PHP版本进行了测试...
files-2.php:
<?php
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post">
<label for="files">File:</label> <input type="file" id="files" name="files[]" size="35" multiple><br>
<input type="submit" value="Send">
</form>
<?php
if (isset($_FILES['files']['name'])) {
for ($index = 0; $index < count($_FILES['files']['name']); $index++) {
if ($_FILES['files']['name'][$index] != "") {
echo $_FILES['files']['name'][$index];
}
}
}
?>
由PHP快速生成的源html:
<form action="/files/files-2.php" enctype="multipart/form-data" method="post">
<label for="files">File:</label> <input type="file" id="files" name="files[]" size="35" multiple><br>
<input type="submit" value="Send">
</form>
test.zip
您可以看到没有错误或警告...
在线测试:
http://sandbox.onlinephpfunctions.com/code/4e0a5326fc2508e1ca4db90051061b4584b86eae
希望这会有所帮助。