【问题标题】:uploading image not working in codeigniter 3上传图片在codeigniter 3中不起作用
【发布时间】:2021-06-17 04:44:59
【问题描述】:

我是新学习 codeigniter 3,我遇到的问题是我无法在编辑方法中上传图像。我真的被困住了,我已经从互联网和文档中弄清楚了,但是没有答案,我的代码仍然无法正常工作,当单击提交按钮时,方法是成功更新到数据库但没有图像,这是我的代码

我的控制器

public function edit()
    {
        $data['title'] = 'Edit Profile';
        $data['user'] = $this->db->get_where('user', ['email' => $this->session->userdata('email')])->row_array(); //get username

        $this->form_validation->set_rules('name', 'Full Name', 'required|trim');

        if ($this->form_validation->run() == false) {

            $this->load->view('templates/header', $data);
            $this->load->view('templates/sidebar', $data);
            $this->load->view('templates/topbar', $data);
            $this->load->view('user/edit', $data);
            $this->load->view('templates/footer');
        } else {

            $name = $this->input->post('name');
            $email = $this->input->post('email');

            //cek jika ada gambar yg akan diupload
            $upload_image = $_FILES['image']['name'];

            if ($upload_image) {
                $config['allowed_types'] = 'gif|jpg|png';
                $config['max_size']     = '2048';
                $config['upload_path'] = './assets/img/profile/';

                $this->load->library('upload', $config);

                if ($this->upload->do_upload('image')) {
                    $new_image = $this->upload->data('file_name');
                    $this->db->set('image', $new_image);
                } else {
                    echo $this->upload->display_errors();
                }
            }


            $this->db->set('name', $name);
            $this->db->where('email', $email);
            $this->db->update('user');

            $this->session->set_flashdata('message', '<div class="alert alert-success" role="alert">Your profile has been updated</div>');
            redirect('user');
        }
    }

我的观点

            <?php echo form_open_multipart('user/edit'); ?>

            <div class="form-group row">
                <label for="email" class="col-sm-2 col-form-label col-form-label-sm">Email</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control form-control-sm" id="email" name="email" value="<?php echo $user['email']; ?>" readonly>
                </div>
            </div>
            <div class="form-group row">
                <label for="name" class="col-sm-2 col-form-label col-form-label-sm">Full Name</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control form-control-sm" id="name" name="name" value="<?php echo $user['name']; ?>">
                    <?php echo form_error('name', '<small class="text-danger pl-3">', '</small>'); ?>
                </div>
            </div>
            <div class="form-group row">
                <div class="col-sm-2">Picture</div>
                <div class="col-sm-10">
                    <div class="row">
                        <div class="col-sm-3">
                            <img src="<?php echo base_url('assets/img/profile/') . $user['image']; ?>" class="img-thumbnail">
                        </div>
                        <div class="col-sm-9">
                            <div class="custom-file">
                                <input type="file" class="custom-file-input" id="customFile">
                                <label class="custom-file-label" for="customFile">Choose file</label>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="form-group row justify-content-end">

                <div class="col-sm-10">
                    <button type="submit" class="btn btn-primary">Save</button>
                </div>
            </div>

【问题讨论】:

    标签: javascript php jquery codeigniter


    【解决方案1】:

    你需要像这样改变你的代码

    在您的文件input 标记中使用name 属性更改视图

    &lt;input type="file" class="custom-file-input" id="customFile"&gt;&lt;input type="file" name="userfile" class="custom-file-input" id="customFile"&gt;

    最后使用&lt;/form&gt;标签。

    <?php echo form_open_multipart('user/edit'); ?>
        <div class="form-group row">
            <label for="email" class="col-sm-2 col-form-label col-form-label-sm">Email</label>
            <div class="col-sm-10">
                <input type="text" class="form-control form-control-sm" id="email" name="email" value="<?php echo $user['email']; ?>" readonly>
            </div>
        </div>
        <div class="form-group row">
            <label for="name" class="col-sm-2 col-form-label col-form-label-sm">Full Name</label>
            <div class="col-sm-10">
                <input type="text" class="form-control form-control-sm" id="name" name="name" value="<?php echo $user['name']; ?>">
                <?php echo form_error('name', '<small class="text-danger pl-3">', '</small>'); ?>
            </div>
        </div>
        <div class="form-group row">
            <div class="col-sm-2">Picture</div>
            <div class="col-sm-10">
                <div class="row">
                    <div class="col-sm-3">
                        <img src="<?php echo base_url('assets/img/profile/') . $user['image']; ?>" class="img-thumbnail">
                    </div>
                    <div class="col-sm-9">
                        <div class="custom-file">
                            <input type="file" name="userfile" class="custom-file-input" id="customFile">
                            <label class="custom-file-label" for="customFile">Choose file</label>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    
        <div class="form-group row justify-content-end">
    
            <div class="col-sm-10">
                <button type="submit" class="btn btn-primary">Save</button>
            </div>
        </div>
    </form>
    

    你的控制器会随着下面的变化..

    public function edit() {
        $data['title'] = 'Edit Profile';
        $data['user'] = $this->db->get_where('user', ['email' => $this->session->userdata('email')])->row_array(); //get username
    
        $this->form_validation->set_rules('name', 'Full Name', 'required|trim');
    
        if ($this->form_validation->run() == false) {
           $this->load->view('templates/header', $data);
           $this->load->view('templates/sidebar', $data);
           $this->load->view('templates/topbar', $data);
           $this->load->view('user/edit', $data);
           $this->load->view('templates/footer');
        } else {
           $name = $this->input->post('name');
           $email = $this->input->post('email');
    
           $config['allowed_types'] = 'gif|jpg|png';
           $config['max_size']     = '2048';
           $config['upload_path'] = './assets/img/profile/';
           
           $this->load->library('upload', $config);
    
           if (!$this->upload->do_upload('userfile')) {
               echo $this->upload->display_errors();
            } else {
               $new_image = $this->upload->data('file_name');
               
               $this->db->set('image', $new_image);
               $this->db->set('name', $name);
               $this->db->where('email', $email);
               $this->db->update('user');
    
               $this->session->set_flashdata('message', '<div class="alert alert-success" role="alert">Your profile has been updated</div>');
               
               redirect('user');
            }
        }
    }
    

    【讨论】:

    • 谢谢,现在解决了。似乎在我的视图文件中,我忘记在输入标签中添加名称属性,并在最后添加
    【解决方案2】:

    我不熟悉 codeigniter,所以可能其中一些发生在你的方法调用中,但我认为你的主要问题与 $upload_image = $_FILES['image']['name']; 有关,它只包含文件名,没有实际数据。

    1. ['image'] 部分表示文件是由名为 'image' 的元素发布的,因此在您的 html 中,您需要使用 name="image" 命名文件输入。
    2. 上传文件的实际数据以文件的形式存储在 php 的 tmp 文件夹中,具有随机名称,因此要访问它,您需要使用 $_FILES['image']['tmp_name'] 并将其移动到您想要的位置(大概是 ./assets/img/profile/move_upload_file() 在它实际上被视为“上传”到您的服务器之前。见herehere
    3. 文件上传需要严格验证以防止恶意上传,因此请验证用户提供的名称字符串$_FILES['images']['name'] 和文件数据本身。

    【讨论】:

      猜你喜欢
      • 2015-06-26
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      相关资源
      最近更新 更多