Cara Update Profile Sesuai Data Login di CodeIgniter

Cara Update Profile Sesuai Data Login di CodeIgniter

Diperbaharui 3 Agustus 2020 11:57 AM

Setelah register dan login, kali ini kita akan belajar bagaimana cara update profile sesuai data yang login di codeigniter, dimana data yang diupdate adalah identitas (nama depan, nama belakang, photo) dan password.

1. Download project awal codeigniter yang sudah ada fitur register dan login (kamu bisa membaca terlebih dahulu tutorial register dan login) → ganti nama menjadi ci-susantokun → buka di text editor

2. Buat database dengan nama susantokun_ci dan masukkan sql berikut :

3. Buka application/controllers/Auth.php dan tambahkan code berikut :

public function profile()
{
    $data = konfigurasi('Profile', 'Kelola Profile');
    $this->template->load('layouts/template', 'authentication/profile', $data);
}

public function updateProfile()
{
    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]|max_length[15]');
    $this->form_validation->set_rules('first_name', 'Nama Depan', 'trim|required|min_length[2]|max_length[15]');
    $this->form_validation->set_rules('last_name', 'Nama Belakang', 'trim|required|min_length[2]|max_length[15]');
    $this->form_validation->set_rules('email', 'Email', 'trim|required|min_length[8]|max_length[50]');
    $this->form_validation->set_rules('phone', 'Telp', 'trim|required|min_length[11]|max_length[12]');

    $id = $this->session->userdata('id');
    $data = array(
        'username' => $this->input->post('username'),
        'first_name' => $this->input->post('first_name'),
        'last_name' => $this->input->post('last_name'),
        'email' => $this->input->post('email'),
        'phone' => $this->input->post('phone'),
    );
    if ($this->form_validation->run() == true) {
        if (!empty($_FILES['photo']['name'])) {
            $upload = $this->_do_upload();

            //delete file
            $user = $this->Auth_model->get_by_id($this->session->userdata('id'));
            if (file_exists('assets/uploads/images/foto_profil/'.$user->photo) && $user->photo) {
                unlink('assets/uploads/images/foto_profil/'.$user->photo);
            }

            $data['photo'] = $upload;
        }
        $result = $this->Auth_model->update($data, $id);
        if ($result > 0) {
            $this->updateProfil();
            $this->session->set_flashdata('msg', show_succ_msg('Data Profil Berhasil diubah'));
            redirect('auth/profile');
        } else {
            $this->session->set_flashdata('msg', show_err_msg('Data Profile Gagal diubah'));
            redirect('auth/profile');
        }
    } else {
        $this->session->set_flashdata('msg', show_err_msg(validation_errors()));
        redirect('auth/profile');
    }
}

public function updatePassword()
{
    $this->form_validation->set_rules('passLama', 'Password Lama', 'trim|required|min_length[5]|max_length[25]');
    $this->form_validation->set_rules('passBaru', 'Password Baru', 'trim|required|min_length[5]|max_length[25]');
    $this->form_validation->set_rules('passKonf', 'Password Konfirmasi', 'trim|required|min_length[5]|max_length[25]');

    $id = $this->session->userdata('id');
    if ($this->form_validation->run() == true) {
        if (password_verify($this->input->post('passLama'), $this->session->userdata('password'))) {
            if ($this->input->post('passBaru') != $this->input->post('passKonf')) {
                $this->session->set_flashdata('msg', show_err_msg('Password Baru dan Konfirmasi Password harus sama'));
                redirect('auth/profile');
            } else {
                $data = ['password' => get_hash($this->input->post('passBaru'))];
                $result = $this->Auth_model->update($data, $id);
                if ($result > 0) {
                    $this->updateProfil();
                    $this->session->set_flashdata('msg', show_succ_msg('Password Berhasil diubah'));
                    redirect('auth/profile');
                } else {
                    $this->session->set_flashdata('msg', show_err_msg('Password Gagal diubah'));
                    redirect('auth/profile');
                }
            }
        } else {
            $this->session->set_flashdata('msg', show_err_msg('Password Salah'));
            redirect('auth/profile');
        }
    } else {
        $this->session->set_flashdata('msg', show_err_msg(validation_errors()));
        redirect('auth/profile');
    }
}

private function _do_upload()
{
    $config['upload_path']          = 'assets/uploads/images/foto_profil/';
    $config['allowed_types']        = 'gif|jpg|png';
    $config['max_size']             = 100; //set max size allowed in Kilobyte
    $config['max_width']            = 1000; // set max width image allowed
    $config['max_height']           = 1000; // set max height allowed
    $config['file_name']            = round(microtime(true) * 1000);
    $this->load->library('upload', $config);

    if (!$this->upload->do_upload('photo')) {
        $this->session->set_flashdata('msg', $this->upload->display_errors('', ''));
        redirect('auth/profile');
    }
    return $this->upload->data('file_name');
}

4. Buka application/models/Auth_model.php dan tambahkan code berikut :

Keterangan :

Pada function get_by_id dimana id nya di ambil dari si session yang ada pada controller dan query nya adalah menggabungkan data dari tbl_user dengan tbl_role dimanaz id dari tbl_role sama dengan id_role yang ada di tbl_user dengan cara di join sehinggal data dari tbl_role bisa diambil berdasarkan id user.

public function update($data, $id)
{
    $this->db->where($this->id, $id);
    $this->db->update($this->table, $data);
    return $this->db->affected_rows();
}

public function get_by_id()
{
    $id = $this->session->userdata('id');
    $this->db->select('
        tbl_user.*, tbl_role.id AS id_role, tbl_role.name, tbl_role.description,
    ');
    $this->db->join('tbl_role', 'tbl_user.id_role = tbl_role.id');
    $this->db->from($this->table);
    $this->db->where($this->id, $id);
    $query = $this->db->get();

    return $query->row();
}

5. Buka application/core/MY_Controller.php dan tambahkan code berikut :

public function updateProfil()
{
    if ($this->userdata != '') {
        $data = $this->Auth_model->select($this->userdata->id);

        $this->session->set_userdata('userdata', $data);
        $this->userdata = $this->session->userdata('userdata');
    }
}

6. Seperti biasa untuk views saya sertakan link downloadnya di bawah, download views-ci-susantokun kemudian pindahkan ke views dan replace saja.

7. Sekarang buka http://ci-susantokun.test/ maka hasilnya akan seperti gambar berikut :

Tutorial Update Profile AdminLTE CodeIgniter

Itulah tutorial cara update profile sesuai data yang login, semoga bermanfaat. Full source code nya bisa diunduh pada link ci-susantokun di atas.

Baca Juga :

01 : Cara Membuat Form Pendaftaran di CodeIgniter
02 : Cara Membuat Multi Login di CodeIgniter
03 : Cara Update Profile Sesuai Data Login di CodeIgniter
04 : Cara Membuat Last Login di CodeIgniter

susantokun avatar
susantokun
Lahir di Bumi ini atas perjuangan Ayah dan Ibu yang senantiasa membuat dan mengeluarkan sehingga lahirlah Susanto pada tanggal 27 Maret 1996 di Cianjur - Jawa Barat.
Kebijakan Berkomentar :
  • Dilarang berkomentar yang mengandung SPAM, SARA, HOAX, PORNO.
  • Mohon sertakan informasi detail saat terjadi error (pesan error, sreenshoot, code, logs, dsb.).
Silakan baca terlebih dahulu kebijakan berkomentar sebelum berkomentar.
KOMENTAR TERBARU