如何修复参数必须是实现Countable的数组或对象

时间:2019-06-08 09:09:20

标签: php jquery html

我有一个问题,为什么我的响应中会遇到此错误,我有一个模块,需要使用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>

1 个答案:

答案 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>&nbsp;<input type="file" id="files1" name="files[]" size="35"><br>
<label for="files2">File:</label>&nbsp;<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.6PHP/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>&nbsp;<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];
    }
  }
}
?>

test1 test2

由PHP快速生成的源html:

<form action="/files/files-2.php" enctype="multipart/form-data" method="post">
<label for="files">File:</label>&nbsp;<input type="file" id="files" name="files[]" size="35" multiple><br>
<input type="submit" value="Send">
</form>
test.zip

您可以看到没有错误或警告...

在线测试:

https://3v4l.org/tqgUp

http://sandbox.onlinephpfunctions.com/code/4e0a5326fc2508e1ca4db90051061b4584b86eae

希望这会有所帮助。