CodeKiểm tra tính hợp lệ và gửi biểu mẫu trong Igniter 4 kèm ví dụ.
⚡ Tóm tắt thông minh
CodeChức năng xác thực biểu mẫu của Igniter 4 kiểm tra dữ liệu người dùng nhập vào trước khi xử lý. Biểu mẫu được xây dựng bằng trình trợ giúp biểu mẫu, và thư viện xác thực tích hợp sẵn sẽ thiết lập các quy tắc như bắt buộc, số và duy nhất, sau đó hiển thị lỗi và điền lại các trường cố định khi quá trình xác thực thất bại.

Biểu mẫu trong CodeBộ đánh lửa 4
Biểu mẫu cung cấp một cách để người dùng tương tác với ứng dụng và gửi dữ liệu. Biểu mẫu có thể được sử dụng làm biểu mẫu liên hệ mà khách truy cập trang web có thể điền vào và gửi thông tin cho chúng tôi. Thông tin nhận được thường được lưu trữ trong cơ sở dữ liệu hoặc gửi qua email.
Cấu trúc biểu mẫu HTML
Đoạn mã sau đây cho thấy cấu trúc của một biểu mẫu HTML thông thường.
<form id="frmUsers" name="frmUsers" method="POST" action="create_user.php"> <input type="text" id="user_id" name="user_id"> <input type="password" id="password" name="password"> <input type="submit" value="Submit"> </form>
Đây:
- … là các thẻ mở và đóng của biểu mẫu. Thuộc tính `id` và `name` chỉ định tên và ID của biểu mẫu. Thuộc tính `method` chỉ định động từ HTTP sẽ được sử dụng, thường là `POST`.
- Thuộc tính `name` chỉ định các phần tử của biểu mẫu. Thuộc tính `name` là tên biến được gửi đến máy chủ phụ trợ để xử lý.
CodeCông cụ hỗ trợ biểu mẫu Igniter
HTML dễ hiểu và dễ viết, nhưng CodeIgnite Điều này làm cho mọi thứ trở nên đơn giản hơn nữa. CodeIgniter có các hàm tích hợp sẵn để tạo biểu mẫu HTML. Chúng ta hãy xem xét ví dụ sau: CodeMã Igniter sử dụng trình trợ giúp tạo biểu mẫu:
<?php echo form_open('create_user.php', ['id' => 'frmUsers']); echo form_label('User Id', 'user_id'); echo form_input(['name' => 'user_id']); echo form_label('Password', 'password'); echo form_input(['type' => 'password', 'name' => 'password']); echo form_submit('btnSubmit', 'Create User'); echo form_close(); ?>
Đây:
- Lệnh `echo form_open('create_user.php', ['id' => 'frmUsers']);` tạo thẻ mở của biểu mẫu, đặt phương thức là POST và đặt hành động. URL đến create_user.php.
- Lệnh `echo form_label('User Id', 'user_id');` tạo một nhãn có nội dung "User Id" cho trường nhập liệu có tên `user_id`.
- echo form_input(['name' => 'user_id']); tạo một trường nhập văn bản có tên là user_id.
- echo form_submit('btnSubmit', 'Create User'); tạo một nút gửi với nhãn "Tạo người dùng".
- echo form_close(); đóng biểu mẫu.
Như bạn thấy, các hàm hỗ trợ tạo biểu mẫu giúp việc tạo biểu mẫu bằng PHP thuần túy trở nên dễ dàng. Bằng cách truyền các thuộc tính vào các phương thức của hàm hỗ trợ tạo biểu mẫu, chúng ta có thể tùy chỉnh mã HTML được tạo cho biểu mẫu. Đoạn mã trên tạo ra mã HTML biểu mẫu sau:
<form action="http://localhost:3000/index.php/create_user.php" id="frmUsers" method="post" accept-charset="utf-8"> <label for="user_id">User Id</label> <input type="text" name="user_id" value=""/> <label for="password">Password</label> <input type="password" name="password" value=""/> <input type="submit" name="btnSubmit" value="Create User"/> </form>
Ưu điểm lớn nhất của việc sử dụng trình trợ giúp biểu mẫu là nó tạo ra mã đúng ngữ nghĩa và tuân thủ các tiêu chuẩn HTML. Bạn có thể tham khảo tài liệu chính thức. CodeXem tài liệu Igniter để biết thêm chi tiết: https://codeigniter.com/user_guide/helpers/form_helper.html.
CodeVí dụ về biểu mẫu Igniter
Sau khi nắm vững những kiến thức cơ bản về CodeIgniter, chúng ta hãy quay lại với dự án hướng dẫn mà chúng ta đã thực hiện trong suốt thời gian qua. CodeChuỗi bài hướng dẫn IgniterTóm lại, dự án hướng dẫn này xây dựng một ứng dụng quản lý danh bạ lưu trữ thông tin chi tiết vào cơ sở dữ liệu.
Tạo ra liên lạc
Trong bài hướng dẫn trước, chúng ta đã tạo các tuyến đường cho ứng dụng và các giao diện đơn giản. Hãy mở tệp application/views/contacts/create.php và chỉnh sửa mã cho tệp create.php như sau:
<div class="column">
<h2 class="title">Create Contact</h2>
<form action="<?= base_url('contacts/store') ?>" method="POST">
<div class="field">
<label class="label">Contact Name</label>
<div class="control">
<input id="name" name="name" class="input" type="text" placeholder="Type the contact name">
</div>
</div>
<div class="field">
<label class="label">Contact Number</label>
<div class="control">
<input id="name" name="name" class="input" type="text" placeholder="Type the contact number">
</div>
</div>
<div class="field">
<label class="label">Email Address</label>
<div class="control">
<input id="email" name="email" class="input" type="email" placeholder="Type the email address">
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button class="button is-link">Save Contact</button>
</div>
</div>
</form>
</div>
Lưu ý: Đoạn mã trên sử dụng HTML thuần túy để tạo biểu mẫu. Bây giờ chúng ta hãy xem biểu mẫu của chúng ta trông như thế nào trong trình duyệt web. Tải đoạn mã sau: URL vào trình duyệt web của bạn: http://localhost:3000/contacts/createNếu bạn đang thực hiện dự án hướng dẫn, bạn sẽ thấy như sau:
Xác thực biểu mẫu trong CodeIgnite
Việc xác thực đóng vai trò rất quan trọng khi xử lý dữ liệu từ các biểu mẫu. Giả sử người dùng đang đăng ký trên một trang web; chúng ta muốn đảm bảo họ điền đầy đủ thông tin cần thiết và địa chỉ email hợp lệ. Nếu chúng ta đang làm việc với các giá trị ngày tháng, chúng ta muốn đảm bảo phạm vi ngày tháng hợp lệ, vì vậy chúng ta sẽ không chấp nhận ngày có 32 ngày trong một tháng.
Việc xác thực giải quyết những vấn đề này. CodeQuá trình xác thực Igniter được thực hiện trên hai khía cạnh khi làm việc với các ứng dụng web.
Việc xác thực phía máy khách được thực hiện trong trình duyệt web, thường sử dụng HTML và... JavaScript. Nó cải thiện hiệu suất vì mọi thứ được thực hiện ở phía máy khách, do đó không cần phải gửi dữ liệu lên máy chủ. Nhược điểm là người dùng có quyền kiểm soát nó; nếu bạn dựa vào... JavaScript để xác thực và người dùng vô hiệu hóa JavaScript, quá trình xác thực của bạn sẽ thất bại.
Xác thực phía máy chủ được thực hiện trên máy chủ. Nhược điểm là người dùng phải gửi dữ liệu đến máy chủ và chờ phản hồi, điều này tiêu tốn tài nguyên mạng và có thể làm giảm hiệu suất. Ưu điểm chính là khả năng kiểm soát tốt hơn và đảm bảo rằng các quy tắc xác thực của bạn vẫn hoạt động ngay cả khi người dùng vô hiệu hóa chúng. JavaKịch bản.
Một chiến lược tốt hơn là sử dụng xác thực phía máy khách làm chiến lược chính và xác thực phía máy chủ làm cơ chế dự phòng.
Thêm quy tắc xác thực biểu mẫu
CodeIgniter có thư viện kiểm tra tính hợp lệ được tích hợp sẵn. Thư viện này được tải bằng dòng lệnh sau:
$this->load->library('form_validation');
CodeThư viện xác thực biểu mẫu Igniter có thể thực hiện một số thao tác sau:
- Kiểm tra các trường bắt buộc. Chương trình sẽ kiểm tra các giá trị đã nhập và trả về lỗi nếu một trường được đánh dấu là bắt buộc nhưng không có giá trị.
- Kiểm tra kiểu dữ liệu – một số trường chỉ yêu cầu giá trị số. Nếu phát hiện giá trị không phải là số, thư viện sẽ trả về lỗi và hủy bỏ việc gửi biểu mẫu.
- Kiểm tra độ dài – một số trường yêu cầu số ký tự tối thiểu hoặc tối đa nhất định. Thư viện kiểm tra tính hợp lệ sẽ xử lý các trường hợp này.
- Làm sạch dữ liệu – thư viện có thể loại bỏ mã độc hại khỏi dữ liệu được gửi để đảm bảo an toàn. Nếu các giá trị được gửi có mã độc đang hoạt động JavaĐối với mã tấn công chèn script hoặc SQL, thư viện này sẽ loại bỏ mã độc hại và vô hiệu hóa nó.
- Kiểm tra tính duy nhất của các trường trong cơ sở dữ liệu – giả sử bạn có một biểu mẫu đăng ký sử dụng địa chỉ email và bạn muốn đảm bảo địa chỉ đó là duy nhất. Thư viện này giúp bạn dễ dàng kiểm tra dữ liệu đã gửi so với bảng và trường trong cơ sở dữ liệu.
Các quy tắc xác thực được thiết lập theo định dạng sau:
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
Đây:
- 'field' chỉ định tên trường biểu mẫu cần được thư viện xác thực.
- 'Trường dễ đọc' chỉ định định dạng dễ đọc của trường, được hiển thị lại cho người dùng khi xảy ra lỗi.
- 'rule' chỉ định quy tắc xác thực cần áp dụng, chẳng hạn như bắt buộc, số hoặc độ dài tối thiểu.
- ['thông báo tùy chỉnh'] là tùy chọn và có thể thiết lập một thông báo xác thực tùy chỉnh được hiển thị khi quy tắc không thành công.
Sau đây là một CodeVí dụ về cách sử dụng Igniter để xác thực số điện thoại liên lạc:
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
Đây:
- Đoạn mã trên kiểm tra xem trường contact_number đã được nhập hay chưa. Nếu chưa được nhập, nó sẽ trả về lỗi cho biết trường Số liên lạc là bắt buộc.
Để chạy quá trình xác thực dựa trên các quy tắc đã thiết lập, chúng ta sử dụng hàm sau của thư viện xác thực:
$this->form_validation->run()
Nếu đoạn mã trên trả về false, điều đó có nghĩa là một hoặc nhiều quy tắc đã thiết lập không thành công. Nếu nó trả về true, điều đó có nghĩa là tất cả các quy tắc xác thực đã thành công và bạn có thể tiếp tục thực hiện các bước tiếp theo.
Hãy cùng xem thêm một vài ví dụ về quy tắc xác thực. Giả sử bạn muốn xác thực một số trường, chẳng hạn như tên liên hệ, số điện thoại và địa chỉ email. Bạn có thể sử dụng đoạn mã sau:
$rules = array( array( 'field' => 'contact_name', 'label' => 'Contact Name', 'rules' => 'required' ), array( 'field' => 'contact_number', 'label' => 'Contact Number', 'rules' => 'required', 'errors' => array( 'required' => 'You must provide a %s.', ), ), array( 'field' => 'email_address', 'label' => 'Email Address', 'rules' => 'required' ) ); $this->form_validation->set_rules($rules);
Đây:
- Trong ví dụ trên, chúng ta cung cấp một mảng các trường với các quy tắc cho hàm set_rules của thư viện. Điều này giúp việc xác thực nhiều trường trở nên dễ dàng hơn.
Xác thực duy nhất
Nếu muốn xác thực số điện thoại liên lạc để đảm bảo không lưu cùng một số hai lần, ta có thể sử dụng quy tắc sau:
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
Đây:
- | được sử dụng để kết nối nhiều quy tắc với nhau.
- is_unique[contacts.contact_number] kiểm tra xem giá trị của contact_number có phải là duy nhất so với các giá trị trường contact_number trong bảng cơ sở dữ liệu contact hay không.
Hiển thị thông báo lỗi xác thực biểu mẫu
Nếu xảy ra lỗi trong quá trình xử lý biểu mẫu, bạn có thể sử dụng đoạn mã sau để hiển thị các lỗi xác thực:
<?php echo validation_errors(); ?>
Đây:
- Hàm trên trả về tất cả các lỗi đã xảy ra.
Điền dữ liệu biểu mẫu đã gửi: Biểu mẫu cố định
Một số biểu mẫu có nhiều trường, và nếu xảy ra lỗi, bạn cần đảm bảo dữ liệu đã được thêm vào chính xác vẫn được giữ nguyên. Thư viện kiểm tra tính hợp lệ có các cơ chế để thực hiện điều đó, sử dụng đoạn mã sau:
<?php echo set_value('field_name'); ?>
Đây:
- Đoạn mã trên hiển thị dữ liệu mà người dùng đã nhập.
Để có hướng dẫn tham khảo đầy đủ về các phương thức có sẵn trong thư viện xác thực, hãy tham khảo tài liệu API trong tài liệu chính thức. CodeHướng dẫn sử dụng Igniter: https://codeigniter.com/userguide3/libraries/form_validation.html.
CodeVí dụ về xác thực biểu mẫu Igniter
Trong suốt loạt bài hướng dẫn này, chúng ta đã thêm mã vào dự án hướng dẫn của mình, một ứng dụng quản lý danh bạ. Trong phần này, chúng ta sẽ tải thư viện xác thực và xem cách sử dụng nó trong một ví dụ thực tế. Sửa đổi mã định tuyến như sau để bao gồm phương thức store:
$route['default_controller'] = 'welcome'; $route['contacts'] = 'contacts'; $route['create'] = 'contacts/create'; $route['store'] = 'contacts/store'; $route['edit/:id'] = 'contacts/edit'; $route['update/:id'] = 'contacts/update'; $route['delete/:id'] = 'contacts/delete'; $route['users'] = 'welcome/users';
Bây giờ chúng ta hãy tải thư viện kiểm tra tính hợp lệ của biểu mẫu vào bộ điều khiển Danh bạ và thiết lập một số quy tắc kiểm tra tính hợp lệ. Chỉnh sửa mã như hình bên dưới:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Contacts extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper('url', 'form'); $this->load->library('form_validation'); } public function index() { $this->load->view('header'); $this->load->view('contacts/index'); $this->load->view('footer'); } public function create() { $this->load->view('header'); $this->load->view('contacts/create'); $this->load->view('footer'); } public function store() { $rules = array( array( 'field' => 'contact_name', 'label' => 'Contact Name', 'rules' => 'required' ), array( 'field' => 'contact_number', 'label' => 'Contact Number', 'rules' => 'required', 'errors' => array( 'required' => 'You must provide a %s.', ), ), array( 'field' => 'email_address', 'label' => 'Email Address', 'rules' => 'required' ) ); $this->form_validation->set_rules($rules); if ($this->form_validation->run() == FALSE) { $this->load->view('header'); $this->load->view('contacts/create'); $this->load->view('footer'); } else { redirect(base_url('contacts')); } } public function edit($id) { $this->load->view('header'); $this->load->view('contacts/edit'); $this->load->view('footer'); } public function update($id) { $this->load->view('header'); $this->load->view('contacts/update'); $this->load->view('footer'); } public function delete($id) { $this->load->view('header'); $this->load->view('contacts/delete'); $this->load->view('footer'); } }
Đây:
- $rules = array(…) định nghĩa các quy tắc xác thực.
- $this->form_validation->set_rules($rules); thiết lập các quy tắc xác thực.
- if ($this->form_validation->run() == FALSE) {…} sẽ chạy các quy tắc xác thực, và nếu chúng thất bại, biểu mẫu sẽ được hiển thị lại với các lỗi xác thực. Nếu quá trình xác thực thành công, chúng ta sẽ chuyển hướng đến trang danh sách liên hệ. Trong trường hợp bình thường, chúng ta sẽ ghi dữ liệu vào cơ sở dữ liệu, điều mà chúng ta sẽ thực hiện trong hướng dẫn tiếp theo về cơ sở dữ liệu.
Hãy chỉnh sửa phần tạo trong tệp application/views/contacts/create.php như hình bên dưới:
<div class="column"> <h2 class="title">Create Contact</h2> <div class="notification is-danger"> <?php echo validation_errors(); ?> </div> <form action="<?= base_url('contacts/store') ?>" method="POST"> <div class="field"> <label class="label">Contact Name</label> <div class="control"> <input id="contact_name" name="contact_name" class="input" type="text" value="<?php echo set_value('contact_name'); ?>" placeholder="Type the contact name"> </div> </div> <div class="field"> <label class="label">Contact Number</label> <div class="control"> <input id="contact_number" name="contact_number" class="input" type="text" value="<?php echo set_value('contact_number'); ?>" placeholder="Type the contact number"> </div> </div> <div class="field"> <label class="label">Email Address</label> <div class="control"> <input id="email_address" name="email_address" class="input" type="email" value="<?php echo set_value('email_address'); ?>" placeholder="Type the email address"> </div> </div> <div class="field is-grouped"> <div class="control"> <button class="button is-link">Save Contact</button> </div> </div> </form> </div>
Đây:
- Hiển thị các lỗi xảy ra, nếu có, trong quá trình xác thực.
- Đặt lại giá trị đã được nhập trước đó, nếu có.
Tải các mục sau URL Mở trình duyệt web của bạn, sau đó nhấp vào Tạo liên hệ mà không cần nhập bất kỳ giá trị nào:


