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.

  • 📝 obrasci: Obrasci omogućuju korisnicima slanje podataka, često spremljenih u bazu podataka ili poslanih e-poštom.
  • 🧰 Pomoćnik za obrasce: Funkcije poput form_open, form_input i form_submit generiraju HTML koji je u skladu sa standardima.
  • 🛡️ Dva fronta: Validacija na strani klijenta je brza; validacija na strani poslužitelja je sigurna i ne može se zaobići.
  • 📏 Pravila: set_rules definira obavezne atribute, tip podataka, duljinu, sanitizaciju i provjere jedinstvenosti.
  • 🔁 Trčanje: Metoda run() vraća false ako bilo koje pravilo ne uspije, a true kada sva prođu.
  • ⚠️ Pogreške: validation_errors() ispisuje poruke za polja koja nisu uspjela.
  • 📌 Ljepljivi obrasci: set_value() ponovno popunjava ispravno unesena polja nakon neuspjelog slanja.

CodeValidacija obrasca za paljenje

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:

CodeIgniter kreira kontakt obrazac

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:

CodePrikazane su pogreške u validaciji obrasca za paljenje

Pitanja i odgovori

Validacija na strani klijenta može se zaobići onemogućavanjem JavaSkripta ili slanje izravnog zahtjeva. Validacija na strani poslužitelja izvodi se tamo gdje korisnik nema kontrolu, pa je to pouzdana posljednja linija obrane.

Ljepljivi obrazac ponovno popunjava polja koja je korisnik već ispunio nakon neuspjelog slanja, koristeći set_value(). To štedi korisnika od ponovnog slanja.ping valjani podaci kada je samo jedno polje uzrokovalo grešku.

is_unique[table.field] provjerava poslanu vrijednost u odnosu na stupac u bazi podataka i ne uspijeva ako već postoji. Koristi se za polja poput e-pošte ili korisničkog imena koja se ne smiju duplicirati.

Da. Iz popisa polja, umjetna inteligencija može generirati niz set_rules s pravilima za obaveznu adresu, valid_email i duljinu te prilagođenim porukama. Revpogledajte pravila u skladu s vašom poslovnom logikom i shemom baze podataka.

Pomoćnik za obrasce generira HTML usklađen sa standardima, izbjegava atribute i održava obrasce konzistentnima. Također se integrira s pomoćnicima za validaciju poput set_value, smanjujući ponavljajuće oznake u prikazima.

Sažmite ovu objavu uz: