javascript - Codeigniter上传带有数组字段名称的图像文件

标签 javascript php jquery arrays codeigniter

我对 codeigniter 库和函数还很陌生。最近,我有一个表单,其中有一些动态输入字段需要提交并插入数据库以进行记录。

如果用户单击“+”按钮,则动态创建图像上传文件字段,并且我使用数组名称作为输入字段的名称。但是,当我尝试调用 Controller 上传文件或插入数组字段名称时,它不断提示我“您没有选择要上传的文件”。

如果我将图像字段的输入名称更改为仅“reg_photo”,并将上传字段名称更改为“reg_photo”,那么一切正常,但这不是我想要的,因为我想根据动态输入数组上传它。

我确实尝试在 stackoverflow 和 google 上查看解决方案,但在我尝试之后,没有一个可以帮助我。

这是我用于上传的 Controller :

 //Upload Picture Configuration
        $config['upload_path']          = './uploads/profile_picture/';
        $config['allowed_types']        = 'gif|jpg|png';
        $config['max_size']             = 2048;
        $config['max_width']            = 1920;
        $config['max_height']           = 1080;
        $this->load->library('upload', $config);

        //Check and get the Areas list
        $areaList = $this->input->post('areas', true);
        $finalSeparator = $areaList;
        $resultArea = "";
        foreach ($finalSeparator as $i => $a) {
            if (next($finalSeparator )) {
                $resultArea .= $a.','; // Add comma for all elements instead of last
            }
            else
            {
                $resultArea .= $a;
            }
        }


        if ($this->input->post('reg_name')) { // returns false if no property

            //Get Last Inserted District ID
            $district = "";
            $failedUploadNameList = "";
            $photoPath = "";
            $data = array(
                'district_code' => $this->input->post('reg_district_2', true),
                'district_country' => '',
            );
            $this->db->set('district_registered_date', 'NOW()', FALSE); //Submit current date time
            if($this->Registerlanguage_admin_model->register_district($data))
            {
                $district = $this->db->insert_id(); //Last Get ID

                $name = $this->input->post('reg_name', true);
                $year1 = $this->input->post('reg_year1', true);
                $year2 = $this->input->post('reg_year2', true);
                $nickname = $this->input->post('reg_nickname', true);
                $photo = $this->input->post('reg_photo', true);

                foreach ($name as $i => $a) { // need index to match other properties

                    //Check to whether can upload image or not
                    if ( ! $this->upload->do_upload($photo[$i]))
                    {
                        $error = array('error' => $this->upload->display_errors());
                        foreach($error as $q)
                        {
                            $failedUploadNameList .= $q;
                        }
                    }
                    else
                    {
                        $data = array('upload_data' => $this->upload->data('file_name'));

                        foreach($data as $a)
                        {
                            $photoPath = $config['upload_path'].$a;
                        }
                    }
                    $data = array(
                        'area_district_id' => $district,
                        'area_name' => $resultArea,
                        'area_language' =>  $this->input->post('reg_language', true),
                        'area_year_1' => isset($year1[$i]) ? $year1[$i] : '',
                        'area_year_2' => isset($year2[$i]) ? $year2[$i] : '',
                        'area_leader_name' => isset($name[$i]) ? $name[$i] : '',
                        'area_leader_nickname' => isset($nickname[$i]) ? $nickname[$i] : '',
                        'area_leader_photo' => $photoPath
                    );
                    $this->db->set('area_registered_date', 'NOW()', FALSE); //Submit current date time
                    if (!$this->Registerlanguage_admin_model->register_area($data)) {
                        // quit if insert fails - adjust accordingly
                        $this->session->set_flashdata('msg','<div class="alert alert-danger text-center">Oops! Error.  Please try again later!!!</div>');
                        redirect('index.php/language_admin/index');
                    }
                }
            }
            else{
                // don't redirect inside the loop
                $this->session->set_flashdata('msg','<div class="alert alert-danger text-center">Oops! Error.  Please try again later!!!</div>');
                redirect('index.php/language_admin/index');
            }

            //Redirect back once all successfully insert
            $this->session->set_flashdata('msg','<div class="alert alert-success text-center">You are Insert Successfully!</div>'.$failedUploadNameList);
            redirect('index.php/language_admin/index');
        }
        else{

            // don't redirect inside the loop
            $this->session->set_flashdata('msg','<div class="alert alert-danger text-center">Oops! Error.  Please try again later!!!</div>');
            redirect('index.php/language_admin/index');
        }

