CodeПеревірка форми Igniter 4 та надсилання форми з прикладом

⚡ Розумний підсумок

CodeIgniter 4 Form Validation перевіряє введені користувачем дані перед обробкою. Форми створюються за допомогою допоміжного модуля form, а вбудована бібліотека валідації встановлює правила, такі як required, numeric та is_unique, а потім відображає помилки та повторно заповнює закріплені поля, якщо валідація не вдається.

  • ???? Форми: Форми дозволяють користувачам надсилати дані, часто збережені в базі даних або надсилані електронною поштою.
  • 🧰 Помічник форми: Такі функції, як form_open, form_input та form_submit, генерують HTML-код, що відповідає стандартам.
  • 🛡️ Два фронти: Перевірка на стороні клієнта відбувається швидко; перевірка на стороні сервера є безпечною та її неможливо обійти.
  • 📏 Правила: set_rules визначає обов'язкові правила, тип даних, довжину, санітарну очистку та перевірки унікальності.
  • 🔁 Пробіг: Метод run() повертає false, якщо якесь правило не виконується, і true, якщо всі правила виконуються.
  • ⚠️ Помилки: validation_errors() виводить повідомлення для полів, які не пройшли перевірку.
  • 📌 Липкі форми: set_value() повторно заповнює правильно введені поля після невдалого відправлення.

CodeПеревірка форми запалювання

Форма в 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Створення контактної форми Igniter

Перевірка форми в 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 у вашому веббраузері, а потім натисніть «Створити контакт», не вводячи жодних значень:

CodeВідображаються помилки перевірки форми запалювача

Поширені запитання

Перевірку на стороні клієнта можна обійти, вимкнувши JavaСкрипт або надсилання прямого запиту. Серверна перевірка виконується там, де користувач не має контролю, тому це надійна остання лінія захисту.

Закріплена форма повторно заповнює поля, які користувач вже заповнив після невдалого відправлення, за допомогою set_value(). Це позбавляє користувача необхідності повторного заповнення.ping дійсні дані, коли помилку спричинило лише одне поле.

is_unique[table.field] перевіряє надіслане значення зі стовпцем у базі даних і не виконується, якщо такий стовпець вже існує. Він використовується для полів, таких як електронна пошта або ім'я користувача, які не повинні дублюватися.

Так. Зі списку полів штучний інтелект може згенерувати масив set_rules з правилами обов'язкової адреси, валідної електронної пошти та довжини, а також користувацькими повідомленнями. RevПерегляньте правила відповідно до вашої бізнес-логіки та схеми бази даних.

Допоміжний засіб для роботи з формами генерує HTML-код, що відповідає стандартам, екранує атрибути та забезпечує узгодженість форм. Він також інтегрується з допоміжними засобами валідації, такими як set_value, зменшуючи повторювану розмітку у представленнях.

Підсумуйте цей пост за допомогою: