Cara menggunakan laravel htmlentities

Ini adalah tampilan awal untuk halaman setting profile. Ada beberapa link di halaman ini yang belum kita buat.

Show
  • Link Remove Avatar;
  • Change Avatar;
  • Edit Profile;
  • dan Edit Password.

View untuk link-link ini akan kita kerjakan nanti setelah membuat Model dan Controller.

Karena itu, mari kita lanjut..

2. Mengubah Controller Setting

Ubahlah Controller

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		// load edit profile form
	}

	public function edit_password()
	{
		// load edit password form
	}
}
1 menjadi seperti ini:

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		// load edit profile form
	}

	public function edit_password()
	{
		// load edit password form
	}
}

Pada Controller ini kita membuat beberapa method untuk menghandle link-link yang ada di halaman setting profile.

Method-method ini masih kosong dan belum kita isi dengan kode.

Kita akan lanjut kerjakan nanti setelah membuat model.

Oke, sekarang silahkan lanjutkan..

3. Membuat Model Profile

Model

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		// load edit profile form
	}

	public function edit_password()
	{
		// load edit password form
	}
}
2 kita butuhkan untuk melakukan update profile user.

Buatlah file baru di dalam folder

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		// load edit profile form
	}

	public function edit_password()
	{
		// load edit password form
	}
}
3 dengan nama
<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		// load edit profile form
	}

	public function edit_password()
	{
		// load edit password form
	}
}
4 dengan isi sebagai berikut:

<?php

class Profile_model extends CI_Model
{
	private $_table = "user";

	public function profile_rules()
	{
		return [
			[
				'field' => 'name',
				'label' => 'Name',
				'rules' => 'required|max_length[32]'
			],
			[
				'field' => 'email',
				'label' => 'Email',
				'rules' => 'required|max_length[32]'
			],
		];
	}

	public function password_rules()
	{
		return [
			[
				'field' => 'password',
				'label' => 'New Password',
				'rules' => 'required'
			],
			[
				'field' => 'password_confirm',
				'label' => 'Password Confirmation',
				'rules' => 'required|matches[password]'
			],
		];
	}

	public function update($data)
	{
		if (!$data['id']) {
			return;
		}
		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
	}
}

Pada model ini, kita membuat dua rules yakni

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		// load edit profile form
	}

	public function edit_password()
	{
		// load edit password form
	}
}
5 dan
<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		// load edit profile form
	}

	public function edit_password()
	{
		// load edit password form
	}
}
6.

Kedua rules ini akan kita pakai untuk validasi form edit profile dan edit password.

Nah untuk edit data, kita akan panggil method

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		// load edit profile form
	}

	public function edit_password()
	{
		// load edit password form
	}
}
7 dengan memberikan parameter
<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		// load edit profile form
	}

	public function edit_password()
	{
		// load edit password form
	}
}
8 baru.

Oke, sekarang lanjut membuat Controller.

4. Mengubah Controller Setting

Buka kembali Controller

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		// load edit profile form
	}

	public function edit_password()
	{
		// load edit password form
	}
}
1 kemudian ubah method
<?php

class Profile_model extends CI_Model
{
	private $_table = "user";

	public function profile_rules()
	{
		return [
			[
				'field' => 'name',
				'label' => 'Name',
				'rules' => 'required|max_length[32]'
			],
			[
				'field' => 'email',
				'label' => 'Email',
				'rules' => 'required|max_length[32]'
			],
		];
	}

	public function password_rules()
	{
		return [
			[
				'field' => 'password',
				'label' => 'New Password',
				'rules' => 'required'
			],
			[
				'field' => 'password_confirm',
				'label' => 'Password Confirmation',
				'rules' => 'required|matches[password]'
			],
		];
	}

	public function update($data)
	{
		if (!$data['id']) {
			return;
		}
		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
	}
}
0 dan
<?php

class Profile_model extends CI_Model
{
	private $_table = "user";

	public function profile_rules()
	{
		return [
			[
				'field' => 'name',
				'label' => 'Name',
				'rules' => 'required|max_length[32]'
			],
			[
				'field' => 'email',
				'label' => 'Email',
				'rules' => 'required|max_length[32]'
			],
		];
	}

	public function password_rules()
	{
		return [
			[
				'field' => 'password',
				'label' => 'New Password',
				'rules' => 'required'
			],
			[
				'field' => 'password_confirm',
				'label' => 'Password Confirmation',
				'rules' => 'required|matches[password]'
			],
		];
	}

	public function update($data)
	{
		if (!$data['id']) {
			return;
		}
		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
	}
}
1 menjadi seperti ini:

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->profile_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_profile_form.php', $data );
			}

			$new_data = [
				'id' => $data['current_user']->id,
				'name' => $this->input->post('name'),
				'email' => $this->input->post('email'),
			];

			if($this->profile_model->update($new_data)){
				$this->session->set_flashdata('message', 'Profile was updated');
				redirect(site_url('admin/setting'));
			}
		}
		
		$this->load->view('admin/setting_edit_profile_form.php', $data);
	}

	public function edit_password()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->password_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_password_form.php', $data );
			}

			$new_password_data = [
				'id' => $data['current_user']->id,
				'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
				// 'password_updated_at' => date("Y-m-d H:i:s"),
			];

			if($this->profile_model->update($new_password_data)){
				$this->session->set_flashdata('message', 'Password was changed');
				redirect(site_url('admin/setting'));
			}
		}

		$this->load->view('admin/setting_edit_password_form.php', $data);
	}
}

Pada Controller ini kita melakukan load view yang belum kita buat:

  • 📜
    <?php
    
    class Profile_model extends CI_Model
    {
    	private $_table = "user";
    
    	public function profile_rules()
    	{
    		return [
    			[
    				'field' => 'name',
    				'label' => 'Name',
    				'rules' => 'required|max_length[32]'
    			],
    			[
    				'field' => 'email',
    				'label' => 'Email',
    				'rules' => 'required|max_length[32]'
    			],
    		];
    	}
    
    	public function password_rules()
    	{
    		return [
    			[
    				'field' => 'password',
    				'label' => 'New Password',
    				'rules' => 'required'
    			],
    			[
    				'field' => 'password_confirm',
    				'label' => 'Password Confirmation',
    				'rules' => 'required|matches[password]'
    			],
    		];
    	}
    
    	public function update($data)
    	{
    		if (!$data['id']) {
    			return;
    		}
    		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
    	}
    }
    2
  • 📜
    <?php
    
    class Profile_model extends CI_Model
    {
    	private $_table = "user";
    
    	public function profile_rules()
    	{
    		return [
    			[
    				'field' => 'name',
    				'label' => 'Name',
    				'rules' => 'required|max_length[32]'
    			],
    			[
    				'field' => 'email',
    				'label' => 'Email',
    				'rules' => 'required|max_length[32]'
    			],
    		];
    	}
    
    	public function password_rules()
    	{
    		return [
    			[
    				'field' => 'password',
    				'label' => 'New Password',
    				'rules' => 'required'
    			],
    			[
    				'field' => 'password_confirm',
    				'label' => 'Password Confirmation',
    				'rules' => 'required|matches[password]'
    			],
    		];
    	}
    
    	public function update($data)
    	{
    		if (!$data['id']) {
    			return;
    		}
    		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
    	}
    }
    3

Kedua view ini adalah view untuk menampilkan form edit profile dan form edit password.

Mari kita buat!

5. Membuat View untuk Form

Buatlah file baru di dalam folder

<?php

class Profile_model extends CI_Model
{
	private $_table = "user";

	public function profile_rules()
	{
		return [
			[
				'field' => 'name',
				'label' => 'Name',
				'rules' => 'required|max_length[32]'
			],
			[
				'field' => 'email',
				'label' => 'Email',
				'rules' => 'required|max_length[32]'
			],
		];
	}

	public function password_rules()
	{
		return [
			[
				'field' => 'password',
				'label' => 'New Password',
				'rules' => 'required'
			],
			[
				'field' => 'password_confirm',
				'label' => 'Password Confirmation',
				'rules' => 'required|matches[password]'
			],
		];
	}

	public function update($data)
	{
		if (!$data['id']) {
			return;
		}
		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
	}
}
4 dengan nama
<?php

class Profile_model extends CI_Model
{
	private $_table = "user";

	public function profile_rules()
	{
		return [
			[
				'field' => 'name',
				'label' => 'Name',
				'rules' => 'required|max_length[32]'
			],
			[
				'field' => 'email',
				'label' => 'Email',
				'rules' => 'required|max_length[32]'
			],
		];
	}

	public function password_rules()
	{
		return [
			[
				'field' => 'password',
				'label' => 'New Password',
				'rules' => 'required'
			],
			[
				'field' => 'password_confirm',
				'label' => 'Password Confirmation',
				'rules' => 'required|matches[password]'
			],
		];
	}

	public function update($data)
	{
		if (!$data['id']) {
			return;
		}
		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
	}
}
5 dan isi sebagai berikut.

📜

<?php

class Profile_model extends CI_Model
{
	private $_table = "user";

	public function profile_rules()
	{
		return [
			[
				'field' => 'name',
				'label' => 'Name',
				'rules' => 'required|max_length[32]'
			],
			[
				'field' => 'email',
				'label' => 'Email',
				'rules' => 'required|max_length[32]'
			],
		];
	}

	public function password_rules()
	{
		return [
			[
				'field' => 'password',
				'label' => 'New Password',
				'rules' => 'required'
			],
			[
				'field' => 'password_confirm',
				'label' => 'Password Confirmation',
				'rules' => 'required|matches[password]'
			],
		];
	}

	public function update($data)
	{
		if (!$data['id']) {
			return;
		}
		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
	}
}
2

<!DOCTYPE html>
<html lang="en">

<head>
	<?php $this->load->view('admin/_partials/head.php') ?>
</head>

<body>
	<main class="main">
		<?php $this->load->view('admin/_partials/side_nav.php') ?>

		<div class="content">
			<h1>Update Profile</h1>

			<form action="" method="POST">
				<div>
					<label for="name">Name</label>
					<input type="text" name="name" class="<?= form_error('name') ? 'invalid' : '' ?>"
					value="<?= form_error('name') ? set_value('name') : $current_user->name ?>" 
					required maxlength="32"/>
					<div class="invalid-feedback">
						<?= form_error('name') ?>
					</div>
				</div>
				<div>
					<label for="email">Email</label>
					<input type="text" name="email" class="<?= form_error('email') ? 'invalid' : '' ?>"
					value="<?= form_error('email') ? set_value('email') : $current_user->email ?>" 
					required maxlength="32"/>
					<div class="invalid-feedback">
						<?= form_error('email') ?>
					</div>
				</div>

				<div>
					<button type="submit" name="save" class="button button-primary">Save Update</button>
				</div>
			</form>

			<?php $this->load->view('admin/_partials/footer.php') ?>
		</div>
	</main>
</body>

</html>

Hasilnya:

Cara menggunakan laravel htmlentities

Berikutnya buat juga view untuk form edit password.

Buatlah file baru di dalam folder

<?php

class Profile_model extends CI_Model
{
	private $_table = "user";

	public function profile_rules()
	{
		return [
			[
				'field' => 'name',
				'label' => 'Name',
				'rules' => 'required|max_length[32]'
			],
			[
				'field' => 'email',
				'label' => 'Email',
				'rules' => 'required|max_length[32]'
			],
		];
	}

	public function password_rules()
	{
		return [
			[
				'field' => 'password',
				'label' => 'New Password',
				'rules' => 'required'
			],
			[
				'field' => 'password_confirm',
				'label' => 'Password Confirmation',
				'rules' => 'required|matches[password]'
			],
		];
	}

	public function update($data)
	{
		if (!$data['id']) {
			return;
		}
		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
	}
}
7 dengan nama
<?php

class Profile_model extends CI_Model
{
	private $_table = "user";

	public function profile_rules()
	{
		return [
			[
				'field' => 'name',
				'label' => 'Name',
				'rules' => 'required|max_length[32]'
			],
			[
				'field' => 'email',
				'label' => 'Email',
				'rules' => 'required|max_length[32]'
			],
		];
	}

	public function password_rules()
	{
		return [
			[
				'field' => 'password',
				'label' => 'New Password',
				'rules' => 'required'
			],
			[
				'field' => 'password_confirm',
				'label' => 'Password Confirmation',
				'rules' => 'required|matches[password]'
			],
		];
	}

	public function update($data)
	{
		if (!$data['id']) {
			return;
		}
		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
	}
}
8 dan isi sebagai berikut.

📜

<?php

class Profile_model extends CI_Model
{
	private $_table = "user";

	public function profile_rules()
	{
		return [
			[
				'field' => 'name',
				'label' => 'Name',
				'rules' => 'required|max_length[32]'
			],
			[
				'field' => 'email',
				'label' => 'Email',
				'rules' => 'required|max_length[32]'
			],
		];
	}

	public function password_rules()
	{
		return [
			[
				'field' => 'password',
				'label' => 'New Password',
				'rules' => 'required'
			],
			[
				'field' => 'password_confirm',
				'label' => 'Password Confirmation',
				'rules' => 'required|matches[password]'
			],
		];
	}

	public function update($data)
	{
		if (!$data['id']) {
			return;
		}
		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
	}
}
3

<!DOCTYPE html>
<html lang="en">

<head>
	<?php $this->load->view('admin/_partials/head.php') ?>
</head>

<body>
	<main class="main">
		<?php $this->load->view('admin/_partials/side_nav.php') ?>

		<div class="content">
			<h1>Reset Password</h1>

			<form action="" method="POST">
				<div>
					<label for="password">Password Baru</label>
					<input type="password" name="password" class="<?= form_error('password') ? 'invalid' : '' ?>"
					value="<?= set_value("password") ?>" required/>
					<div class="invalid-feedback">
						<?= form_error('password') ?>
					</div>
				</div>
				<div>
					<label for="password_confirm">Konfirmasi Password Baru</label>
					<input type="password" name="password_confirm" class="<?= form_error('password_confirm') ? 'invalid' : '' ?>"
					value="<?= set_value("password_confirm") ?>" required/>
					<div class="invalid-feedback">
						<?= form_error('password_confirm') ?>
					</div>
				</div>

				<div>
					<button type="submit" name="save" class="button button-primary">Save Password</button>
				</div>
			</form>

			<?php $this->load->view('admin/_partials/footer.php') ?>
		</div>
	</main>
</body>

</html>

Hasilnya:

Cara menggunakan laravel htmlentities

Catatan untuk edit password:

Pada halaman edit password, kita tidak meminta password lama. Sebenarnya ini bukan praktik yang baik.

Seharusnya sebelum membuka form ini kita minta dulu password yang lama atau OTP konfirmasi untuk keamanan akun user.

Namun, karena ini hanya untuk tutorial. Maka kita tidak melakukan ini. Silahkan buat sendiri ya. Hehe :smile

Nah sekarang mari kita uji coba..

Percobaan Edit Profile dan Password

Silahkan coba untuk mengubah data profle melalui form edit profile. Jika berhasil diubah, maka kita sudah berhasil membuat fitur ubah profile.

Berikutnya coba juga untuk ubah password, kemudian lakukan logout dan login dengan password yang baru.

Mencatat Tanggal Perubahan Password

Fitur ini penting untuk memberitahu user kapan dia melakukan update password.

Coba perhatilan method

<?php

class Profile_model extends CI_Model
{
	private $_table = "user";

	public function profile_rules()
	{
		return [
			[
				'field' => 'name',
				'label' => 'Name',
				'rules' => 'required|max_length[32]'
			],
			[
				'field' => 'email',
				'label' => 'Email',
				'rules' => 'required|max_length[32]'
			],
		];
	}

	public function password_rules()
	{
		return [
			[
				'field' => 'password',
				'label' => 'New Password',
				'rules' => 'required'
			],
			[
				'field' => 'password_confirm',
				'label' => 'Password Confirmation',
				'rules' => 'required|matches[password]'
			],
		];
	}

	public function update($data)
	{
		if (!$data['id']) {
			return;
		}
		return $this->db->update($this->_table, $data, ['id' => $data['id']]);
	}
}
1 pada Controller
<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->profile_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_profile_form.php', $data );
			}

			$new_data = [
				'id' => $data['current_user']->id,
				'name' => $this->input->post('name'),
				'email' => $this->input->post('email'),
			];

			if($this->profile_model->update($new_data)){
				$this->session->set_flashdata('message', 'Profile was updated');
				redirect(site_url('admin/setting'));
			}
		}
		
		$this->load->view('admin/setting_edit_profile_form.php', $data);
	}

	public function edit_password()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->password_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_password_form.php', $data );
			}

			$new_password_data = [
				'id' => $data['current_user']->id,
				'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
				// 'password_updated_at' => date("Y-m-d H:i:s"),
			];

			if($this->profile_model->update($new_password_data)){
				$this->session->set_flashdata('message', 'Password was changed');
				redirect(site_url('admin/setting'));
			}
		}

		$this->load->view('admin/setting_edit_password_form.php', $data);
	}
}
1, di sana ada variabel
<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->profile_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_profile_form.php', $data );
			}

			$new_data = [
				'id' => $data['current_user']->id,
				'name' => $this->input->post('name'),
				'email' => $this->input->post('email'),
			];

			if($this->profile_model->update($new_data)){
				$this->session->set_flashdata('message', 'Profile was updated');
				redirect(site_url('admin/setting'));
			}
		}
		
		$this->load->view('admin/setting_edit_profile_form.php', $data);
	}

	public function edit_password()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->password_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_password_form.php', $data );
			}

			$new_password_data = [
				'id' => $data['current_user']->id,
				'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
				// 'password_updated_at' => date("Y-m-d H:i:s"),
			];

			if($this->profile_model->update($new_password_data)){
				$this->session->set_flashdata('message', 'Password was changed');
				redirect(site_url('admin/setting'));
			}
		}

		$this->load->view('admin/setting_edit_password_form.php', $data);
	}
}
2 seperti ini:

$new_password_data = [
	'id' => $data['current_user']->id,
	'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
	// 'password_updated_at' => date("Y-m-d H:i:s"),
];

Silahkan aktifkan kode yang dikomentari sehingga menjadi seperti ini:

$new_password_data = [
	'id' => $data['current_user']->id,
	'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
	'password_updated_at' => date("Y-m-d H:i:s"),
];

Artinya, kita akan mengisi kolom

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->profile_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_profile_form.php', $data );
			}

			$new_data = [
				'id' => $data['current_user']->id,
				'name' => $this->input->post('name'),
				'email' => $this->input->post('email'),
			];

			if($this->profile_model->update($new_data)){
				$this->session->set_flashdata('message', 'Profile was updated');
				redirect(site_url('admin/setting'));
			}
		}
		
		$this->load->view('admin/setting_edit_profile_form.php', $data);
	}

	public function edit_password()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->password_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_password_form.php', $data );
			}

			$new_password_data = [
				'id' => $data['current_user']->id,
				'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
				// 'password_updated_at' => date("Y-m-d H:i:s"),
			];

			if($this->profile_model->update($new_password_data)){
				$this->session->set_flashdata('message', 'Password was changed');
				redirect(site_url('admin/setting'));
			}
		}

		$this->load->view('admin/setting_edit_password_form.php', $data);
	}
}
3 pada tabel
<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->profile_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_profile_form.php', $data );
			}

			$new_data = [
				'id' => $data['current_user']->id,
				'name' => $this->input->post('name'),
				'email' => $this->input->post('email'),
			];

			if($this->profile_model->update($new_data)){
				$this->session->set_flashdata('message', 'Profile was updated');
				redirect(site_url('admin/setting'));
			}
		}
		
		$this->load->view('admin/setting_edit_profile_form.php', $data);
	}

	public function edit_password()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->password_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_password_form.php', $data );
			}

			$new_password_data = [
				'id' => $data['current_user']->id,
				'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
				// 'password_updated_at' => date("Y-m-d H:i:s"),
			];

			if($this->profile_model->update($new_password_data)){
				$this->session->set_flashdata('message', 'Password was changed');
				redirect(site_url('admin/setting'));
			}
		}

		$this->load->view('admin/setting_edit_password_form.php', $data);
	}
}
4 dengan tanggal dan waktu saat ini.

Oh iya, kolom

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->profile_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_profile_form.php', $data );
			}

			$new_data = [
				'id' => $data['current_user']->id,
				'name' => $this->input->post('name'),
				'email' => $this->input->post('email'),
			];

			if($this->profile_model->update($new_data)){
				$this->session->set_flashdata('message', 'Profile was updated');
				redirect(site_url('admin/setting'));
			}
		}
		
		$this->load->view('admin/setting_edit_profile_form.php', $data);
	}

	public function edit_password()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->password_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_password_form.php', $data );
			}

			$new_password_data = [
				'id' => $data['current_user']->id,
				'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
				// 'password_updated_at' => date("Y-m-d H:i:s"),
			];

			if($this->profile_model->update($new_password_data)){
				$this->session->set_flashdata('message', 'Password was changed');
				redirect(site_url('admin/setting'));
			}
		}

		$this->load->view('admin/setting_edit_password_form.php', $data);
	}
}
3 belum kita buat di table
<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->profile_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_profile_form.php', $data );
			}

			$new_data = [
				'id' => $data['current_user']->id,
				'name' => $this->input->post('name'),
				'email' => $this->input->post('email'),
			];

			if($this->profile_model->update($new_data)){
				$this->session->set_flashdata('message', 'Profile was updated');
				redirect(site_url('admin/setting'));
			}
		}
		
		$this->load->view('admin/setting_edit_profile_form.php', $data);
	}

	public function edit_password()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->password_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_password_form.php', $data );
			}

			$new_password_data = [
				'id' => $data['current_user']->id,
				'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
				// 'password_updated_at' => date("Y-m-d H:i:s"),
			];

			if($this->profile_model->update($new_password_data)){
				$this->session->set_flashdata('message', 'Password was changed');
				redirect(site_url('admin/setting'));
			}
		}

		$this->load->view('admin/setting_edit_password_form.php', $data);
	}
}
4.

Silahkan dibuat dulu.

1. Menambahkan Kolom <?php class Setting extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('auth_model'); if (!$this->auth_model->current_user()) { redirect('auth/login'); } } public function index() { $data['current_user'] = $this->auth_model->current_user(); $this->load->view('admin/setting', $data); } public function upload_avatar() { echo "comming soon!"; } public function remove_avatar() { echo "comming soon!"; } public function edit_profile() { $this->load->library('form_validation'); $this->load->model('profile_model'); $data['current_user'] = $this->auth_model->current_user(); if ($this->input->method() === 'post') { $rules = $this->profile_model->profile_rules(); $this->form_validation->set_rules($rules); if($this->form_validation->run() === FALSE){ return $this->load->view('admin/setting_edit_profile_form.php', $data ); } $new_data = [ 'id' => $data['current_user']->id, 'name' => $this->input->post('name'), 'email' => $this->input->post('email'), ]; if($this->profile_model->update($new_data)){ $this->session->set_flashdata('message', 'Profile was updated'); redirect(site_url('admin/setting')); } } $this->load->view('admin/setting_edit_profile_form.php', $data); } public function edit_password() { $this->load->library('form_validation'); $this->load->model('profile_model'); $data['current_user'] = $this->auth_model->current_user(); if ($this->input->method() === 'post') { $rules = $this->profile_model->password_rules(); $this->form_validation->set_rules($rules); if($this->form_validation->run() === FALSE){ return $this->load->view('admin/setting_edit_password_form.php', $data ); } $new_password_data = [ 'id' => $data['current_user']->id, 'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT), // 'password_updated_at' => date("Y-m-d H:i:s"), ]; if($this->profile_model->update($new_password_data)){ $this->session->set_flashdata('message', 'Password was changed'); redirect(site_url('admin/setting')); } } $this->load->view('admin/setting_edit_password_form.php', $data); } }3

Cara cepat:

Jalankan Query ini di Phpmyadmin

ALTER TABLE `user` ADD `password_updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `last_login`;

Atau bisa juga buat secara manual:

Buka Phpmyadmin, kemduian buka tabel

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->profile_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_profile_form.php', $data );
			}

			$new_data = [
				'id' => $data['current_user']->id,
				'name' => $this->input->post('name'),
				'email' => $this->input->post('email'),
			];

			if($this->profile_model->update($new_data)){
				$this->session->set_flashdata('message', 'Profile was updated');
				redirect(site_url('admin/setting'));
			}
		}
		
		$this->load->view('admin/setting_edit_profile_form.php', $data);
	}

	public function edit_password()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->password_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_password_form.php', $data );
			}

			$new_password_data = [
				'id' => $data['current_user']->id,
				'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
				// 'password_updated_at' => date("Y-m-d H:i:s"),
			];

			if($this->profile_model->update($new_password_data)){
				$this->session->set_flashdata('message', 'Password was changed');
				redirect(site_url('admin/setting'));
			}
		}

		$this->load->view('admin/setting_edit_password_form.php', $data);
	}
}
4 di database
<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->profile_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_profile_form.php', $data );
			}

			$new_data = [
				'id' => $data['current_user']->id,
				'name' => $this->input->post('name'),
				'email' => $this->input->post('email'),
			];

			if($this->profile_model->update($new_data)){
				$this->session->set_flashdata('message', 'Profile was updated');
				redirect(site_url('admin/setting'));
			}
		}
		
		$this->load->view('admin/setting_edit_profile_form.php', $data);
	}

	public function edit_password()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->password_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_password_form.php', $data );
			}

			$new_password_data = [
				'id' => $data['current_user']->id,
				'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
				// 'password_updated_at' => date("Y-m-d H:i:s"),
			];

			if($this->profile_model->update($new_password_data)){
				$this->session->set_flashdata('message', 'Password was changed');
				redirect(site_url('admin/setting'));
			}
		}

		$this->load->view('admin/setting_edit_password_form.php', $data);
	}
}
9. Pada bagian Structure, klik tombol Go di bawah tabel untuk menambahkan kolom baru.

Cara menggunakan laravel htmlentities

Kemudian pada name isi dengan

<?php

class Setting extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model('auth_model');
		if (!$this->auth_model->current_user()) {
			redirect('auth/login');
		}
	}

	public function index()
	{
		$data['current_user'] = $this->auth_model->current_user();
		$this->load->view('admin/setting', $data);
	}

	public function upload_avatar()
	{
		echo "comming soon!";
	}

	public function remove_avatar()
	{
		echo "comming soon!";
	}

	public function edit_profile()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->profile_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_profile_form.php', $data );
			}

			$new_data = [
				'id' => $data['current_user']->id,
				'name' => $this->input->post('name'),
				'email' => $this->input->post('email'),
			];

			if($this->profile_model->update($new_data)){
				$this->session->set_flashdata('message', 'Profile was updated');
				redirect(site_url('admin/setting'));
			}
		}
		
		$this->load->view('admin/setting_edit_profile_form.php', $data);
	}

	public function edit_password()
	{
		$this->load->library('form_validation');
		$this->load->model('profile_model');
		$data['current_user'] = $this->auth_model->current_user();

		if ($this->input->method() === 'post') {
			$rules = $this->profile_model->password_rules();
			$this->form_validation->set_rules($rules);

			if($this->form_validation->run() === FALSE){
				return $this->load->view('admin/setting_edit_password_form.php', $data );
			}

			$new_password_data = [
				'id' => $data['current_user']->id,
				'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
				// 'password_updated_at' => date("Y-m-d H:i:s"),
			];

			if($this->profile_model->update($new_password_data)){
				$this->session->set_flashdata('message', 'Password was changed');
				redirect(site_url('admin/setting'));
			}
		}

		$this->load->view('admin/setting_edit_password_form.php', $data);
	}
}
3 dengan type
<!DOCTYPE html>
<html lang="en">

<head>
	<?php $this->load->view('admin/_partials/head.php') ?>
</head>

<body>
	<main class="main">
		<?php $this->load->view('admin/_partials/side_nav.php') ?>

		<div class="content">
			<h1>Update Profile</h1>

			<form action="" method="POST">
				<div>
					<label for="name">Name</label>
					<input type="text" name="name" class="<?= form_error('name') ? 'invalid' : '' ?>"
					value="<?= form_error('name') ? set_value('name') : $current_user->name ?>" 
					required maxlength="32"/>
					<div class="invalid-feedback">
						<?= form_error('name') ?>
					</div>
				</div>
				<div>
					<label for="email">Email</label>
					<input type="text" name="email" class="<?= form_error('email') ? 'invalid' : '' ?>"
					value="<?= form_error('email') ? set_value('email') : $current_user->email ?>" 
					required maxlength="32"/>
					<div class="invalid-feedback">
						<?= form_error('email') ?>
					</div>
				</div>

				<div>
					<button type="submit" name="save" class="button button-primary">Save Update</button>
				</div>
			</form>

			<?php $this->load->view('admin/_partials/footer.php') ?>
		</div>
	</main>
</body>

</html>
1 dan default
<!DOCTYPE html>
<html lang="en">

<head>
	<?php $this->load->view('admin/_partials/head.php') ?>
</head>

<body>
	<main class="main">
		<?php $this->load->view('admin/_partials/side_nav.php') ?>

		<div class="content">
			<h1>Update Profile</h1>

			<form action="" method="POST">
				<div>
					<label for="name">Name</label>
					<input type="text" name="name" class="<?= form_error('name') ? 'invalid' : '' ?>"
					value="<?= form_error('name') ? set_value('name') : $current_user->name ?>" 
					required maxlength="32"/>
					<div class="invalid-feedback">
						<?= form_error('name') ?>
					</div>
				</div>
				<div>
					<label for="email">Email</label>
					<input type="text" name="email" class="<?= form_error('email') ? 'invalid' : '' ?>"
					value="<?= form_error('email') ? set_value('email') : $current_user->email ?>" 
					required maxlength="32"/>
					<div class="invalid-feedback">
						<?= form_error('email') ?>
					</div>
				</div>

				<div>
					<button type="submit" name="save" class="button button-primary">Save Update</button>
				</div>
			</form>

			<?php $this->load->view('admin/_partials/footer.php') ?>
		</div>
	</main>
</body>

</html>
2.

Cara menggunakan laravel htmlentities

Setelah itu klik Save.

2. Menampilkan Tanggal Perubahan Password

Bukalah view

<!DOCTYPE html>
<html lang="en">

<head>
	<?php $this->load->view('admin/_partials/head.php') ?>
</head>

<body>
	<main class="main">
		<?php $this->load->view('admin/_partials/side_nav.php') ?>

		<div class="content">
			<h1>Update Profile</h1>

			<form action="" method="POST">
				<div>
					<label for="name">Name</label>
					<input type="text" name="name" class="<?= form_error('name') ? 'invalid' : '' ?>"
					value="<?= form_error('name') ? set_value('name') : $current_user->name ?>" 
					required maxlength="32"/>
					<div class="invalid-feedback">
						<?= form_error('name') ?>
					</div>
				</div>
				<div>
					<label for="email">Email</label>
					<input type="text" name="email" class="<?= form_error('email') ? 'invalid' : '' ?>"
					value="<?= form_error('email') ? set_value('email') : $current_user->email ?>" 
					required maxlength="32"/>
					<div class="invalid-feedback">
						<?= form_error('email') ?>
					</div>
				</div>

				<div>
					<button type="submit" name="save" class="button button-primary">Save Update</button>
				</div>
			</form>

			<?php $this->load->view('admin/_partials/footer.php') ?>
		</div>
	</main>
</body>

</html>
3, kemudian pada bagian Security & Password (di sekitar baris 50-52) ubah menjadi seperti ini.