CodeIgniter Form Validation med Form Submit Eksempel

Skjema i CodeIgniter

Skjemaer gir brukere en mรฅte รฅ samhandle med applikasjonen og sende inn data. Det 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 avslutningskodene for skjemaet. Id og navn-attributtet spesifiserer navn og ID for skjemaet. Metodeattributtet spesifiserer HTTP-verbet som skal brukes. Dette er vanligvis spesifisert av POST-verb
  • Angir skjemaelementene. Navnattributtet er variabelnavnet som sendes til backend-serveren for behandling.

CodeIgniter Form Helper

HTML er flott er lett รฅ forstรฅ og skrive, men CodeIgniter gjรธr ting enda enklere. CodeIgniter har innebygde funksjoner for รฅ lage HTML-skjemaer.

La oss vurdere fรธlgende CodeIgniter-skjemainnsendingskode som bruker skjemahjelperen til รฅ lage 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 รฅpningstagg, setter handlingen til POST Verb og setter handlings-URLen til create_user.php
  • echo form_label('Bruker-ID', 'bruker-id'); oppretter en etikett som leser bruker-ID for inndatafeltet med navnet pรฅ bruker-id.
  • echo form_input(['navn' => 'bruker-id']); oppretter et inndatafelt av teksttype med navnet pรฅ bruker-ID
  • echo form_submit('btnSubmit', 'Opprett bruker'); oppretter en send-knapp med etiketten Opprett bruker
  • echo form_close(); lukker skjemaet

Som du kan se fra CodeIgniter-koden ovenfor, gjรธr skjemahjelpere det enkelt for oss รฅ lage skjemaer ved hjelp av ren PHP. Ved รฅ sende attributter til skjemahjelpemetodene kan vi tilpasse HTML-en 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>

De stรธrste fordelene med รฅ bruke skjemahjelperen er at den genererer semantisk korrekt kode som overholder de angitte HTML-standardene.

Du kan se den offisielle CodeIgniter-dokumentasjonen for mer informasjon

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

Eksempel pรฅ CodeIgniter-skjema

Etter รฅ ha dekket det grunnleggende om CodeIgniter, la oss gรฅ tilbake til opplรฆringsprosjektet vรฅrt som vi har jobbet med gjennom dette CodeIgniter Tutorial Series. Oppsummert bygger opplรฆringsprosjektet en kontaktadministrasjonsapp som lagrer detaljene i databasen.

Opprett kontakt

i den forrige opplรฆringen laget vi ruter for vรฅre applikasjoner og enkle visninger. ร…pne program/views/contacts/create.php

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 vanlig HTML for รฅ lage skjemaer.

La oss nรฅ se hvordan skjemaene vรฅre ser ut i nettleseren

Last ned fรธlgende URL i nettleseren vรฅr.

http://localhost:3000/contacts/create

Hvis du har laget opplรฆringsprosjektet, bรธr du kunne se fรธlgende

CodeIgniter-skjema

Skjemavalidering i CodeIgniter

Validering spiller en svรฆrt kritisk rolle ved behandling av data fra skjemaer. La oss si at en bruker registrerer seg pรฅ et nettsted; vi vil forsikre oss om at de fyller inn de nรธdvendige opplysninger og e-postadresse. Vi mรฅ sรธrge for at e-postadressen som er oppgitt er gyldig. Hvis vi jobber med datoverdier, vil vi forsikre oss om at datoperiodene er gyldige. Vi trenger ikke รฅ godta en dato som har 32 dager i en mรฅned osv.

Validering lรธser problemene ovenfor. CodeIgniter Validering gjรธres pรฅ to (2) fronter nรฅr du arbeider med webapplikasjoner.

Validering pรฅ klientsiden gjรธres fra nettleserens side. Dette innebรฆrer vanligvis bruk av HTML og JavaManus. Validering pรฅ klientsiden forbedrer ytelsen ettersom alt gjรธres pรฅ klientsiden. Sรฅ det er ikke nรธdvendig รฅ sende inn dataene til serveren. Ulempen med validering pรฅ klientsiden er at brukeren har kontroll over den. Hvis du stoler pรฅ JavaSkript for รฅ validere og brukeren deaktiverer JavaSkript i nettleseren, sรฅ mislykkes valideringen.

