Sửa thành viên trong CodeIgniter 3x

Sau khi thêm thành viên, kế tiếp là viết function sửa thành viên, sửa user trong codeigniter 3x, phần này cũng đơn giản vì một số phần dựa vào bài thêm thành viên, thêm user trước
  • 09:28 17/11/2016
  • Kỳ Nhân
  • 0 Bình luận
  • 698

- Để viết hàm sửa thành viên trong CodeIgniter 3x, các bạn cần thực hiện các bước sau.

- Tạo giao diện view cho sửa thành viên. Phần này cũng đơn giản, đa số là sửa lại từ controller groups. Vào application/views/admin/users tạo file edit.php với nội dung

<?php defined('BASEPATH') OR exit('No direct script access allowed');?>
<div class="container">
    <h1>Sửa Users</h1>
    <?php $this->load->view('admin/users/form'); ?>
</div>

Sau khi có giao diện sửa user, việc kế tiếp là viết hàm, function sửa user trong trong controller. Vào application/controllers/admin/Users.php thêm hàm

public function edit($id = NULL) {
        $this->data['button_title'] = 'Sửa users';
        if($this->input->post()) {
            //upload hinh                    
            $query = $this->db->query("select * from users where id='$id'")->row();                
            $pic_name=$query->picture;
            if($this->upload->do_upload('picture')) {
                $pic_name = $this->upload->file_name;
                if(is_file('./uploads/'.$query->picture)) {
                    unlink('./uploads/'.$query->picture);
                }
            }
            $pass_token = $query->pass_token;
            if($this->input->post('password')!=$query->pass_token) {
                $pass_token = $this->mcode->hash($this->mcode->clean($this->input->post('password')));
            }
            $model = [
                'stt' => $this->mcode->clean($this->input->post('stt')),
                'hide' => $this->mcode->clean($this->input->post('hide')),
                'picture' => $pic_name,
                'username' => $this->mcode->username($this->mcode->clean($this->input->post('username'))),
                'user_token' => $this->mcode->hash($this->mcode->clean($this->input->post('username'))),
                'pass_token' => $pass_token,
                'group_id' => $this->mcode->clean($this->input->post('group_id')),
                'name' => $this->mcode->clean($this->input->post('name')),
                'email' => $this->mcode->clean($this->input->post('email')),
                'phone' => $this->mcode->clean($this->input->post('phone')),
                'address' => $this->mcode->clean($this->input->post('address')),
                'birthday' => strtotime($this->input->post('day')."-".$this->input->post('month')."-".$this->input->post('year')),
                'gender' => $this->mcode->clean($this->input->post('gender')),
            ];
            if($this->db->update('users', $model, array('id' => $id))) {
                redirect('admin/users','refresh');
            }
            else {
                echo $this->db->error();
            }
        }
        else {
            $this->data['id_user'] = $id;
            $this->data['list_group'] = $this->db->query("select * from groups where hide=1 order by id asc")->result();
            $this->data['items'] = $this->db->query("select * from users where id='$id'")->row();
            $this->render('admin/users/edit');
        }
    }

+ Giải thích hàm trên cho các bạn có cái nhìn rõ ràng hơn về code:

- Việc sửa thành viên sẽ tận dụng giao diện form từ giao diện tạo thành viên nên file create.php sẽ load giao diện form $this->load->view('admin/users/form');

- Phần upload hình. Do là sửa nên sẽ có hình lúc trước hoặc chưa có hình, đễ kiểm tra ta phải query từ database dựa vào id, rồi kiểm tra trường picture có rỗng hay không. Nên mình gán $pic_name bằng dữ liệu cũ, nếu lúc sửa có phát sinh upload hình thì biến $pic_name sẽ gán với giá trị mới và xóa đi hình cũ.

- Phần mật khẩu và xác nhận lại mật khẩu, khi sửa cho hiển thị là pass_token, vì có ứng dụng validate form vào, 2 trường đó nếu đễ rỗng sẽ không được submit, nên đễ phần pass_token vào, vừa bảo đảm không lộ pass vừa thõa mãn không rỗng. Kế tiếp là khi submit kiểm tra xem post password có trùng với pass_token trong database không. Nếu trùng là pass không thay đổi, còn không trùng là user thay đổi pass, ta khởi tạo lại mật khẩu cho user

- Còn một số trường khác không quan trọng thì chèn như thêm thành viên thôi

- Khi sửa thì biến $id_user của ajax để kiểm tra tên tài khoản, email sẽ không rỗng, nên khi query sẽ loại trừ trùng với id hiện tại, vì sửa nên database khớp với id thì trùng email và tài khoản là đúng rồi.

- Vậy qua phần giải thích, việc sửa thành viên, sửa user trở nên đơn giản hơn vì có phần thêm rồi nên sửa lại nhẹ nhàng.