Проверка на формуляр на 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 указват името и id на формуляра. Атрибутът на метода указва HTTP глагола, който да се използва. Това обикновено се определя от глагола POST
  • Указва елементите на формата. Атрибутът на име е името на променливата, която се изпраща на бекенд сървъра за обработка.

Помощник за формуляри на 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 за полето за въвеждане с името 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>

Най-големите предимства на използването на form helper е, че той генерира семантично правилен код, който се придържа към зададените HTML стандарти.

Можете да се обърнете към официалната документация на CodeIgniter за повече подробности

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

Пример за формуляр на CodeIgniter

След като разгледахме основите на CodeIgniter, нека се върнем към нашия проект с урок, върху който работихме през цялото това време Поредица от уроци на CodeIgniter. В обобщение, проектът за обучение изгражда приложение за управление на контакти, което ще съхранява подробностите в базата данни.

Създайте контакт

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

Ако сте създавали проекта за урок, тогава трябва да можете да видите следното

Форма на 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']);

ТУК,

  • 'поле' посочи името на полето на формуляра, което да бъде валидирано от библиотеката
  • 'human readable field' указва четимия от човека формат на валидираното поле. Това се показва обратно на потребителя, когато възникне грешка.
  • „правило“ указва правилото за валидиране, което да се прилага, като задължително, числово, проверка дали минималната дължина е… и т.н.
  • ['персонализирано съобщение'] не е задължително и може да се използва за задаване на персонализирано съобщение за валидиране, което трябва да се показва, когато правилото за валидиране е неуспешно.

Следва подаване на формуляр в пример на 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 в таблицата contacts в базата данни.

Показване на съобщения за грешка при валидиране на формуляр

Ако възникне грешка по време на обработката на формуляра, можете да използвате следния код, за да покажете възникналите грешки при валидиране

<?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(…) sets дефинира правилата за валидиране
  • $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

Oбобщение

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

Обобщете тази публикация с: