CodeOvěření formuláře a odeslání formuláře v Igniter 4 s příkladem
⚡ Chytré shrnutí
CodeIgniter 4 Form Validation kontroluje vstup uživatele před jeho zpracováním. Formuláře se vytvářejí pomocí pomocníka pro formuláře a vestavěná knihovna pro validaci nastavuje pravidla, jako například required, numeric a is_unique, a poté zobrazuje chyby a znovu vyplňuje pevná pole, když validace selže.
Formulář v CodeZapalovač 4
Formuláře umožňují uživatelům interakci s aplikací a odesílání dat. Formulář lze použít pro kontaktování, který může návštěvník webových stránek vyplnit a odeslat nám informace. Přijaté informace jsou obvykle uloženy v databázi nebo odeslány e-mailem.
Struktura formuláře HTML
Následující kód ukazuje strukturu typického formuláře 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>
Zde:
- … jsou otevírací a uzavírací značky formuláře. Atributy id a name určují název a ID formuláře. Atribut method určuje použitý HTTP příkaz, obvykle POST.
- určuje prvky formuláře. Atribut name je název proměnné odeslané na backendový server ke zpracování.
CodePomocník s formulářem Igniter
HTML je snadno pochopitelné a snadno se píše, ale CodeZapalovač věci ještě zjednodušuje. CodeIgniter má vestavěné funkce pro vytváření HTML formulářů. Uvažujme následující. CodeKód formuláře Igniter, který používá pomocníka formuláře k vytvoření formuláře:
<?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(); ?>
Zde:
- echo form_open('create_user.php', ['id' => 'frmUsers']); vytvoří úvodní tag formuláře, nastaví metodu na POST a nastaví akci URL do souboru create_user.php.
- echo form_label('User ID', 'user_id'); vytvoří popisek, který čte ID uživatele pro vstupní pole s názvem user_id.
- echo form_input(['name' => 'user_id']); vytvoří textové vstupní pole s názvem user_id.
- echo form_submit('btnSubmit', 'Vytvořit uživatele'); vytvoří tlačítko pro odeslání s popiskem Vytvořit uživatele.
- echo form_close(); zavře formulář.
Jak vidíte, pomocné metody formulářů usnadňují vytváření formulářů pomocí čistého PHP. Předáním atributů metodám pomocných metod formulářů můžeme přizpůsobit HTML kód generovaný pro formulář. Výše uvedený kód generuje následující HTML kód formuláře:
<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>
Největší výhodou použití pomocníka pro formuláře je, že generuje sémanticky správný kód, který dodržuje standardy HTML. Můžete se podívat na oficiální CodeDokumentace k zapalovači pro více informací: https://codeigniter.com/user_guide/helpers/form_helper.html.
CodePříklad formuláře zapalovače
Po probrání základů CodeIgnitere, vraťme se k našemu tutoriálovému projektu, na kterém jsme pracovali po celou dobu. CodeVýuková série IgniterStručně řečeno, tutoriálový projekt vytváří aplikaci pro správu kontaktů, která ukládá podrobnosti do databáze.
Vytvořit kontakt
V předchozím tutoriálu jsme vytvořili trasy pro naši aplikaci a jednoduché pohledy (views). Otevřete soubor application/views/contacts/create.php a upravte kód pro create.php takto:
<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>
Poznámka: Výše uvedený kód používá k vytvoření formuláře prostý HTML. Podívejme se nyní, jak náš formulář vypadá ve webovém prohlížeči. Načtěte následující URL do vašeho webového prohlížeče: http://localhost:3000/contacts/createPokud jste vytvářeli tutoriálový projekt, měli byste vidět následující:
Ověření formuláře v CodeZapalovač
Ověřování hraje velmi důležitou roli při zpracování dat z formulářů. Předpokládejme, že se uživatel registruje na webových stránkách; chceme se ujistit, že vyplnil požadované údaje a platnou e-mailovou adresu. Pokud pracujeme s hodnotami data, chceme se ujistit, že rozsahy dat jsou platné, takže bychom neakceptovali datum s 32 dny v měsíci.
Validace tyto problémy řeší. CodeOvěřování Igniteru se při práci s webovými aplikacemi provádí na dvou frontách.
Ověřování na straně klienta se provádí ve webovém prohlížeči, obvykle pomocí HTML a JavaSkript. Zlepšuje výkon, protože vše se dělá na straně klienta, takže není nutné odesílat data na server. Nevýhodou je, že nad tím má uživatel kontrolu; pokud se spoléháte na JavaSkript pro ověření a uživatel zakáže JavaSkript, vaše ověření selže.
Ověřování na straně serveru se provádí na serveru. Nevýhodou je, že uživatel musí odeslat data na server a čekat na odpověď, což využívá síťové prostředky a může snížit výkon. Hlavní výhodou je větší kontrola a jistota, že vaše ověřovací pravidla fungují, i když je uživatel zakáže. JavaSkript.
Lepší strategií je použít validaci na straně klienta jako primární strategii a validaci na straně serveru jako záložní mechanismus.
Přidání pravidel ověření formuláře
CodeIgniter má vestavěnou knihovnu pro validaci. Knihovna se načítá pomocí následujícího řádku:
$this->load->library('form_validation');
Jedno CodeKnihovna pro validaci formulářů Igniter může provádět některé z následujících akcí:
- Kontrola povinných polí. Prověří odeslané hodnoty a vrátí chybu, pokud pole označené jako povinné nemá hodnotu.
- Ověření datového typu – některá pole mohou vyžadovat pouze číselné hodnoty. Pokud je detekována nečíselná hodnota, knihovna vrátí chybu a odeslání formuláře přeruší.
- Ověření délky – některá pole vyžadují určitý minimální nebo maximální počet znaků. Knihovna pro validaci s takovými případy pracuje.
- Sanitizace dat – knihovna může z bezpečnostních důvodů odstranit škodlivý kód z odeslaných dat. Pokud odeslané hodnoty mají aktivní JavaSkript nebo kód SQL injection, knihovna odstraňuje škodlivý kód a znehodnocuje ho.
- Ověřování jedinečných databázových polí – předpokládejme, že máte registrační formulář s e-mailovou adresou a chcete zajistit, aby byla adresa jedinečná. Knihovna usnadňuje kontrolu odeslaných dat oproti databázové tabulce a poli.
Ověřovací pravidla se nastavují v následujícím formátu:
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
Zde:
- 'field' určuje název pole formuláře, které má knihovna ověřit.
- „Čitelné pole“ určuje formát pole čitelný člověkem, který se zobrazí uživateli v případě chyby.
- Argument „pravidlo“ určuje ověřovací pravidlo, které se má použít, například povinné, číselné nebo minimální délku.
- Parametr ['custom message'] je volitelný a umožňuje nastavit vlastní ověřovací zprávu zobrazenou v případě selhání pravidla.
Toto je a CodePříklad zapalovače pro ověření kontaktního čísla:
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
Zde:
- Výše uvedený kód kontroluje, zda bylo zadáno pole contact_number. Pokud není nastaveno, vrátí chybu, která říká, že pole Contact Number je povinné.
Pro spuštění validace podle nastavených pravidel použijeme následující funkci validační knihovny:
$this->form_validation->run()
Pokud výše uvedený kód vrátí hodnotu false, pak jedno nebo více nastavených pravidel selhalo. Pokud vrátí hodnotu true, pak všechna ověřovací pravidla prošla úspěšně a můžete pokračovat v další akci.
Podívejme se na další příklady ověřovacích pravidel. Předpokládejme, že chcete ověřit několik polí, jako je jméno kontaktu, telefonní číslo a e-mailová adresa. Můžete použít následující kód:
$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);
Zde:
- Ve výše uvedeném příkladu poskytujeme pole polí s pravidly pro funkci set_rules knihovny. To usnadňuje ověřování více polí.
Jedinečné ověření
Pokud chceme ověřit kontaktní číslo a zajistit, abychom stejné číslo neuložili dvakrát, můžeme použít následující pravidlo:
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
Zde:
- | se používá k propojení více pravidel dohromady.
- is_unique[contacts.contact_number] zkontroluje, zda je hodnota pro contact_number jedinečná vzhledem k hodnotám pole contact_number v databázové tabulce Contacts.
Zobrazování chybových zpráv ověření formuláře
Pokud během zpracování formuláře dojde k chybě, můžete k zobrazení chyb ověření použít následující kód:
<?php echo validation_errors(); ?>
Zde:
- Výše uvedená funkce vrací všechny chyby, ke kterým došlo.
Vyplňování dat odeslaných formulářů: Sticky Forms
Některé formuláře mají mnoho polí a pokud dojde k chybě, chcete se ujistit, že se zachovají správně přidaná data. Knihovna pro validaci má mechanismy, jak toho dosáhnout, a to pomocí následujícího kódu:
<?php echo set_value('field_name'); ?>
Zde:
- Výše uvedený kód zobrazuje vstup, který uživatel zadal.
Úplného referenčního průvodce metodami dostupnými v knihovně pro validaci naleznete v dokumentaci k API v oficiálním CodeUživatelská příručka k zapalovači: https://codeigniter.com/userguide3/libraries/form_validation.html.
CodePříklad ověření formuláře zapalovače
V celé této sérii tutoriálů jsme přidávali kód do našeho tutoriálového projektu, aplikace pro správu kontaktů. V této části si načteme knihovnu pro validaci a uvidíme, jak ji prakticky využít v reálném příkladu. Upravte kód tras takto, aby obsahoval metodu 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';
Nyní načtěme knihovnu pro validaci formulářů do kontroleru Contacts a nastavme některá validační pravidla. Upravte kód, jak je znázorněno níže:
<?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'); } }
Zde:
- $rules = array(…) definuje validační pravidla.
- $this->form_validation->set_rules($rules); nastavuje ověřovací pravidla.
- Pokud ($this->form_validation->run() == FALSE) {…} spustí ověřovací pravidla a pokud selžou, formulář se znovu zobrazí s chybami ověření. Pokud ověření proběhne úspěšně, přesměrujeme na stránku se seznamem kontaktů. Za normálních okolností bychom data zapsali do databáze, což uděláme v dalším tutoriálu na databáze.
Upravte zobrazení pro vytvoření v souboru application/views/contacts/create.php, jak je znázorněno níže:
<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>
Zde:
- zobrazuje chyby, ke kterým dojde během procesu ověřování, pokud nějaké existují.
- nastaví hodnotu, která byla zadána dříve, pokud nějaká existuje.
Načtěte následující URL do webového prohlížeče a poté klikněte na Vytvořit kontakt bez zadávání jakýchkoli hodnot:



