Codeigniter:无法上传文件,未定义索引:头像

Codeigniter: Cannot upload files, Undefined Index : avatar

我似乎无法在 codeigniter 中上传文件。我不知道问题是否在于 if ($_FILES['avatar']['name'] == "").

我的控制器

private function upload_avatar($file)
    {
        $newName = $file->getRandomName();
        $upload = $file->move(ROOTPATH . 'public/assets/avatar', $newName);
        if ($upload) {
            return $newName;
        } else {
            return false;
        }
    }

public function change_data()
    {
        helper(['form', 'url']);
        $userModel = new UserModel();

        if ($this->request->getMethod() == 'post') {
            if ($_FILES['avatar']['name'] == "")
             {
                $rules = [
                    'nama'      => 'required|alpha_space|min_length[2]',
                    'email'     => 'required|valid_email',
                    'nip'       => 'required|min_length[2]',
                    'tempat_lahir'      => 'required|alpha_space|min_length[2]'
                ];
            } else {
                $rules = [
                    'nama'      => 'required|alpha_space|min_length[2]',
                    'email'     => 'required|valid_email',
                    'nip'       => 'required|min_length[2]',
                    'tempat_lahir'      => 'required|alpha_space|min_length[2]',
                    'avatar'    => [
                        'uploaded[avatar]',
                        'mime_in[avatar,image/jpg,image/jpeg,image/png]',
                        'max_size[avatar,4096]'
                    ]
                ];
            }

            if ($this->validate($rules)) {
                if ($_FILES['avatar']['name'] == "") {
                    $params = [
                        'nama'          => $userModel->escapeString(esc($this->request->getPost('nama'))),
                        'email'         => $userModel->escapeString(esc($this->request->getPost('email'))),
                        'nip'           => $userModel->escapeString(esc($this->request->getPost('nip'))),
                        'tempat_lahir'  => $userModel->escapeString(esc($this->request->getPost('tempat_lahir'))),
                    ];
                } else {
                
                    //get data user by session email
                    $user = $userModel->where('email', session()->get('email'))
                        ->first();

                    if ($user) {
                        $deleteFile = unlink('./assets/avatar/' . $$user['avatar']);
                        if ($deleteFile) {
                            $file = $this->request->getFile('avatar');
                            $uploadFile = $this->upload_avatar($file);
                        }
                    }

                    $params = [
                        'nama'          => $userModel->escapeString(esc($this->request->getPost('nama'))),
                        'email'         => $userModel->escapeString(esc($this->request->getPost('email'))),
                        'nip'           => $userModel->escapeString(esc($this->request->getPost('nip'))),
                        'tempat_lahir'  => $userModel->escapeString(esc($this->request->getPost('tempat_lahir'))),
                        'avatar'        => $uploadFile,
                    ];
                }
                        $update = $userModel->update($user['id_user'], $params);

                if ($update) {
                    session()->setFlashdata('success', 'Berhasil Update Data. Apabila Tampilan Data Belum Berubah, Silakan Lakukan Logout dan Login Kembali');
                    return redirect()->route('profile');
                } else {
                    session()->setFlashdata('danger', 'Gagal Update Data');
                    return redirect()->route('edit')->withInput();
                }
            } else {
                $data['validation'] = $this->validator;
            }
        }

        $data['title'] = 'Edit Profile';
        return view('admin/users/ubah_data', $data);
    }

我的观点

<form action="<?= base_url('admin/user/change_data') ?>" method="POST">
              <?= csrf_field(); ?>

                <div class="form-group">
                    <label for="nama">Nama</label>
                    <input type="text" class="form-control" id="nama" name="nama" value="<?= session()->nama ?>">
               </div>

               <div class="form-group">
                    <label for="nip">NIP</label>
                    <input type="text" class="form-control" id="nip" name="nip" value="<?= session()->nip ?>">
               </div>

               <div class="form-group">
                    <label for="email">Email</label>
                    <input type="text" class="form-control" id="email" name="email" value="<?= session()->email ?>">
               </div>

               <div class="form-group">
                    <label for="tempat_lahir">Tempat Lahir</label>
                    <input type="text" class="form-control" id="tempat_lahir" name="tempat_lahir" value="<?= session()->tempat_lahir ?>">
               </div>

               <div class="form-group">
                    <label for="avatar">Foto <small>(Optional)</small></label>
                      <div class="custom-file">
                    <input type="file" class="custom-file-input" id="avatar" name="avatar">
                    <label class="custom-file-label" for="avatar">Choose file</label>
                  </div>
                </div>

                <div class="form-group">
                    <input type="submit" value="Update" class="btn btn-info" />
                </div>
            </form>

在我按下上传按钮后未定义索引:出现头像消息。 任何帮助将不胜感激。我似乎无法弄清楚为什么 ($_FILES['avatar']['name'] == "") 有问题

我想你没有在表单标签中包含 enctype="multipart/form-data"

<form action="url-action" method="POST" enctype="multipart/form-data">
   your form
</form>