Проверка формы CodeIgniter с помощью примера отправки формы

Форма в CodeIgniter

Формы предоставляют пользователям возможность взаимодействовать с приложением и отправлять данные. Его можно использовать для формы обратной связи, которую посетитель веб-сайта может заполнить и отправить нам информацию. Полученная информация обычно сохраняется в базе данных или отправляется по электронной почте.

Структура 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 указывают имя и идентификатор формы. Атрибут метода указывает используемый HTTP-команд. Обычно это указывается глаголом POST.
  • Определяет элементы формы. Атрибут name — это имя переменной, которое передается на внутренний сервер для обработки.

Помощник по формам CodeIgniter

HTML великолепен, его легко понять и написать, но CodeIgniter делает все еще проще. CodeIgniter имеет встроенные функции для создания HTML-форм.

Давайте рассмотрим следующий код отправки формы CodeIgniter, который использует помощник формы для создания формы.

 <?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 Verb и устанавливает URL-адрес действия create_user.php
  • echo form_label('Идентификатор пользователя', 'user_id'); создает метку, которая читает идентификатор пользователя для поля ввода с именем user_id.
  • echo form_input(['name' => 'user_id']); создает поле ввода текстового типа с именем user_id
  • echo form_submit('btnSubmit', 'Создать пользователя'); создает кнопку отправки с меткой «Создать пользователя»
  • эхо form_close(); закрывает форму

Как вы можете видеть из приведенного выше кода CodeIgniter, помощники форм упрощают создание форм с использованием чистого 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.

Вы можете обратиться к официальной документации CodeIgniter для получения более подробной информации.

https://codeigniter.com/user_guide/helpers/form_helper.html

Пример формы CodeIgniter

Изучив основы CodeIgniter, давайте вернемся к нашему учебному проекту, над которым мы работали на протяжении всего этого урока. Серия руководств по CodeIgniter. Таким образом, в рамках учебного проекта создается приложение для управления контактами, которое будет хранить данные в базе данных.

Создать контакт

в предыдущем уроке мы создали маршруты для наших приложений и простых представлений. Откройте приложение/представления/контакты/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

Если вы создавали учебный проект, вы должны увидеть следующее:

Форма CodeIgniter

Проверка формы в CodeIgniter

Проверка играет очень важную роль при обработке данных из форм. Допустим, пользователь регистрируется на веб-сайте; мы хотим убедиться, что они заполнили необходимые данные и адрес электронной почты. Нам необходимо убедиться, что введенный адрес электронной почты действителен. Если мы работаем со значениями дат, мы хотим убедиться, что диапазоны дат действительны. Нам не пришлось бы принимать дату, в которой 32 дня в месяце и т. д.

Валидация решает вышеуказанные проблемы. Проверка CodeIgniter выполняется на двух (2) фронтах при работе с веб-приложениями.

Проверка на стороне клиента выполняется со стороны веб-браузера. Обычно это предполагает использование HTML и JavaСкрипт. Проверка на стороне клиента повышает производительность, поскольку все делается на стороне клиента. Таким образом, нет необходимости отправлять данные на сервер. Недостатком проверки на стороне клиента является то, что пользователь имеет над ней контроль. Если вы полагаетесь на JavaСкрипт для проверки и отключения пользователем JavaСкрипт в браузере, то ваша проверка не будет пройдена.

Проверка на стороне сервера выполняется на стороне сервера. Недостатком этой проверки является то, что пользователю приходится отправлять данные на сервер для обработки и ждать ответа. Это расходует сетевые ресурсы и может снизить производительность. Основным преимуществом проверки на стороне сервера является то, что у вас больше контроля и уверенность в том, что ваши правила проверки работают, даже если пользователь отключит их. JavaСкрипт в браузере.

Лучшая стратегия — использовать клиентскую сторону в качестве основной стратегии проверки, а серверную — в качестве резервного механизма.

Добавление правил проверки формы

CodeIgniter имеет встроенную библиотеку проверки. Библиотека загружается с помощью следующей строки

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

Библиотеку проверки формы CodeIgniter можно использовать для выполнения некоторых из следующих действий.

  • Проверьте наличие обязательных полей. При этом проверяются отправленные значения и возвращается ошибка, если поле, помеченное как обязательное, не имеет значения.
  • Проверка типа данных — для некоторых полей могут потребоваться только числовые значения. Если обнаружено нечисловое значение, библиотека возвращает ошибку. Выполнение отправки формы также прерывается.
  • Проверка длины. Некоторые типы данных требуют, чтобы поля имели определенное минимальное или максимальное количество символов. В таких случаях пригодится библиотека проверки.
  • Очистка данных — библиотека проверки также имеет возможности, позволяющие удалять вредоносный код из отправленных данных по соображениям безопасности. Если, например, отправленные значения имеют активный JavaЕсли в них есть скрипт или код SQL-инъекции, библиотека проверки удаляет вредоносный код и делает его бесполезным.
  • Проверьте уникальные поля базы данных. Предположим, у вас есть форма, в которой пользователи регистрируются, используя адрес электронной почты. Вы хотите убедиться, что адрес электронной почты уникален. Библиотека позволяет легко сверять отправленные данные с таблицей и полем базы данных. Это позволяет вам узнать, что значение уже занято.

Правила проверки задаются в следующем формате

$this->form_validation->set_rules('field','human readable field','rule',['custom message']);

ВОТ,

  • 'field' указывает имя поля формы, которое должно быть проверено библиотекой.
  • «Читаемое поле» определяет удобочитаемый формат проверяемого поля. Это отображается пользователю при возникновении ошибки.
  • «правило» указывает применяемое правило проверки, например обязательное, числовое, проверка минимальной длины… и т. д.
  • ['custom message'] является необязательным и может использоваться для установки пользовательского сообщения проверки, которое должно отображаться в случае сбоя правила проверки.

Ниже приведена форма отправки в примере CodeIgniter для проверки имени контакта.

$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');

ВОТ,

  • Приведенный выше код проверяет, введено ли поле 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);

ВОТ,

  • В приведенном выше примере проверки электронной почты в CodeIgniter мы предоставляем массив полей с правилами для функции библиотеки 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 в таблице контактов базы данных.

Отображение сообщений об ошибках проверки формы

Если во время обработки формы возникает ошибка, вы можете использовать следующий код для отображения возникших ошибок проверки.

<?php echo validation_errors(); ?>

ВОТ,

  • Вышеуказанная функция возвращает все возникшие ошибки.

Заполнение отправленных данных формы: прикрепленные формы

В некоторых формах много полей, и если произошла ошибка, то нужно убедиться, что правильно добавленные данные сохранились. В библиотеке проверки есть механизмы для этого. Мы делаем это, используя следующий код.

<?php echo set_value('field_name'); ?>

ВОТ,

  • Приведенный выше код отображает введенные пользователем данные.

Полное справочное руководство по методам, доступным в библиотеке проверки, вы можете найти в документации API из официального руководства пользователя CodeIgniter.

https://codeigniter.com/userguide3/libraries/form_validation.html

Пример проверки формы CodeIgniter

На протяжении всей этой серии руководств мы добавляли больше кода в наш учебный проект, который представляет собой приложение для управления контактами. В этом разделе мы загрузим библиотеку проверки и посмотрим, как мы можем применить ее на практике на примере реального приложения.

Измените код маршрутов следующим образом, чтобы включить метод магазина.

$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';
$routes['users'] = 'welcome/users';

Давайте теперь загрузим библиотеку проверки формы в контроллер контактов и установим некоторые правила проверки.

Измените код, как показано в приведенной ниже форме проверки формы в примере CodeIgniter:

<?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); устанавливает правила проверки
  • if ($this->form_validation->run() == FALSE) {…} запускает правила проверки, и если они терпят неудачу, форма отображается повторно с ошибками проверки. Если проверка пройдена, мы просто перенаправляем на страницу списка контактов. В обычных обстоятельствах мы бы записывали данные в базу данных. Мы сделаем это в следующих уроках, когда будем рассматривать базы данных.

Измените представление создания в коде application/contacts/create.php, как показано в приведенном ниже примере проверки формы CodeIgniter:

<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-адрес в свой веб-браузер. Затем нажмите «Создать контакт», не вводя никаких значений.

Проверка формы CodeIgniter

Резюме

  • Формы предоставляют пользователям возможность взаимодействовать с приложением и отправлять данные.
  • HTML великолепен, его легко понять и написать, но CodeIgniter делает все еще проще. CodeIgniter имеет встроенные функции для создания HTML-форм.
  • Проверка играет очень важную роль при обработке данных из форм.
  • В этом уроке мы рассмотрели основные стратегии проверки, их плюсы и минусы. Мы также узнали, как устанавливать правила проверки и выводить сообщения об ошибках с помощью встроенной библиотеки проверки CodeIgniter. Мы завершили урок применением полученных знаний на практике.