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.