Validering pรฅ serversiden gjรธres pรฅ serversiden. Ulempen med denne valideringen er at brukeren mรฅ sende inn dataene til serveren for behandling og vente pรฅ svaret. Dette bruker opp nettverksressurser og kan forringe ytelsen. Den stรธrste fordelen med validering pรฅ serversiden er at du har stรธrre kontroll og at du er trygg pรฅ at valideringsreglene fungerer selv om brukeren deaktiverer JavaSkript i nettleseren.

En bedre strategi er รฅ bruke klientsiden som den primรฆre valideringsstrategien og serversiden som en reservemekanisme.

Legge til skjemavalideringsregler

CodeIgniter har et innebygd valideringsbibliotek. Biblioteket lastes inn ved hjelp av fรธlgende linje

$this->load->library('form_validation');

CodeIgniter-skjemavalideringsbiblioteket kan brukes til รฅ utfรธre noen av fรธlgende handlinger

  • Se etter obligatoriske felt. Dette undersรธker de innsendte verdiene og returnerer en feil hvis et felt som er merket som nรธdvendig, ikke har en verdi
  • Datatypevalidering โ€“ noen felt kan kreve bare numeriske verdier. Hvis en ikke-numerisk verdi oppdages, returnerer biblioteket en feil. Utfรธrelse av skjemainnsending avbrytes ogsรฅ.
  • Lengdevalidering โ€“ noen datatyper krever at felt har et visst minimum eller maksimum antall tegn. Valideringsbiblioteket kommer godt med i slike tilfeller.
  • Datasanering โ€“ valideringsbiblioteket har ogsรฅ muligheter som fjerner ondsinnet kode fra innsendte data av sikkerhetsgrunner. Hvis for eksempel de innsendte verdiene har aktive JavaScript eller SQL Injection-kode i dem, valideringsbiblioteket fjerner den skadelige koden og gjรธr den ubrukelig.
  • Valider unike databasefelt โ€“ anta at du har et skjema der brukere registrerer seg med en e-postadresse. Du vil forsikre deg om at e-postadressen er unik. Biblioteket gjรธr det enkelt for deg รฅ sjekke innsendte data mot en databasetabell og et felt. Dette lar deg vite at verdien allerede er tatt opp.

Valideringsregler settes ved hjelp av fรธlgende format

$this->form_validation->set_rules('field','human readable field','rule',['custom message']);

HER,

  • 'felt' spesifiserte skjemafeltnavnet som skal valideres av biblioteket
  • 'human readable field' spesifiserer det menneskelesbare formatet til feltet under validering. Dette vises tilbake til brukeren nรฅr det oppstรฅr en feil.
  • 'regel' spesifiserer valideringsregelen som skal brukes, for eksempel obligatorisk, numerisk, sjekk om minimumslengden er... osv.
  • ['egendefinert melding'] er valgfritt og kan brukes til รฅ angi en tilpasset valideringsmelding som skal vises nรฅr valideringsregelen mislykkes.

Fรธlgende er et skjema som sendes inn i CodeIgniter-eksempelet for รฅ validere kontaktnavnet

$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');

HER,

  • Koden ovenfor sjekker om feltet kontaktnummer er angitt. Hvis det ikke er angitt, returneres en feilmelding som sier at kontaktnummerfeltet 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 en eller flere settregler mislyktes. Hvis det returnerer sant, har alle valideringsreglene bestรฅtt, og du kan fortsette med ytterligere handling.

La oss se pรฅ flere eksempler pรฅ valideringsregler. Anta at du vil validere noen felt som sier kontaktens navn, nummer og e-postadresse, kan du bruke fรธlgende kode for รฅ oppnรฅ det.

