/ / Codeigniter / Comment (0)

Codeigniter Framework : Đăng ký thành viên

Với đa số các website thì chức năng quản lý thành viên là 1 chức năng rất quan trọng,nhất là đối với website dạng bán sản phẩm,chúng ta cần có module cho phép thành viên đăng ký tài khoản,đăng nhập vào hệ thống mua hàng,từ đó ta hoàn toàn có thể quản lý được khách hàng và thống kê báo cáo theo khác hàng.Hôm nay mình sẽ hướng dẫn cho các bạn làm chức năng đầu tiên đó chính là đăng ký thành viên.Khi các bạn làm chức năng này thì các bạn cũng cần có lượng kiến thức nhát định về Codeigniter Framework,để làm chức năng này dễ hơn mình khuyên các bạn lên đọc lại các bài liên qua sau:

  1. Hướng dẫn tạo cơ sở dữ liệu (CSDL) cho web bán hàng (xem các trường dữ liệu của bảng user)
  2. Xây dựng main controller CodeIgniter (controller user sẽ kế thừa từ lớp main controller này)
  3. Xây dựng main Model CodeIgniter (model user sẽ kế thừa từ lớp main model này)
  4. Form Validatiton trong CodeIgniter (thực hiện kiểm tra dữ liệu trong form )

Nếu các bạn theo dõi loại series hướng dẫn xây dựng website bán hàng thanh toán trực tuyến thì cần chú ý,toàn bộ các bài viết trong series này mình đều sử dụng CSDL như ở trong bài viết hướng dẫn tạo CSDL đơn giản cho website bán bàng,và sử dụng các lớp main controllermain model như trong bài hướng dẫn ở trên.Lên các bạn cần nắm kỹ các bài trên nhé.Nào chúng ta cùng bắt đầu vào việc đăng ký thành viên nhé.

Chức năng đăng ký thành viên với Codeigniter Framework

Trước khi vào thực hành làm chức năng này mình xin giới thiệu về cấu trúc thư mục dự án của mình như sau:

-demo
—–application
———-controllers
—————–user.php
———-models
—————–user_model.php
———-views
—————–admin
—————–site
—————————user
————————————register.php

Tạo form đăng ký thành viên

Trước tiên các bạn tạo cho mình file views/site/user/register.php với nội dung sau:

<form method="post" action="">
     <label for="param_email" class="form-label">Email:<span class="req">*</span></label>
     <input type="text" class="input" id="email" name="email" value="<?php echo set_value('email')?>">
     <div class="error" id="email_error"><?php echo form_error('email')?></div>
                    
     <label for="param_password" class="form-label">Mật khẩu:<span class="req">*</span></label>
     <input type="password" class="input" id="password" name="password">
     <div class="error" id="password_error"><?php echo form_error('password')?></div>
                    
     <label for="param_re_password" class="form-label">Gõ lại mật khẩu:<span class="req">*</span></label>
     <input type="password" class="input" id="re_password" name="re_password">
     <div class="error" id="re_password_error"><?php echo form_error('re_password')?></div>
                    
     <label for="param_name" class="form-label">Họ và tên:<span class="req">*</span></label>
     <input type="text" class="input" id="name" name="name" value="<?php echo set_value('name')?>">
     <div class="error" id="name_error"><?php echo form_error('name')?></div>
                    
     <label for="param_phone" class="form-label">Số điện thoại:<span class="req">*</span></label>
     <input type="text" class="input" id="phone" name="phone" value="<?php echo set_value('phone')?>">
     <div class="error" id="phone_error"><?php echo form_error('phone')?></div>
                    
     <label for="param_address" class="form-label">Địa chỉ:<span class="req">*</span></label>
     <textarea class="input" id="address" name="address"><?php echo set_value('address')?></textarea>
     <div class="error" id="address_error"><?php echo form_error('address')?></div>
                    
     <input type="submit" class="button" value="Đăng ký" name='submit'>
</form>

Nhìn vào form trên thì các bạn thấy mình có 5 trường dữ liệu đó chính là email,mật khẩu,họ tên,số điện thoại và địa chỉ,và đây cũng chính là 5 trường dữ liệu ta cần quản lý trong bảng thành viên.Nếu các bạn đã xem bài viết về Form Validatiton trong CodeIgniter thì các bạn sẽ hiểu những dòng code của mình trong form trên:
+ set_value('email') : Lưu lại giá trị cũ khi khách hàng nhập vào ô email,tương tự các ô kia cũng vậy
+ form_error('email') : Hiển thị lỗi của ô email nếu có,tương tự các ô kia cũng vậy

Và khi các bạn chạy link http://localhost/demo/user/register kết quả sẽ như sau:

Form đăng ký thành viên

Form đăng ký thành viên

Và tất nhiên là form trên mình đã sử dụng cả css để style cho form rồi nhé,phần này không quan trọng lên các bạn có thể style cho form đẹp hơn hoặc không style cũng được :D.

Tạo Model (user_model.php)

<?php
class User_model extends MY_Model
{
	//ten bang du lieu
	public $table = 'user';
}

Vơi phần này nếu các bạn đã đọc bài viết Xây dựng main Model CodeIgniter thì sẽ thấy model user mình kế thừa từ lớp MY_Model mà không phải là từ CI_Model,từ đó ta có thể sử dụng được toàn bộ phương thức trong lớp này.

Kiểm tra dữ liệu trong form

– Các bạn tạo file controller user.php với nội dung:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');  
class User extends MY_Controller
{
    public function __construct()
    {
       parent::__construct();
       //load model user
       $this->load->model('user_model');
    }
    /*
    * Phuong thuc dang ky thanh vien
    */
    public function register()
    {
       //load thu vien validation
       $this->load->library('form_validation');
       $this->load->helper('form');
       
       //tao cac tap luat
       $this->form_validation->set_rules('email', 'Email', 'required|valid_email|xss_clean');
       $this->form_validation->set_rules('name', 'Họ và tên', 'required|min_length[8]|xss_clean');
       $this->form_validation->set_rules('phone', 'Số điện thoại', 'required|min_length[8]|numeric|xss_clean');
       $this->form_validation->set_rules('password', 'Mật khẩu', 'required|min_length[6]|numeric|xss_clean');
       $this->form_validation->set_rules('re_password', 'Nhập lại mật khẩu', 'required|matches[password]|xss_clean');
       $this->form_validation->set_rules('address', 'Địa chỉ', 'required|xss_clean');
       //chạy phương thức kiểm tra dữ liệu
       if($this->form_validation->run())
       {
             //code here
       }
       //thực hiện load view
       $this->load->view('site/user/register', $this->data);
    }
}

– Nếu các bạn đã xem bài viết Xây dựng main controller CodeIgniter thì sẽ hiểu tại sao trong controller User này mình lại kế thừa từ MY_Controller mà không phải là từ CI_Controller.
– Trong controller user này sử dụng phương thức khởi tạo __construct() và mình thực hiện gọi tới user_model tại đây,vì thế tất cả các phương thức khác trong controller này không cần load model này ra nữa.
– Nếu các bạn đã xem bài viết về Form Validatiton trong CodeIgniter thì các bạn sẽ hiểu những dòng code của mình trong form trên:
+ email: Email không được bỏ trống,email phải hợp lệ
+ name: họ tên không được bỏ trống,tối thiểu 8 ký tự
+ phone: Số điện thoại không được bỏ trống,tối thiểu 8 ký tự
+ password: Mật khẩu không được bỏ trống,tối thiểu 6 ký tự
+ re_password: Nhập lại mật khẩu không được bỏ trống,và phải giống với trường mật khẩu
+ address: Địa chỉ không được bỏ trống
Ví dụ mình thử nhập 1 trường email không hợp lên và xem kết quả thế nào nhé.

Form đăng ký thành viên

Form đăng ký thành viên

Như các bạn thấy lúc này các lỗi đã được hiển thị ra nhờ hàm form_error() và dữ liệu trong thẻ input đều được lưu lại nhờ hàm set_value().
– Nhưng ở đây có 1 vấn đề đó là chúng ta sẽ sử dụng email để đăng nhập lên 1 email chỉ được đăng ký 1 tài khoản như vậy là chúng ta cần kiểm tra xem email đã có trong csdl hay chưa.Để làm được điều này chúng ta sẽ sử dụng hàm callback khi kiểm tra email,sẽ sửa lại đoạn code kiểm tra email như sau:

$this->form_validation->set_rules('email', 'Email', 'required|valid_email|xss_clean|callback_check_email');

Với đoạn code trên chúng ta sẽ gọi lại hàm check_email() để kiểm tra xem email này đã tồn tại hay chưa,và hàm check_email() sẽ kiểm tra như sau:

   /*
    * Kiểm tra email đã tồn tại hay chưa
    */
   function check_email()
   {

       $email = $this->input->post('email');
       $where = array();
       $where['email'] = $email;
       //kiểm tra điều kiện email có tồn tại trong csdl hay không
       if($this->user_model->check_exists($where))
       {
       	    //trả về thông báo lỗi nếu đã tồn tại email này
	    $this->form_validation->set_message(__FUNCTION__, 'Email đã sử dụng');
            return FALSE;
       }
       return TRUE;
   }

– Với phương thức trên chúng ta sẽ sử dụng hàm check_exists() để kiểm tra xem 1 dữ liệu nào đó đã có trong CSDL hay chưa.Hàm này mình viết trong lớp MY_model và lớp user_model kế thừa lại.

Thêm thành viên và CSDL

– Khi đã nhập đầy đủ thông tin và các thông tin hợp lệ lúc này ta sẽ thêm toàn bộ thông tin của thành viên vào trong CSDL.

       if($this->form_validation->run())
       {
           //du lieu them vao bang thanh vien
           $data = array(
               'name'     => $this->input->post('name'),
               'email'    => $this->input->post('email'),
               'password' => md5($this->input->post('password')),
               'phone'    => $this->input->post('phone'),
               'address'  => $this->input->post('address')
            );
           //them thanh vien vao trong csdl
           if($this->user_model->create($data))
           {
                 $this->session->set_flashdata('flash_message', 'Dang ky thanh vien thanh cong');
                 redirect();//chuyen toi trang chu
           }
       }

Mình xin giải thích 1 chút về đoạn code trên: biến $data chính là toàn bộ thông tin mà ta sẽ thêm vào CSDL,lúc này mình sử dụng $this->input->post('tên thẻ input') để lấy được giá trị mà khách hàng nhập vào thẻ input.Sau khi lấy được toàn bộ thông tin thành viên lưu vào biến $data lúc này ta sẽ thực hiện thêm vào CSDL thông qua phương thức create() đây là 1 phương thức thêm mới 1 dữ liệu mà user_model kế thừa từ MY_model,như vậy là các bạn đã thực hiện thêm mới 1 thành viên vào trong CSDL và thực hiện xong chức năng đăng ký thành viên rồi đó.
Và các bạn có thể download controller user trong bài hướng dẫn này tại đây: http://ouo.io/U6VqVz

kết thúc bài viết: Qua bài này mình đã hướng dẫn cho các bạn thực hiện chức năng đăng ký thành viên trong Codeigniter Framework.Để làm được chức năng này thì các bạn cần có kiến thức nhất định về CI rồi,và cần đọc trước các bài viết điều kiện mà mình nói ở trên.Sang bài sau mình sẽ hướng dẫn các bạn thực hiện chức năng đăng nhập và đăng xuất sử dụng thư viên Session trong Codeigniter Framework.



14/09/2014
Written by nobitacnt

Trong bài viết không tránh khỏi những câu từ chưa chính xác,mong nhận được sự góp ý để website hoàn thiện hơn.Nếu thấy bài viết có ích với bạn hãy like và share để ủng hộ nhé :D.

Bài viết chùng chuyên mục

Gửi bình luận

Giới thiệu

Mình tạo ra blog này với mong muốn chia sẻ và học hỏi kinh nghiệm trong quá trình thiết kế website. Website đang trong quá trình phát triển chân thành cảm ơn mọi sự góp ý của các bạn để làm cho website ngày càng hoàn thiên.

DMCA.com Protection Status
Theo dõi qua Email

Tổng hợp các bài viết về

Hoc php - CodeIgniter Framework - Laravel Framework - PHP va MYSQL