首页 > 解决方案 > 如何使用codeigniter在MYSQL数据库中使用数组索引上传文件

问题描述

抱歉,如果这是一个菜鸟问题,我还是 codeigniter 的新手,

这是我的问题,

我有一个回应,看起来像这样

Array([0] => Array([original_name] => avatar_img12.png [filename] => avatar_img12.png) [1] => Array([original_name]=> add_icon27.png [filename] => add_icon27.png))

我有 2 个输入类型的文本框文件,这就是为什么它只有 0 和 1 的索引,我能够在需要两个输入类型文件的帮助下将它上传到我的数据库中,但我的问题是用户何时更新他们的数据,

他们将有机会更新相同的文件,或者只是其中一个。我怎样才能只更新特定的索引。

我已经尝试为每个索引创建一个 if 语句,但我有一个错误offset 1oroffset 0

这是我的模型

          if($files[0] != '' && $files[1]==''){
            $this->db->select('id,picture_id');
            $this->db->from($this->project_tbl);
            $this->db->where('id',$id);
             $query = $this->db->get();
                if($query->num_rows() > 0){
                    $this->db->where('id', $query->row()->picture_id);
                    $this->db->update($this->project_core_documents, $files[0]);
                }
            }else if($files[1] != '' && $files[0]==''){
                $this->db->select('id,detailed_report_id');
                $this->db->from($this->project_tbl);
                $this->db->where('id',$id);
                $query = $this->db->get();
                    if($query->num_rows() > 0){
                        $this->db->where('id', $query->row()->detailed_report_id);
                        $this->db->update($this->project_core_documents, $files[1]);
                    }
            }else{
                //both files
            }


这是我的表格

<form class="kt-form" id = "save_project" enctype="multipart/form-data">
<input type="file" class="form-control project_userfiles" name = "userfile[]" multiple="">

<input type="file" class="form-control project_userfiles" name = "userfile[]" multiple="">
</form>

这就是我如何获取用于上传的数组 $files 我正在使用帮助程序。这样我就可以在我的控制器上调用它。

function uploadMultiple() {
    $uploadData = [];
    $ci = &get_instance(); // need this to resolve the app
    if(!empty($_FILES['userfile']['name'])) {
        $filesCount = count($_FILES['userfile']['name']);
        for($i = 0; $i < $filesCount; $i++) {
            $_FILES['userFile']['name'] = $_FILES['userfile']['name'][$i];
            $_FILES['userFile']['type'] = $_FILES['userfile']['type'][$i];
            $_FILES['userFile']['tmp_name'] = $_FILES['userfile']['tmp_name'][$i];
            $_FILES['userFile']['error'] = $_FILES['userfile']['error'][$i];
            $_FILES['userFile']['size'] = $_FILES['userfile']['size'][$i];
            $config['upload_path'] = './upload';
            $config['allowed_types'] = 'pdf|doc|txt|jpg|png';
            $ci->load->library('upload', $config);
            $ci->upload->initialize($config);
            if($ci->upload->do_upload('userFile')){
                     $fileData = $ci->upload->data();
                     $uploadData[$i]['original_name'] = $fileData['file_name'];
                     $uploadData[$i]['filename'] = $fileData['file_name'];
            } else {
                // do something with the errors...
                         $error = $ci->upload->display_errors();
            }
        }
    }
    return  $uploadData;
}

我有一个错误,undefined offset:1如果我只是为索引 [0]undefined offset:0上传,如果我只是为索引 [1] 上传,如果两个索引都有一个值,则没有错误,我仍然不知道如何在我的查询中执行它两个索引都有一个值。提前致谢。对不起,如果我的解释不是那么准确。

标签: javascriptphpajaxcodeigniter

解决方案


它得到未定义的索引,因为在您的上传功能上,如果您只上传单个文件,那么它只会产生单个上传数据,因此$files[0]or$files[1]数组将未定义,并且松散相等松散不相等条件将失败。
为了让你的逻辑工作,你可以使用empty检查:

if (!empty($files[0]) && empty($files[1])) {
    $this->db->select('id,picture_id');
    $this->db->from($this->project_tbl);
    $this->db->where('id', $id);
    $query = $this->db->get();
    if ($query->num_rows() > 0) {
        $this->db->where('id', $query->row()->picture_id);
        $this->db->update($this->project_core_documents, $files[0]);
    }
} else if (!empty($files[1]) && empty($files[0])) {
    $this->db->select('id,detailed_report_id');
    $this->db->from($this->project_tbl);
    $this->db->where('id', $id);
    $query = $this->db->get();
    if ($query->num_rows() > 0) {
        $this->db->where('id', $query->row()->detailed_report_id);
        $this->db->update($this->project_core_documents, $files[1]);
    }
} else {
    //both files
}

if即使其中一个$files具有未定义的索引,这也会执行该块。但是您应该注意,如果两者都不为空并且两者都为空,则该else语句将被执行$files$files


推荐阅读