$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 e-postvalideringen ovenfor i CodeIgniter-eksemplet gir vi en rekke felter med regler for set_rules-funksjonen til biblioteket. Dette gjรธr det enklere nรฅr du skal validere enkelte felt.

Unik validering

Hvis vi รธnsker รฅ validere kontaktnummeret for รฅ sikre at vi ikke lagrer det samme nummeret to ganger, kan vi bruke fรธlgende regel for รฅ gjรธre det.

$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');

HER,

  • | brukes til รฅ koble flere regler sammen
  • 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 som oppstod

<?php echo validation_errors(); ?>

HER,

  • Funksjonen ovenfor returnerer alle feilene som har oppstรฅtt.

Fylle inn innsendte skjemadata: Sticky Forms

Noen skjemaer har mange felt, og hvis det har oppstรฅtt en feil, sรฅ vil du forsikre deg om at dataene som ble lagt til riktig er bevart. Valideringsbiblioteket har mekanismer for รฅ oppnรฅ det. Det gjรธr vi ved รฅ bruke fรธlgende kode.

<?php echo set_value('field_name'); ?>

HER,

  • Koden ovenfor viser inndataene som brukeren har skrevet inn.

For en fullstendig referanseguide om metodene som er tilgjengelige under valideringsbiblioteket, kan du se API-dokumentasjonen fra den offisielle brukerveiledningen for CodeIgniter

https://codeigniter.com/userguide3/libraries/form_validation.html

CodeIgniter Form Validation Eksempel

Gjennom disse opplรฆringsseriene har vi lagt til mer kode til opplรฆringsprosjektet vรฅrt, som er en kontaktadministrasjonsapplikasjon. I denne delen vil vi laste valideringsbiblioteket og se hvordan vi kan bruke det praktisk ved รฅ bruke et eksempelprogram fra den virkelige verden.

Endre rutekoden som fรธlger for รฅ inkludere butikkmetoden

$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';

La oss nรฅ laste inn skjemavalideringsbiblioteket i kontaktkontrolleren og angi noen valideringsregler.

Endre koden som vist i skjemavalideringen nedenfor i eksempelet 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');
    }
}

HER,

  • $rules = array(โ€ฆ) sett definerer valideringsreglene
  • $this->form_validation->set_rules($rules); setter valideringsreglene
  • if ($this->form_validation->run() == FALSE) {...} kjรธrer valideringsreglene og hvis de mislykkes, vises skjemaet pรฅ nytt med valideringsfeil. Hvis valideringen gรฅr gjennom, omdirigerer vi ganske enkelt til listen over kontakter. Under normale omstendigheter vil vi skrive dataene til databasen. Vi vil gjรธre det i de neste veiledningene nรฅr vi ser pรฅ databaser.

Endre opprettelsesvisningen i application/contacts/create.php-koden som vist i eksempelet for skjemavalidering CodeIgniter 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,

  • vi viser eventuelle feil som oppstรฅr under valideringsprosessen
  • angir verdien som tidligere ble angitt hvis noen

Du mรฅ laste inn fรธlgende URL i nettleseren din. Klikk deretter pรฅ Opprett kontakt uten รฅ angi noen verdier

CodeIgniter-skjemavalidering

Sammendrag

  • Skjemaer gir brukere en mรฅte รฅ samhandle med applikasjonen og sende inn data.
  • HTML er flott er lett รฅ forstรฅ og skrive, men CodeIgniter gjรธr ting enda enklere. CodeIgniter har innebygde funksjoner for รฅ lage HTML-skjemaer.
  • Validering spiller en svรฆrt kritisk rolle ved behandling av data fra skjemaer.
  • I denne opplรฆringen har vi sett store valideringsstrategier og deres fordeler og ulemper. Vi lรฆrte ogsรฅ hvordan du setter valideringsregler og ut feilmeldinger ved รฅ bruke CodeIgniters innebygde valideringsbibliotek. Vi har avsluttet leksjonen med รฅ implementere kunnskapen som er oppnรฅdd i en praktisk anvendelse.

Oppsummer dette innlegget med: