CodeПеревірка форми Igniter 4 та надсилання форми з прикладом
⚡ Розумний підсумок
CodeIgniter 4 Form Validation перевіряє введені користувачем дані перед обробкою. Форми створюються за допомогою допоміжного модуля form, а вбудована бібліотека валідації встановлює правила, такі як required, numeric та is_unique, а потім відображає помилки та повторно заповнює закріплені поля, якщо валідація не вдається.
Форма в CodeЗапальник 4
Форми надають користувачам спосіб взаємодії з додатком та надсилання даних. Форму можна використовувати для зв’язку з нами, яку відвідувач веб-сайту може заповнити та надіслати нам інформацію. Отримана інформація зазвичай зберігається в базі даних або надсилається електронною поштою.
Структура форми HTML
Наступний код показує структуру типової форми HTML.
<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>
тут:
- … – це відкриваючі та закриваючі теги форми. Атрибути id та name вказують назву та ідентифікатор форми. Атрибут method вказує на HTTP-дієслово, яке буде використано, зазвичай POST.
- визначає елементи форми. Атрибут name – це ім'я змінної, що надсилається на сервер внутрішньої частини для обробки.
CodeПомічник форм Igniter
HTML легко зрозуміти та написати, але CodeЗапалювач робить речі ще простішими. CodeIgniter має вбудовані функції для створення HTML-форм. Розглянемо наступне. CodeКод форми Igniter, який використовує допоміжний метод для створення форми:
<?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(); ?>
тут:
- echo form_open('create_user.php', ['id' => 'frmUsers']); створює відкриваючий тег форми, встановлює метод на POST та встановлює дію URL до create_user.php.
- echo form_label('Ідентифікатор користувача', 'user_id'); створює мітку, яка зчитує ідентифікатор користувача для поля введення з назвою user_id.
- echo form_input(['name' => 'user_id']); створює поле введення тексту з назвою user_id.
- echo form_submit('btnSubmit', 'Створити користувача'); створює кнопку надсилання з міткою «Створити користувача».
- echo form_close(); закриває форму.
Як бачите, допоміжні методи форм спрощують створення форм за допомогою чистого PHP. Передаючи атрибути допоміжним методам форм, ми можемо налаштувати HTML-код, згенерований для форми. Наведений вище код генерує наступний HTML-код форми:
<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>
Найбільша перевага використання помічника форм полягає в тому, що він генерує семантично правильний код, який відповідає стандартам HTML. Ви можете звернутися до офіційного CodeДокументація до запальника для отримання додаткової інформації: https://codeigniter.com/user_guide/helpers/form_helper.html.
CodeПриклад форми запалювача
Після ознайомлення з основами CodeІгнітор, давайте повернемося до нашого навчального проєкту, над яким ми працювали протягом усього цього... CodeСерія навчальних посібників із запалюванняПідсумовуючи, навчальний проект створює додаток для керування контактами, який зберігає дані в базі даних.
Створити контакт
У попередньому посібнику ми створили маршрути для нашої програми та прості представлення. Відкрийте application/views/contacts/create.php та змініть код для create.php наступним чином:
<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>
Примітка: У наведеному вище коді для створення форми використовується звичайний HTML. Тепер подивимося, як наша форма виглядає у веббраузері. Завантажте наступний код URL у ваш веббраузер: http://localhost:3000/contacts/createЯкщо ви створювали навчальний проєкт, ви повинні побачити наступне:
Перевірка форми в CodeЗапалювач
Перевірка відіграє дуже важливу роль під час обробки даних з форм. Припустимо, що користувач реєструється на веб-сайті; ми хочемо переконатися, що він заповнив необхідні дані та дійсну адресу електронної пошти. Якщо ми працюємо зі значеннями дат, ми хочемо переконатися, що діапазони дат є дійсними, тому ми не приймемо дату з 32 днями в місяці.
Валідація вирішує ці проблеми. CodeПеревірка Igniter виконується за двома напрямками під час роботи з веб-додатками.
Перевірка на стороні клієнта виконується у веб-браузері, зазвичай за допомогою HTML та JavaСкрипт. Це покращує продуктивність, оскільки все робиться на клієнті, тому немає потреби надсилати дані на сервер. Недоліком є те, що користувач має над цим контроль; якщо ви покладаєтеся на JavaСценарій для перевірки та відключення користувача JavaСкрипт, ваша перевірка не пройде.
Серверна перевірка виконується на сервері. Недоліком є те, що користувач повинен надсилати дані на сервер і чекати на відповідь, що використовує мережеві ресурси та може знизити продуктивність. Основною перевагою є кращий контроль і гарантія того, що ваші правила перевірки працюють, навіть якщо користувач їх вимкне. JavaСценарій.
Кращою стратегією є використання клієнтської перевірки як основної стратегії, а серверної перевірки як резервного механізму.
Додавання правил перевірки форми
CodeIgniter має вбудовану бібліотеку валідації. Бібліотека завантажується за допомогою наступного рядка:
$this->load->library('form_validation');
Команда CodeБібліотека перевірки форм Igniter може виконувати деякі з наступних дій:
- Перевіряти обов'язкові поля. Перевіряє надіслані значення та повертає помилку, якщо поле, позначене як обов'язкове, не має значення.
- Перевірка типу даних – деякі поля можуть вимагати лише числових значень. Якщо виявлено нечислове значення, бібліотека повертає помилку та перериває надсилання форми.
- Перевірка довжини – деякі поля вимагають певної мінімальної або максимальної кількості символів. Бібліотека перевірки обробляє такі випадки.
- Очищення даних – бібліотека може видаляти шкідливий код із надісланих даних з міркувань безпеки. Якщо надіслані значення мають активні JavaСкрипт або код SQL-ін'єкції, бібліотека видаляє шкідливий код та робить його непридатним для використання.
- Перевірка унікальних полів бази даних – припустимо, у вас є форма реєстрації, яка використовує адресу електронної пошти, і ви хочете переконатися, що ця адреса унікальна. Бібліотека спрощує перевірку надісланих даних у таблиці та полі бази даних.
Правила перевірки встановлюються у такому форматі:
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
тут:
- «field» вказує назву поля форми, яке має перевірити бібліотека.
- «Поле, зчитуване людиною» визначає формат поля, який відображається користувачеві у разі виникнення помилки.
- «правило» визначає правило перевірки, яке потрібно застосувати, наприклад, обов'язкове, числове або мінімальну довжину.
- ['custom message'] необов'язковий і може встановлювати власне повідомлення перевірки, яке відображається в разі невдалого виконання правила.
Нижче наведено CodeПриклад запальника для перевірки номера контакту:
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
тут:
- Наведений вище код перевіряє, чи було введено поле contact_number. Якщо воно не встановлено, повертається помилка, яка повідомляє, що поле Contact Number обов'язкове для заповнення.
Щоб виконати перевірку відповідності встановленим правилам, ми використовуємо таку функцію бібліотеки валідації:
$this->form_validation->run()
Якщо наведений вище код повертає значення «false», то одне або декілька встановлених правил не виконали жодних дій. Якщо ж код повертає значення «true», то всі правила перевірки пройшли перевірку, і ви можете продовжити.
Розглянемо більше прикладів правил перевірки. Припустимо, що вам потрібно перевірити кілька полів, таких як ім'я контакту, номер телефону та адреса електронної пошти. Ви можете використовувати наступний код:
$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);
тут:
- У наведеному вище прикладі ми надаємо масив полів із правилами для функції set_rules бібліотеки. Це спрощує перевірку кількох полів.
Унікальна перевірка
Якщо ми хочемо перевірити контактний номер, щоб переконатися, що ми не зберігаємо той самий номер двічі, ми можемо використовувати таке правило:
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
тут:
- | використовується для об'єднання кількох правил.
- is_unique[contacts.contact_number] перевіряє, чи унікальне значення для contact_number порівняно зі значеннями поля contact_number у таблиці contacts бази даних.
Відображення повідомлень про помилки перевірки форми
Якщо під час обробки форми виникла помилка, ви можете використати наступний код для відображення помилок перевірки:
<?php echo validation_errors(); ?>
тут:
- Наведена вище функція повертає всі помилки, що виникли.
Заповнення надісланих даних форми: закріплені форми
Деякі форми мають багато полів, і якщо виникає помилка, потрібно переконатися, що правильно додані дані збережено. Бібліотека перевірки має механізми для досягнення цієї мети, використовуючи наступний код:
<?php echo set_value('field_name'); ?>
тут:
- Наведений вище код відображає дані, які ввів користувач.
Щоб отримати повний довідник щодо методів, доступних у бібліотеці валідації, зверніться до документації API в офіційному CodeІнструкція користувача запальника: https://codeigniter.com/userguide3/libraries/form_validation.html.
CodeПриклад перевірки форми запалювача
Протягом цієї серії навчальних посібників ми додавали код до нашого навчального проєкту – програми для керування контактами. У цьому розділі ми завантажимо бібліотеку валідації та розглянемо, як її практично використати на реальному прикладі. Змініть код маршрутів наступним чином, щоб включити метод 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';
Тепер завантажимо бібліотеку перевірки форм у контролер контактів та встановимо деякі правила перевірки. Змініть код, як показано нижче:
<?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'); } }
тут:
- $rules = array(…) визначає правила перевірки.
- $this->form_validation->set_rules($rules); встановлює правила перевірки.
- якщо ($this->form_validation->run() == FALSE) {…} запускає правила перевірки, і якщо вони не виконуються, форма відображається повторно з помилками перевірки. Якщо перевірка проходить успішно, ми перенаправляємо на сторінку списку контактів. За звичайних обставин ми б записували дані в базу даних, що ми робимо в наступному посібнику про базами даних.
Змініть представлення створення у файлі application/views/contacts/create.php, як показано нижче:
<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>
тут:
- відображає помилки, які виникають, якщо такі є, під час процесу перевірки.
- встановлює значення, яке було введено раніше, якщо таке було.
Завантажте наступне URL у вашому веббраузері, а потім натисніть «Створити контакт», не вводячи жодних значень:



