如何在Codeigniter 3中多输入工作,在数据库文件上传只有一个,而不是很多文件?

yvgpqqbh  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(54)

请帮助我亲爱的,我想尝试启用其他标题和其他上传文件的多输入.是不是我做的控制器有问题,所以它循环其他标题和多个文件,只有一个上传到数据库?

这是我的代码视图

<!-- Modal -->
                        <div class="form-row">
                            <div class="form-group col-md-12">
                                <label for="otitle">Other</label>
                                <div class="form-row add-container">
                                    <div class="col-6">
                                        <input type="text" class="form-control" id="" name="other_title[]" placeholder="Input title" multiple>
                                    </div>
                                    <div class="col-5">
                                        <input class="form-control" type="file" name="other_file[]" id="" multiple>
                                    </div>
                                    <div class="col-auto">
                                        <a class="btn add-comp" style="border: 0; padding: 10px;"><i class="fa fa-plus" style="color: #006CF8;"></i></a>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
<!-- End Modal -->

这是我代码的Controller

public function actionBible($type, $id = null)
    {
        $id_kategori = $this->input->post('id_kategori');
        $id_kategori = $id_kategori == NULL ? $this->input->post('nama_kategori') : $id_kategori;

        $data = array(
            'nama_bible' => $this->input->post('nama_bible'),
            'description' => $this->input->post('description'),
            'datasheet_title' => $this->input->post('datasheet_title'),
            'manual_title' => $this->input->post('manual_title'),
            'id_kategori' => $id_kategori,
            'created_by' => $this->session->userdata('nama_user'),
        );

        $folderUpload = "./uploads/bible/";
        $files = $_FILES;

        // datasheet
        $namaFile = $files['file']['name'];
        $lokasiTmp = $files['file']['tmp_name'];
        // # kita tambahkan uniqid() agar nama gambar bersifat unik
        $namaBaru = uniqid() . '-' . $namaFile;
        $lokasiBaru = "{$folderUpload}/{$namaBaru}";
        move_uploaded_file($lokasiTmp, $lokasiBaru);
        // manual
        $namaFileManual = $files['manual_file']['name'];
        $lokasiTmpManual = $files['manual_file']['tmp_name'];
        // # kita tambahkan uniqid() agar nama gambar bersifat unik
        $namaBaruManual = uniqid() . '-' . $namaFileManual;
        $lokasiBaruManual = "{$folderUpload}/{$namaBaruManual}";
        move_uploaded_file($lokasiTmpManual, $lokasiBaruManual);

        // datasheet
        $ktp = array('file' => $namaBaru);
        if ($namaFile != NULL) {
            $data = array_merge($data, $ktp);
        }
        // manual
        $manual = array('manual' => $namaBaruManual);
        if ($namaFileManual != NULL) {
            $data = array_merge($data, $manual);
        }

        // var_dump($data);
        if ($type == 'add') {
            $store = $this->db->insert('tb_bible', $data);
            if ($store) {
                // attachments
                $getLastId = $this->db->order_by('id_bible', 'DESC')->limit(1)->get('tb_bible')->row_array();

                $files = $_FILES;
                $jumlahFile = count($files['other_file']['name']);
                $other_title = $this->input->post('other_title');
                for ($i = 0; $i < $jumlahFile; $i++) {
                    $data = array(
                        'id_bible' => $getLastId['id_bible'],
                        'id_other' => $this->input->post('id_other'),
                        'other_title' => $other_title[$i],
                        'created_at' => date('Y-m-d H:i:s')
                    );
                    $folderUpload = "./uploads/upnormal/";
                    $files = $_FILES;

                    $namaFileOther = $files['other_file']['name'][$i];
                    $lokasiTmpOther = $files['other_file']['tmp_name'][$i];
                    // # kita tambahkan uniqid() agar nama gambar bersifat unik
                    $namaBaruOther = uniqid() . '-' . $namaFileOther;
                    $lokasiBaruOther = "{$folderUpload}/{$namaBaruOther}";
                    move_uploaded_file($lokasiTmpOther, $lokasiBaruOther);

                    $other = array('other' => $namaBaruOther); // mengambil nama baru dan di upload ke dalam databases
                    if ($namaFileOther != NULL) {
                        $data = array_merge($data, $other);
                        $this->db->insert('tb_other_bible', $data);
                    }
                }
            }
        } elseif ($type == 'edit') {
            $this->db->update('tb_bible', $data, ['id_bible' => $this->input->post('id_bible')]);
        } else {
            $data = array(
                'delete' => 1
            );
            $this->db->update('tb_bible', $data, ['id_bible' => decrypt_url($id)]);
        }
        $this->session->set_flashdata('messageAlert', $this->messageAlert('success', "Data $type"));
        redirect('bible/guide');
    }
egmofgnx

egmofgnx1#

<input type="text"不支持multiple属性。参见MDN docs for multiple attribute
文件输入字段允许选择多个文件。但是文本输入字段不允许输入多个值。
因此,如果您希望允许用户为他们选择的每个文件输入标题,则需要更改设计,以便根据所选文件的数量更改文本输入的数量。这可以通过JavaScript来完成,JavaScript侦听文件输入元素上的更改事件。

相关问题