CodeIgniter 4 Skjemavalidering og skjemainnsending med eksempel
⚡ Smart oppsummering
CodeIgniter 4 Form Validation sjekker brukerinndata før det behandles. Skjemaer bygges med skjemahjelperen, og det innebygde valideringsbiblioteket angir regler som obligatorisk, numerisk og er_unik, viser deretter feil og fyller ut faste felt på nytt når valideringen mislykkes.

Skjema i CodeTennapparat 4
Skjemaer gir brukere en måte å samhandle med applikasjonen og sende inn data. Et skjema kan brukes til et kontaktskjema som en besøkende på nettstedet kan fylle ut og sende informasjonen til oss. Informasjonen som mottas lagres vanligvis i databasen eller sendes via e-post.
HTML-skjemastruktur
Følgende kode viser strukturen til et typisk HTML-skjema.
<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>
Her:
- … er åpnings- og avslutningstaggene for skjemaet. Attributtene id og name angir navnet og ID-en til skjemaet. Method-attributtet angir HTTP-verbet som skal brukes, vanligvis POST.
- spesifiserer skjemaelementene. Navneattributtet er variabelnavnet som sendes til backend-serveren for behandling.
CodeTennformhjelper
HTML er lett å forstå og skrive, men CodeTenner gjør ting enda enklere. CodeIgniter har innebygde funksjoner for å lage HTML-skjemaer. La oss se på følgende CodeIgniter-skjemakode som bruker skjemahjelperen til å opprette et skjema:
<?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(); ?>
Her:
- echo form_open('create_user.php', ['id' => 'frmUsers']); oppretter skjemaets åpningskode, setter metoden til POST og setter handlingen URL til create_user.php.
- echo form_label('Bruker-ID', 'bruker_id'); oppretter en etikett som leser bruker-ID for inndatafeltet med navnet bruker_id.
- echo form_input(['name' => 'user_id']); oppretter et tekstfelt med navnet user_id.
- echo form_submit('btnSubmit', 'Opprett bruker'); oppretter en send-knapp med etiketten Opprett bruker.
- echo form_close(); lukker skjemaet.
Som du kan se, gjør skjemahjelpere det enkelt å lage skjemaer ved hjelp av ren PHP. Ved å sende attributter til skjemahjelpermetodene kan vi tilpasse HTML-koden som genereres for skjemaet. Koden ovenfor genererer følgende HTML-skjemakode:
<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>
Den største fordelen med å bruke skjemahjelperen er at den genererer semantisk korrekt kode som overholder HTML-standardene. Du kan se den offisielle CodeDokumentasjon for tenneren for mer informasjon: https://codeigniter.com/user_guide/helpers/form_helper.html.
CodeEksempel på tennform
Etter å ha dekket det grunnleggende om CodeIgniter, la oss gå tilbake til veiledningsprosjektet vårt, som vi har jobbet med gjennom hele dette CodeIgniter-opplæringsserienOppsummert bygger veiledningsprosjektet en app for kontaktadministrasjon som lagrer detaljene i databasen.
Opprett kontakt
I den forrige veiledningen opprettet vi ruter for applikasjonen vår og enkle visninger. Åpne application/views/contacts/create.php og endre koden for create.php som følger:
<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>
OBS: Koden ovenfor bruker ren HTML for å opprette skjemaet. La oss nå se hvordan skjemaet vårt ser ut i nettleseren. Last inn følgende URL inn i nettleseren din: http://localhost:3000/contacts/createHvis du har bygget veiledningsprosjektet, bør du se følgende:
Skjemavalidering i CodeTenner
Validering spiller en svært kritisk rolle når man behandler data fra skjemaer. La oss si at en bruker registrerer seg på et nettsted. Vi vil sørge for at de fyller ut de nødvendige opplysningene og har en gyldig e-postadresse. Hvis vi jobber med datoverdier, vil vi sørge for at datointervallene er gyldige, så vi ville ikke godta en dato med 32 dager i en måned.
Validering løser disse problemene. CodeIgniter-validering gjøres på to fronter når man jobber med webapplikasjoner.
Klientsidevalidering gjøres i nettleseren, vanligvis med HTML og JavaSkript. Det forbedrer ytelsen fordi alt gjøres på klienten, så det er ikke nødvendig å sende dataene til serveren. Ulempen er at brukeren har kontroll over det; hvis du er avhengig av JavaSkript for å validere og brukeren deaktiverer JavaSkript, valideringen din vil mislykkes.
Serversidevalidering gjøres på serveren. Ulempen er at brukeren må sende dataene til serveren og vente på svaret, noe som bruker nettverksressurser og kan forringe ytelsen. Den største fordelen er større kontroll og sikkerheten for at valideringsreglene dine fungerer selv om brukeren deaktiverer. JavaManus.
En bedre strategi er å bruke klientsidevalidering som primærstrategi og serversidevalidering som en reservemekanisme.
Legge til skjemavalideringsregler
CodeIgniter har et innebygd valideringsbibliotek. Biblioteket lastes inn ved å bruke følgende linje:
$this->load->library('form_validation');
Ocuco CodeValideringsbiblioteket for Igniter-skjemaer kan utføre noen av følgende handlinger:
- Se etter obligatoriske felt. Den undersøker de innsendte verdiene og returnerer en feil hvis et felt merket som obligatorisk ikke har en verdi.
- Validering av datatype – noen felt krever kanskje bare numeriske verdier. Hvis en ikke-numerisk verdi oppdages, returnerer biblioteket en feil og avbryter skjemainnsendingen.
- Lengdevalidering – noen felt krever et visst minimums- eller maksimumsantall tegn. Valideringsbiblioteket håndterer slike tilfeller.
- Datarensing – biblioteket kan fjerne skadelig kode fra innsendte data av sikkerhetshensyn. Hvis de innsendte verdiene har aktive JavaSkript- eller SQL-injeksjonskode, fjerner biblioteket den skadelige koden og gjør den ubrukelig.
- Valider unike databasefelt – anta at du har et registreringsskjema med en e-postadresse, og du vil forsikre deg om at adressen er unik. Biblioteket gjør det enkelt å sjekke de innsendte dataene mot en databasetabell og et felt.
Valideringsregler angis ved hjelp av følgende format:
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
Her:
- 'felt' angir navnet på skjemafeltet som skal valideres av biblioteket.
- «menneskelig lesbart felt» angir det menneskelig lesbare formatet til feltet, som vises tilbake til brukeren når det oppstår en feil.
- 'regel' angir valideringsregelen som skal brukes, for eksempel obligatorisk, numerisk eller minimumslengde.
- ['tilpasset melding'] er valgfritt og kan angi en tilpasset valideringsmelding som vises når regelen mislykkes.
Følgende er a CodeEksempel på tenner for validering av kontaktnummeret:
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
Her:
- Koden ovenfor sjekker om feltet contact_number er angitt. Hvis det ikke er angitt, returnerer den en feil som sier at feltet Contact Number er obligatorisk.
For å kjøre valideringen mot de angitte reglene, bruker vi følgende funksjon i valideringsbiblioteket:
$this->form_validation->run()
Hvis koden ovenfor returnerer usann, har én eller flere av reglene feilet. Hvis den returnerer sann, har alle valideringsreglene blitt bestått, og du kan fortsette med videre handlinger.
La oss se på flere eksempler på valideringsregler. Anta at du vil validere flere felt, for eksempel kontaktnavn, nummer og e-postadresse. Du kan bruke følgende kode:
$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);
Her:
- I eksemplet ovenfor tilbyr vi en rekke felt med regler for set_rules-funksjonen i biblioteket. Dette gjør det enklere når du validerer flere felt.
Unik validering
Hvis vi vil validere kontaktnummeret for å sikre at vi ikke lagrer det samme nummeret to ganger, kan vi bruke følgende regel:
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
Her:
- | brukes til å sette sammen flere regler.
- is_unique[contacts.contact_number] sjekker om verdien for contact_number er unik mot kontaktnummer-feltverdiene i databasetabellens kontakter.
Viser feilmeldinger for skjemavalidering
Hvis det oppstår en feil under behandlingen av skjemaet, kan du bruke følgende kode for å vise valideringsfeilene:
<?php echo validation_errors(); ?>
Her:
- Funksjonen ovenfor returnerer alle feilene som oppsto.
Fylle inn innsendte skjemadata: Sticky Forms
Noen skjemaer har mange felt, og hvis det oppstår en feil, må du sørge for at dataene som ble lagt til riktig, bevares. Valideringsbiblioteket har mekanismer for å oppnå dette ved hjelp av følgende kode:
<?php echo set_value('field_name'); ?>
Her:
- Koden ovenfor viser inndataene som brukeren skrev inn.
For en komplett referanseveiledning om metodene som er tilgjengelige i valideringsbiblioteket, se API-dokumentasjonen i den offisielle CodeBrukerveiledning for tenneren: https://codeigniter.com/userguide3/libraries/form_validation.html.
CodeEksempel på validering av tennform
Gjennom denne veiledningsserien har vi lagt til kode i veiledningsprosjektet vårt, et program for kontaktadministrasjon. I denne delen skal vi laste inn valideringsbiblioteket og se hvordan vi kan bruke det i praksis i et eksempel fra den virkelige verden. Endre rutekoden som følger for å inkludere store-metoden:
$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';
La oss nå laste inn skjemavalideringsbiblioteket i Kontaktkontrolleren og angi noen valideringsregler. Endre koden som vist nedenfor:
<?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'); } }
Her:
- $rules = array(…) definerer valideringsreglene.
- $this->form_validation->set_rules($rules); angir valideringsreglene.
- hvis ($this->form_validation->run() == FALSE) {…} kjører valideringsreglene, og hvis de mislykkes, vises skjemaet på nytt med valideringsfeil. Hvis valideringen består, omdirigerer vi til siden med kontaktlisten. Under normale omstendigheter ville vi skrevet dataene til databasen, noe vi gjør i neste veiledning om databaser.
Endre opprettingsvisningen i application/views/contacts/create.php som vist nedenfor:
<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>
Her:
- viser eventuelle feil som oppstår under valideringsprosessen.
- angir verdien som tidligere ble angitt, hvis noen.
Last inn følgende URL i nettleseren din, og klikk deretter på Opprett kontakt uten å skrive inn noen verdier:


