CodeValidacija obrasca i slanje obrasca u Igniter 4 s primjerom
⚡ Pametni sažetak
CodeIgniter 4 Validacija obrasca provjerava korisnički unos prije nego što se obradi. Obrasci se izrađuju pomoću pomoćnika za obrasce, a ugrađena biblioteka za validaciju postavlja pravila kao što su obavezno, numeričko i is_unique, zatim prikazuje pogreške i ponovno popunjava ljepljiva polja kada validacija ne uspije.

Obrazac u CodeUpaljač 4
Obrasci omogućuju korisnicima interakciju s aplikacijom i slanje podataka. Obrazac se može koristiti za kontaktni obrazac koji posjetitelj web stranice može ispuniti i poslati nam podatke. Primljeni podaci obično se pohranjuju u bazu podataka ili šalju putem e-pošte.
Struktura HTML obrasca
Sljedeći kod prikazuje strukturu tipičnog HTML obrasca.
<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>
Ovdje:
- ... su početne i završne oznake obrasca. Atributi id i name određuju naziv i ID obrasca. Atribut method određuje HTTP glagol koji će se koristiti, obično POST.
- određuje elemente obrasca. Atribut name je naziv varijable koji se šalje pozadinskom poslužitelju na obradu.
CodePomoćnik za obrasce za paljenje
HTML je lako razumjeti i pisati, ali Codeupaljač čini stvari još jednostavnijima. CodeIgniter ima ugrađene funkcije za izradu HTML obrazaca. Razmotrimo sljedeće CodeKod obrasca Igniter koji koristi pomoćnu funkciju obrasca za izradu obrasca:
<?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(); ?>
Ovdje:
- echo form_open('create_user.php', ['id' => 'frmUsers']); stvara početnu oznaku obrasca, postavlja metodu na POST i postavlja akciju URL za kreiranje_korisnika.php.
- echo form_label('ID korisnika', 'user_id'); stvara oznaku koja čita ID korisnika za polje za unos pod nazivom user_id.
- echo form_input(['name' => 'user_id']); stvara polje za unos teksta pod nazivom user_id.
- echo form_submit('btnSubmit', 'Kreiraj korisnika'); stvara gumb za slanje s oznakom Kreiraj korisnika.
- echo form_close(); zatvara obrazac.
Kao što vidite, pomoćni alati za obrasce olakšavaju izradu obrazaca pomoću čistog PHP-a. Prosljeđivanjem atributa metodama pomoćnih alata za obrasce možemo prilagoditi HTML generiran za obrazac. Gornji kod generira sljedeći HTML kod obrasca:
<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>
Najveća prednost korištenja pomoćnika za obrasce je ta što generira semantički ispravan kod koji se pridržava HTML standarda. Možete se pozvati na službene CodeDokumentacija za upaljač za više detalja: https://codeigniter.com/user_guide/helpers/form_helper.html.
CodePrimjer obrasca za upaljač
Nakon što ste pokrili osnove CodeIgniter, vratimo se našem tutorijalnom projektu na kojem smo radili cijelo ovo CodeSerija tutorijala za IgniterUkratko, projekt tutorijala izrađuje aplikaciju za upravljanje kontaktima koja pohranjuje podatke u bazu podataka.
Stvorite kontakt
U prethodnom tutorialu smo kreirali rute za našu aplikaciju i jednostavne prikaze (views). Otvorite application/views/contacts/create.php i izmijenite kod za create.php na sljedeći način:
<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>
Bilješka: Gornji kod koristi obični HTML za izradu obrasca. Pogledajmo sada kako naš obrazac izgleda u web pregledniku. Učitajte sljedeće URL u vaš web preglednik: http://localhost:3000/contacts/createAko ste izrađivali tutorijal, trebali biste vidjeti sljedeće:
Validacija obrasca u Codeupaljač
Validacija igra vrlo važnu ulogu pri obradi podataka iz obrazaca. Pretpostavimo da se korisnik prijavljuje na web stranicu; želimo biti sigurni da ispunjava potrebne podatke i valjanu adresu e-pošte. Ako radimo s datumskim vrijednostima, želimo biti sigurni da su rasponi datuma valjani, pa ne bismo prihvatili datum s 32 dana u mjesecu.
Validacija rješava ove probleme. CodeValidacija Ignitera se vrši na dva fronta pri radu s web aplikacijama.
Validacija na strani klijenta se vrši u web pregledniku, obično pomoću HTML-a i JavaSkripta. Poboljšava performanse jer se sve radi na klijentu, tako da nema potrebe za slanjem podataka na poslužitelj. Nedostatak je što korisnik ima kontrolu nad tim; ako se oslanjate na JavaSkripta za provjeru i korisnik onemogućuje JavaSkripta, vaša validacija neće uspjeti.
Validacija na strani poslužitelja vrši se na poslužitelju. Nedostatak je što korisnik mora poslati podatke poslužitelju i čekati odgovor, što koristi mrežne resurse i može smanjiti performanse. Glavna prednost je veća kontrola i jamstvo da vaša pravila validacije rade čak i ako ih korisnik onemogući. JavaSkripta.
Bolja strategija je koristiti validaciju na strani klijenta kao primarnu strategiju, a validaciju na strani poslužitelja kao rezervni mehanizam.
Dodavanje pravila provjere valjanosti obrazaca
CodeIgniter ima ugrađenu biblioteku za validaciju. Biblioteka se učitava pomoću sljedećeg retka:
$this->load->library('form_validation');
The CodeBiblioteka za validaciju obrazaca Igniter može izvršiti neke od sljedećih radnji:
- Provjeri obavezna polja. Pregledava poslane vrijednosti i vraća grešku ako polje označeno kao obavezno nema vrijednost.
- Validacija tipa podataka – neka polja mogu zahtijevati samo numeričke vrijednosti. Ako se otkrije vrijednost koja nije numerička, knjižnica vraća pogrešku i prekida slanje obrasca.
- Validacija duljine – neka polja zahtijevaju određeni minimalni ili maksimalni broj znakova. Biblioteka za validaciju obrađuje takve slučajeve.
- Sanitizacija podataka – knjižnica može ukloniti zlonamjerni kod iz poslanih podataka radi sigurnosti. Ako poslane vrijednosti imaju aktivne JavaSkriptni ili SQL injekcijski kod, biblioteka uklanja štetni kod i čini ga beskorisnim.
- Validacija jedinstvenih polja baze podataka – pretpostavimo da imate obrazac za prijavu koji koristi adresu e-pošte i želite osigurati da je adresa jedinstvena. Biblioteka olakšava provjeru poslanih podataka u odnosu na tablicu i polje baze podataka.
Pravila validacije postavljaju se pomoću sljedećeg formata:
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
Ovdje:
- 'field' određuje naziv polja obrasca koji biblioteka treba provjeriti.
- 'ljudski čitljivo polje' određuje ljudski čitljiv format polja koji se prikazuje korisniku kada dođe do pogreške.
- 'pravilo' određuje pravilo validacije koje će se primijeniti, kao što je obavezno, numeričko ili minimalna duljina.
- ['custom message'] je opcionalno i može postaviti prilagođenu poruku za validaciju koja se prikazuje kada pravilo ne uspije.
Slijedi a CodePrimjer upaljača za provjeru kontaktnog broja:
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
Ovdje:
- Gornji kod provjerava je li polje contact_number uneseno. Ako nije postavljeno, vraća grešku koja kaže da je polje Contact Number obavezno.
Za pokretanje validacije prema postavljenim pravilima koristimo sljedeću funkciju biblioteke za validaciju:
$this->form_validation->run()
Ako gornji kôd vrati vrijednost "false", tada jedno ili više postavljenih pravila nije uspjelo. Ako vrati vrijednost "true", tada su sva pravila validacije prošla i možete nastaviti s daljnjim radnjama.
Pogledajmo još primjera pravila validacije. Pretpostavimo da želite validirati nekoliko polja, kao što su ime kontakta, broj i adresa e-pošte. Možete koristiti sljedeći kod:
$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);
Ovdje:
- U gornjem primjeru, pružamo niz polja s pravilima za funkciju set_rules biblioteke. To olakšava validaciju nekoliko polja.
Jedinstvena provjera valjanosti
Ako želimo provjeriti kontaktni broj kako bismo osigurali da isti broj ne spremimo dvaput, možemo upotrijebiti sljedeće pravilo:
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
Ovdje:
- | se koristi za spajanje više pravila.
- is_unique[contacts.contact_number] provjerava je li vrijednost za contact_number jedinstvena u odnosu na vrijednosti polja contact_number u tablici baze podataka contacts.
Prikaz poruka o pogrešci provjere valjanosti obrasca
Ako se tijekom obrade obrasca dogodi greška, možete upotrijebiti sljedeći kod za prikaz grešaka validacije:
<?php echo validation_errors(); ?>
Ovdje:
- Gornja funkcija vraća sve greške koje su se pojavile.
Popunjavanje podataka poslanih obrazaca: ljepljivi obrasci
Neki obrasci imaju mnogo polja i ako dođe do pogreške, želite biti sigurni da su sačuvani ispravno dodani podaci. Biblioteka za validaciju ima mehanizme za postizanje toga pomoću sljedećeg koda:
<?php echo set_value('field_name'); ?>
Ovdje:
- Gornji kod prikazuje unos koji je korisnik unio.
Za potpuni referentni vodič o metodama dostupnim u biblioteci za validaciju, pogledajte API dokumentaciju u službenom CodeUpute za uporabu upaljača: https://codeigniter.com/userguide3/libraries/form_validation.html.
CodePrimjer validacije obrasca za paljenje
Kroz ovu seriju tutorijala dodavali smo kod našem tutorijalnom projektu, aplikaciji za upravljanje kontaktima. U ovom odjeljku učitat ćemo biblioteku za validaciju i vidjeti kako je praktično primijeniti u primjeru iz stvarnog svijeta. Izmijenite kod ruta na sljedeći način kako biste uključili 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';
Sada učitajmo biblioteku za validaciju obrazaca u kontroler kontakata i postavimo neka pravila validacije. Izmijenimo kod kao što je prikazano u nastavku:
<?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'); } }
Ovdje:
- $rules = array(…) definira pravila validacije.
- $this->form_validation->set_rules($rules); postavlja pravila validacije.
- ako ($this->form_validation->run() == FALSE) {…} pokreće pravila validacije, a ako ne uspiju, obrazac se ponovno prikazuje s greškama validacije. Ako validacija prođe, preusmjeravamo na stranicu s popisom kontakata. U normalnim okolnostima bismo zapisali podatke u bazu podataka, što ćemo učiniti u sljedećem tutorialu o baze podataka.
Izmijenite prikaz za kreiranje u datoteci application/views/contacts/create.php kao što je prikazano u nastavku:
<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>
Ovdje:
- prikazuje pogreške koje se javljaju, ako ih ima, tijekom procesa validacije.
- postavlja prethodno unesenu vrijednost, ako postoji.
Učitajte sljedeće URL u svoj web preglednik, a zatim kliknite na Stvori kontakt bez unosa ikakvih vrijednosti:


