NTM Solutions

Facebook Youtube Google+

Thứ Năm, 1 tháng 11, 2018

CI-Bài 03-Tạo mẩu tin mới


XEM MỤC LỤC CÁC BÀI VIẾT VỀ CODEIGNITER


Đến đây bạn đã biết cách đọc dữ liệu từ 01 cơ sở dữ liệu dùng framework CodeIgniter, nhưng bạn vẫn chưa học cách ghi thông tin vào cơ sở dữ liệu. Trong bài này, chúng ta sẽ mở rộng controller news và model đã tạo trong bài trước để bổ sung thêm tính năng này.

Tạo 01 biểu mẫu


Để nhập dữ liệu vào cơ sở dữ liệu bạn cần tạo 01 biểu mẫu để điền thông tin sẽ được lưu trữ. Trong ví dụ này, ta sẽ tạo 01 biểu mẫu có 02 trường, 01 để nhập tiêu đề và 01 để nhập văn bản. Chúng ta sẽ trích slug từ phần tiêu đề trong model. Ta tạo 01 view mới tại application/views/news/create.php

<h2><?php echo $title; ?></h2>



<?php echo validation_errors(); ?>



<?php echo form_open('news/create'); ?>



    <label for="title">Title</label>

    <input type="input" name="title" /><br />



    <label for="text">Text</label>

    <textarea name="text"></textarea><br />



    <input type="submit" name="submit" value="Create news item" />



</form>

Có 02 hàm mới xuất hiện ở đây: hàm form_open() và hàm validation_errors()


Hàm đầu tiên lấy từ form helper và hiển thị các thành phần của biểu mẫu cộng thêm 01 số tính năng ví dụ như thêm trường ẩn CSRF prevention field mà sau này ta sẽ dùng để hiển thị các báo cáo lỗi khi kiểm tra các giá trị biểu mẫu.

Quay lại controller news, chúng ta sẽ làm 02 việc: kiểm tra biểu mẫu đã gửi (submit) chưa và các giá trị gửi đi có hợp lệ với các qui tắc không. Ở đây ta kiểm tra giá trị biểu mẫu bằng thư viện form validation

public function create()

{

    $this->load->helper('form');

    $this->load->library('form_validation');



    $data['title'] = 'Tạo 01 dòng tin mới';



    $this->form_validation->set_rules('title', 'Title', 'required');

    $this->form_validation->set_rules('text', 'Text', 'required');



    if ($this->form_validation->run() === FALSE)

    {

        $this->load->view('templates/header', $data);

        $this->load->view('news/create');

        $this->load->view('templates/footer');



    }

    else

    {

        $this->news_model->set_news();

        $this->load->view('news/success');

    }

}

Đoạn mã trên đặt trong tập tin application/controllers/News.php. Dòng đầu tiên sẽ tải thư viện form helperform validation . Sau đó, các qui tắc kiểm tra dữ liệu biểu mẫu sẽ được thiết lập. Phương thức set_rules() nạp vào 03 tham số ; tên trường nhập liệu, tên được dùng trong thông báo lỗi, và qui tắc kiểm tra. Trong ví dụ này 02 trường title và text được thiết lập là bắt buộc nhập (required) -> không được bỏ trống.

$this->form_validation->set_rules('title', 'Title', 'required');

CodeIgniter có 01 thư viện kiểm tra biểu mẫu cực kỳ mạnh mẽ. Bạn muốn hiểu sâu về thư viện này thì vào User Guide/Libraries/Form Validation

Tiếp theo dưới đây, bạn sẽ thấy 01 điều kiện dùng kiểm tra xem tính năng kiểm tra biểu mẫu đã chạy thành công hay chưa. Nếu chưa, biểu mẫu sẽ báo thông điệp lỗi , ngược lại khi biểu mẫu được gửi đi và qua hết các qui tắc kiểm tra, model sẽ được gọi. Sau cùng, 01 view sẽ được tải lên trình duyệt để hiển thị thông báo thành công. Ta sẽ tạo 01 view tại application/views/news/success.php và viết thông báo thành công vào đây.

<h2>Thêm 01 dòng tin thành công!!!</h2>

Model


Việc còn lại ta cần làm là viết 01 phương thức ghi dữ liệu vào cơ sở dữ liệu. Bạn sẽ sử dụng lớp Query Builder để chèn thông tin vào và dùng lớp thư viện input để lấy thông tin đã gửi đi. Mở tập tin application/models/News_model.php mà bạn đã tạo trước đây và thêm đoạn mã sau:

public function set_news()

{

    $this->load->helper('url');



    $slug = url_title($this->input->post('title'), 'dash', TRUE);



    $data = array(

        'title' => $this->input->post('title'),

        'slug' => $slug,

        'text' => $this->input->post('text')

    );



    return $this->db->insert('news', $data);

}

Phương thức mới thêm vào này sẽ đảm nhận việc thêm dòng tin mới vào cơ sở dữ liệu. Dòng mã thứ 03 chứa 01 hàm mới url_title() . Hàm này – được lấy từ URL helper – nó sẽ giản lược bớt chuỗi mà ta đưa vào, thay thế các khoảng trắng bằng dấu (-) và biến tất cả chữ thành dạng viết thường. Điều này giúp ta có được 01 slug đẹp để tạo liên kết đẹp.

Chúng ta tiếp tục với việc chuẩn bị bản tin sẽ được thêm vào , bên trong mảng $data . Mỗi phần tử tương ứng với mỗi cột trong bảng cơ sở dữ liệu được tạo trong bài trước. Bạn chú ý rằng có 01 phương thức mới xuất hiện ở đây là phương thức post() từ thư viện input class. Phương thức này đảm bảo rằng dữ liệu sẽ được “làm sạch”, bảo vệ bạn không bị tấn công bởi việc chèn mã độc.Lớp thư viện input này mặc định được tải sẵn không cần phải dùng phương thức load. Cuối cùng, ta chèn mảng $data vào cơ sở dữ liệu.

Định tuyến


Đến đây, nói nào ngay ta đã có thể truy cập tính năng tạo dòng tin mới bằng cách vào đường dẫn:

index.php/news/create

Trước khi bạn bắt đầu thêm dòng tin trong ứng dụng CodeIgniter bạn phải thêm 01 qui tắc vào tập tin config/routes.php . Qui tắc này giúp CodeIgniter thấy ‘create’ như là 01 phương thức thay vì là 01 phần đuôi liên kết (slug) của 01 dòng tin.

$route['news/create'] = 'news/create';

$route['news/(:any)'] = 'news/view/$1';

$route['news'] = 'news';

$route['(:any)'] = 'pages/view/$1';

$route['default_controller'] = 'pages/view';

Bây giờ bạn mở trình duyệt truy cập vào thư mục đã cài CodeIgniter và thêm phần đuôi index.php/news/create vào liên kết URL.

Nếu trình duyệt hiện lên 01 biểu mẫu thì xin chúc mừng bạn đã tạo thành công biểu mẫu nhập dòng tin mới trong ứng dụng CodeIgniter.

Trong bài này chúng ta đã tạo các tập tin sau:

application/views/news/create.php

application/views/news/success.php

Sửa các tập tin sau:

application/controllers/News.php

application/models/News_model.php

application/config/routes.php

Nếu vẫn chưa rõ các bạn xem thêm video clip sau:

XEM MỤC LỤC CÁC BÀI VIẾT VỀ CODEIGNITER


By #tiensim

Nguồn: CodeIgniter User Guide