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
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
Ở đâ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 helper và form 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.
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
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.
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:
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.
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.
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.
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 #drM
Nguồn: CodeIgniter User Guide
Không có nhận xét nào:
Đăng nhận xét