首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上传个人资料照片在codeigniter 3中不起作用

上传个人资料照片在codeigniter 3中不起作用
EN

Stack Overflow用户
提问于 2020-10-06 10:30:08
回答 3查看 64关注 0票数 0

我想让我的用户更新他们的个人资料和头像。如果我在视图中注释头像部分,并在控制器中删除。编辑进行得很好,但是如果我把上传部分放到控制器中,编辑功能就不起作用了。顺便说一下,我在codeigniter方面还是个新手。你能帮我找出我的错误吗?谢谢

代码语言:javascript
复制
      my controller                               
      public function edit($id){                                
                                                          
        $this->load->model('User_model');       
        $user = $this->User_model->getUser($id);
        $data = array();
        $data['user'] = $user;
        $data1['user'] = $this->db->get_where('user', ['email' =>
        $this->session->userdata('email')])->row_array(); 
        $this->form_validation->set_rules('name', 'Name', 'required|trim');
        $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
        $this->form_validation->set_rules('password1', 'Password', 'required|trim|min_length[8]|matches[password2]', [
            'matches' => 'password not match!',
            'min_length' => 'password too short'
        ]);

        $this->form_validation->set_rules('password2', 'Password', 'required|trim|matches[password1]');

        if ($this->form_validation->run() == false) {
            $this->load->view('templates/admin/header', $data, $data1);
            $this->load->view('templates/admin/sidebar', $data, $data1);
            $this->load->view('templates/admin/topbar', $data1);
            $this->load->view('admin/updateprofile', $data, $data1);
            $this->load->view('templates/admin/footer', $data, $data1);
        } else {

            $upload_image = $_FILES['image']['name'];

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

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

                if ($this->upload->do_upload('image')) {

                    $old_image = $data['user']['image'];
                    if ($old_image != 'default.jpg') {
                        unlink(FCPATH . 'assets/img/profile/' . $old_image);
                    }

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

            $data = array(
                'name' => htmlspecialchars($this->input->post('name', true)),
                'password' => password_hash($this->input->post('password1'), PASSWORD_DEFAULT),
            );
            $this->User_model->updateUser($id, $data);
            $this->session->set_flashdata('message', '<div class="alert alert-success" role="alert">
            User update successfully!
          </div>');
            redirect('adminprofile');
        }
    }
}
代码语言:javascript
复制
my model
代码语言:javascript
复制
    function getUser($id)
    {
        $this->db->where('id', $id);
        return $user = $this->db->get('user')->row_array();
    }


    function updateUser($id, $data)
    {
        $this->db->where('id', $id);
        $this->db->update('user', $data);
    }

我的观点

代码语言:javascript
复制
<div class="container-fluid">
    <h1 class="h3 mb-4 text-gray-800">Edit Profile</h1>

    <div class="row">
        <div class="col-lg-8">

            <form class="user" method="post" action="<?php echo base_url() . 'AdminUpdateProfile/edit/' . $user['id']; ?>">
                <div class="form-group row">
                    <label for="name" class="col-sm-2 col-form-label">Nama</label>
                    <div class="col-sm-10">
                        <input type="name" class="form-control" id="name" name="name" value="<?= set_value('name', $user['name']); ?>">
                    </div>
                </div>
                <div class="form-group row">
                    <label for="email" class="col-sm-2 col-form-label">Emel</label>
                    <div class="col-sm-10">
                        <input type="email" class="form-control" id="email" name="email" value="<?= set_value('email', $user['email']); ?>" readonly>
                    </div>
                </div>
                <div class="form-group row">
                    <label for="email" class="col-sm-2 col-form-label">Kata Laluan</label>
                    <div class="col-sm-10">
                        <input type="password" class="form-control" id="password1" name="password1" placeholder="8 aksara">
                        <?= form_error('email', '<small class="text-danger pl-3">', '</small>'); ?>
                    </div>
                </div>
                <div class="form-group row">
                    <label for="email" class="col-sm-2 col-form-label">Ulang Kata Laluan</label>
                    <div class="col-sm-10">
                        <input type="password" class="form-control" id="password2" name="password2" placeholder="Masukkan semula">
                        <?= form_error('email', '<small class="text-danger pl-3">', '</small>'); ?>
                    </div>
                </div>
                <div class="form-group row">
                    <div class="col-sm-2">Gambar Profil</div>
                    <div class="col-sm-10">
                        <div class="row">
                            <div class="col-sm-3">
                                <img src="<?= 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="image" name="image">
                                    <label class="custom-file-label" for="image">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">Edit</button>
                    </div>
                </div>



            </form>


        </div>
    </div>

</div>


<!--<div class="container">

    <div class="card o-hidden border-0 shadow-lg my-5 col-lg-7 mx-auto">
        <div class="card-body p-0">
            <div class="row">
                <div class="col-lg">
                    <div class="p-5">
                        <div class="text-center">
                            <img src="<//?= base_url('assets/img/profile/') . $user['image']; ?>">
                        </div>

                        <hr>

                        <?= $this->session->set_flashdata('message'); ?>

                        <form class="user" method="post" action="<?php echo base_url() . 'AdminUpdateProfile/edit/' . $user['id']; ?>">
                            <div class="form-group row">
                                <input type="text" class="form-control" id="name" name="name" value="<?= set_value('name', $user['name']); ?>">
                                //<?= form_error('name', '<small class="text-danger pl-3">', '</small>'); ?>
                            </div>

                            <div class=" form-group row">
                                <input type="text" class="form-control" id="email" name="email" value="<?= set_value('email', $user['email']); ?>" readonly>
                                <?= form_error('email', '<small class="text-danger pl-3">', '</small>'); ?>
                            </div>

                            <div class="form-group row">
                                <input type="password" class="form-control" id="password1" name="password1" placeholder="Password">
                                <?= form_error('password1', '<small class="text-danger pl-3">', '</small>'); ?>
                            </div>

                            <div class="form-group row">
                                <input type="password" class="form-control" id="password2" name="password2" placeholder="Repeat Password">
                            </div>

                            <button type="submit" class="btn btn-primary btn-user btn-block">
                                Update
                            </button>
                            <a href="<?php echo base_url() . 'AdminProfile'; ?>" class="btn btn-secondary btn-user btn-block">Cancel</a>
                    </div>
                    </form>
                </div>
            </div>
        </div>
    </div> -->
EN

回答 3

Stack Overflow用户

发布于 2020-10-06 19:19:56

首先,您必须在form标记中使用此after action属性:

代码语言:javascript
复制
enctype='multipart/form-data'
票数 0
EN

Stack Overflow用户

发布于 2020-10-07 08:59:43

您需要像Aman所说的那样指定enctype

代码语言:javascript
复制
<form class="user" method="post" action="<?= base_url('AdminUpdateProfile/edit/'.$user['id']); ?>" enctype="multipart/form-data">

     your code here

</form>
票数 0
EN

Stack Overflow用户

发布于 2020-10-07 09:09:07

正如上面的两个答案所提到的,首先您需要在表单中添加加密类型。因此,最终结果将是:

代码语言:javascript
复制
<form method="post" enctype="multipart/form-data" class="user" action="<?php echo base_url() . 'AdminUpdateProfile/edit/' . $user['id']; ?>">

如果这仍然不起作用,在我的例子中,我不得不将$_FILES索引转换为$_FILES['userfile'],因为上传库有一个问题,它对非用户文件的索引有问题。我基本上是这样做的:

代码语言:javascript
复制
$this->load->library('upload');
$config['upload_path'] = 'images/';
$config['file_ext_tolower'] = TRUE;
$config['allowed_types'] = '*';
$this->upload->initialize($config);

$_FILES['userfile']['name'] = $_FILES['image']['name'];
$_FILES['userfile']['type'] = $_FILES['image']['type'];
$_FILES['userfile']['tmp_name'] = $_FILES['image']['tmp_name'];
$_FILES['userfile']['error'] = $_FILES['image']['error'];
$_FILES['userfile']['size'] = $_FILES['image']['size'];

$this->upload->do_upload();
$data = $this->upload->data();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64218550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档