这是我的 View 代码:

 <?php $attributes = array("name" => "registerdistrictform");
                            echo form_open_multipart("index.php/registerlanguage_admin/registerDistrict", $attributes);?>
                            <div class="panel panel-default">
                                <div class="panel panel-info">
                                    <div class="panel-body  panel-group">
                                        <div class="form-group">
                                            <input class="form-control" name="reg_language" type="hidden" value="Japanese" />
                                            <label for="concept" class="col-sm-3 control-label">District :</label>
                                            <div class="col-sm-9">
                                                <input class="form-control" name="reg_district_1" placeholder="Ex : District 3500" type="text" value="<?php echo set_value('reg_district_1'); ?>" required/>
                                                <span class="text-danger"><?php echo form_error('reg_district_1'); ?></span><br/>
                                                <input class="form-control" name="reg_district_2" placeholder="Ex : 3500" type="text" value="<?php echo set_value('reg_district_2'); ?>" required/>
                                                <span class="text-danger"><?php echo form_error('reg_district_2'); ?></span><br/>
                                            </div>
                                        </div>
                                        <div class="form-group">
                                            <label for="concept" class="col-sm-3 control-label">Area :</label>
                                            <div id="areaContainer">
                                                <div class="col-sm-6">
                                                    Area Record #0<input class="form-control" name="areas[]" placeholder="Your Language" type="text" value="" required/>
                                                </div>
                                                <div class="col-sm-3">
                                                    <a href="#" class="btn btn-primary" id="addArea">+</a><br/>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                <div id = "profileContainer">
                                    <div class="panel panel-danger">
                                        <div class="panel-heading">Profile #0</div>
                                        <div class="panel-body  panel-group">
                                            <div class="form-group">
                                                <label for="concept" class="col-sm-3 control-label">Years :</label>
                                                <div class="col-sm-4">
                                                    <input class="form-control" name="reg_year1[]" placeholder="2015" type="text" value="" required/>
                                                </div>
                                                <div class="col-sm-1">
                                                    <i class="fa fa-arrow-right" aria-hidden="true" ></i>
                                                </div>
                                                <div class="col-sm-4">
                                                    <input class="form-control" name="reg_year2[]" placeholder="2017" type="text" value="" required/><br/>
                                                </div>
                                            </div>
                                            <div class="form-group">
                                                <label for="concept" class="col-sm-12 control-label"><u>District Governer</u></label><br/>
                                                <label for="concept" class="col-sm-3 control-label">Name :</label>
                                                <div class="col-sm-9">
                                                    <input class="form-control" name="reg_name[]" placeholder="Your Language" type="text" required/><br/>
                                                </div>
                                                <label for="concept" class="col-sm-3 control-label">Nickname :</label>
                                                <div class="col-sm-9">
                                                    <input class="form-control" name="reg_nickname[]" placeholder="English" type="text" required/><br/>
                                                </div>
                                                <label for="concept" class="col-sm-3 control-label">Photo :</label>
                                                <div class="col-sm-9">
                                                    <input class="form-control" name="reg_photo[]" type="file" required/><br/>
                                                </div>
                                            </div>
                                            <div class="pull-right">
                                                <a href="#" class="btn btn-primary" id="addProfile">+</a>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                <div class="panel-body  panel-group">
                                    <div class="form-group">
                                        <div class="col-sm-1 text-left">
                                            <button name="submit" type="submit" class="btn btn-info btn-lg" >Submit</button>
                                            <!--                <button name="cancel" type="reset" class="btn btn-info">Cancel</button>-->
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <?php echo form_close(); ?>
                        </div>

如果用户按“+”按钮,“reg_photo[]”会动态插入到 HTML 中,因此,如果我更改为不再动态的“reg_photo”,那么它就可以工作,如果我想使用'reg_photo[]' 作为字段名称来上传我的文件?请引导我完成这个过程。感谢! :)

最佳答案

/*
* Code above omitted purposely
* In your HTML form, your input[type=file] must be named *upl_files[]*
*/
/*
* Uploads multiple files creating a queue to fake multiple upload calls to
* $_FILE
*/
public function multiple_upload()
{
    $this->load->library('upload');
    $number_of_files_uploaded = count($_FILES['upl_files']['name']);
    // Faking upload calls to $_FILE
    for ($i = 0; $i < $number_of_files_uploaded; $i++){
        $_FILES['userfile']['name']     = $_FILES['upl_files']['name'][$i];
        $_FILES['userfile']['type']     = $_FILES['upl_files']['type'][$i];
        $_FILES['userfile']['tmp_name'] = $_FILES['upl_files']['tmp_name'][$i];
        $_FILES['userfile']['error']    = $_FILES['upl_files']['error'][$i];
        $_FILES['userfile']['size']     = $_FILES['upl_files']['size'][$i];
        $config = array(
            'file_name'     => <your ouw function to generate random names>,
            'allowed_types' => 'jpg|jpeg|png|gif',
            'max_size'      => 3000,
            'overwrite'     => FALSE,

            /* real path to upload folder ALWAYS */
            'upload_path'
            => $_SERVER['DOCUMENT_ROOT'] . '/path/to/upload/folder'
        );
        $this->upload->initialize($config);
        if ( ! $this->upload->do_upload()) {
            $error = array('error' => $this->upload->display_errors());
            $this->load->view('upload_form', $error);
        }else {
            $final_files_data[] = $this->upload->data();
            // Continue processing the uploaded data
        }
    }
}

这对我有用。请参阅此页面,这不是我的代码 https://gist.github.com/zitoloco/1558423

关于javascript - Codeigniter上传带有数组字段名称的图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44449615/

相关文章:

javascript - 转义 jQuery 选择器

javascript - HammerJS pan 在 Firefox 中的孙元素失败

php - 银条 3 : How to group a sorted array by grandparent pages

php - Laravel 5.6 中嵌套关系的展平结果

javascript - 在 Javascript 中使用 CSS3 的淡入动画

javascript - 查找特定时间内两个值之间的值

javascript - 如何将这个基本的 html(CSS、JavaScript)模板包含到一个 php 文件中?

IE9+ 中带填充的 jQuery UI .addClass() 动画

javascript - handlebars.js 不在 IE9 中渲染模板

javascript - 如何获得滚动条缩略图的正确位置?