php - 如何修复Parameter必须是实现Countable的数组或对象
问题描述
我有一个问题,为什么我在回复中遇到这个错误,我有一个模块,我需要使用 Ajax 和 php 作为后端上传多个模块。
警告:count():参数必须是在第17行C:\xampp\htdocs\PSMID\Function\mediaAddFunction.php中实现 Countable 的数组或对象 9警告:count():参数必须是数组或对象在第17行的C:\xampp\htdocs\PSMID\Function\mediaAddFunction.php中实现 Countable
我将与你们分享我已经制作的示例代码。
前端:
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>
解决方案
解决了你的问题:
您已经发布了您的 php 代码,如下所示:
后端:
for($i=0;$i<count($_FILES["files"]["name"]);$i++)
{
echo $_FILES["files"]["name"][$i];
}
使用您的代码,我有:
注意:未定义索引:第 6 行 D:\Web\test\files\files-2.php 中的文件
警告:count():参数必须是数组或对象,在 D:\Web\test\files\files-2.php 第 6 行实现 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 版本进行了测试......
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
示例(
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
希望这可以帮助。
推荐阅读
- ubuntu - 从第三台机器访问 SSH 隧道
- qml - 无法在 Component.onCompleted 之外动态更改 KDE Plasma 5 Widget Expandable FullRepresentation 组件大小
- go - 如何运行 goroutine 的单个实例
- xcode10 - 视图中的 Xcode 地址标签
- android - 如何让 Android Widget StackView 排列其显示顺序
- java - 如何为 CLOB 类型列创建数据框
- c# - C# WebApplication - System.Data.OleDb 找到但几乎为空
- php - 第 15 行的 PHP 错误我需要帮助
- angular5 - 自定义操作方法在 ng2 smarttable 中不起作用
- php - 使用用户名/cookie 以编程方式登录 Wordpress