CodeIgniter Form Validering med Form Submit Eksempel

Formular i CodeIgniter

Formularer giver brugerne mulighed for at interagere med applikationen og indsende data. Den kan bruges til en kontakt os formular, som en besøgende på hjemmesiden kan udfylde og sende oplysningerne til os. De modtagne oplysninger gemmes normalt i databasen eller sendes via e-mail.

HTML-formularstruktur

Følgende kode viser strukturen af ​​en typisk HTML-formular.

<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 formularens åbnings- og afsluttende tags. Id og navn-attributten angiver formularens navn og id. Metodeattributten angiver det HTTP-verb, der skal bruges. Dette er normalt angivet af POST verbum
  • Angiver formularelementerne. Navneattributten er variabelnavnet, der sendes til backend-serveren til behandling.

CodeIgniter Form Helper

HTML er fantastisk er let at forstå og skrive, men CodeIgniter gør tingene endnu nemmere. CodeIgniter har indbyggede funktioner til at oprette HTML-formularer.

Lad os overveje følgende CodeIgniter-formularindsendelseskode, der bruger formularhjælperen til at oprette en formular

 <?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']); opretter formularens åbningstag, indstiller handlingen til POST Verb og indstiller handlingens URL til create_user.php
  • echo form_label('Bruger-id', 'bruger_id'); opretter en etiket, der læser bruger-id for inputfeltet med navnet på bruger_id.
  • echo form_input(['navn' => 'bruger_id']); opretter et inputfelt af teksttype med navnet på bruger_id
  • echo form_submit('btnSubmit', 'Opret bruger'); opretter en indsend-knap med etiketten Opret bruger
  • echo form_close(); lukker formularen

Som du kan se fra ovenstående CodeIgniter-kode, gør formularhjælpere det nemt for os at oprette formularer ved hjælp af ren PHP. Ved at videregive attributter til formularhjælpemetoderne kan vi tilpasse den HTML, der genereres til formularen.

Ovenstående kode genererer følgende HTML-formularkode

        <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 fordele ved at bruge formularhjælperen er, at den genererer semantisk korrekt kode, der overholder de fastsatte HTML-standarder.

Du kan henvise til den officielle CodeIgniter-dokumentation for flere detaljer

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

CodeIgniter Form Eksempel

Efter at have dækket det grundlæggende i CodeIgniter, lad os vende tilbage til vores selvstudieprojekt, som vi har arbejdet på gennem hele dette CodeIgniter Tutorial Series. Sammenfattende bygger selvstudieprojektet en app til håndtering af kontakter, der gemmer detaljerne i databasen.

Opret kontakt

i den forrige tutorial oprettede vi ruter til vores applikationer og enkle visninger. Åbn applikation/views/contacts/create.php

Rediger 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>

Bemærk: ovenstående kode bruger almindelig HTML til at oprette formularer.

Lad os nu se, hvordan vores formularer ser ud i webbrowseren

Indlæs følgende URL i vores webbrowser.

http://localhost:3000/contacts/create

Hvis du har oprettet selvstudieprojektet, burde du kunne se følgende

CodeIgniter Form

Formularvalidering i CodeIgniter

Validering spiller en meget kritisk rolle ved behandling af data fra formularer. Lad os sige, at en bruger tilmelder sig et websted; vi vil sikre os, at de udfylder deres nødvendige oplysninger og e-mailadresse. Vi skal sikre os, at den e-mailadresse, der er indtastet, er gyldig. Hvis vi arbejder med datoværdier, vil vi gerne sikre os, at datointervallerne er gyldige. Vi ville ikke skulle acceptere en dato, der har 32 dage i en måned osv.

Validering løser ovenstående problemer. CodeIgniter Validering udføres på to (2) fronter, når der arbejdes med webapplikationer.

Validering på klientsiden udføres fra webbrowserens side. Dette involverer normalt brugen af ​​HTML og JavaManuskript. Validering på klientsiden forbedrer ydeevnen, da alt foregår på klientsiden. Så der er ingen grund til at sende dataene til serveren. Ulempen ved validering på klientsiden er, at brugeren har kontrol over det. Hvis du stoler på JavaScript til at validere og brugeren deaktiverer JavaScript i browseren, så mislykkes din validering.

Server-side validering udføres på server-siden. Ulempen ved denne validering er, at brugeren skal sende dataene til serveren til behandling og vente på svaret. Dette bruger netværksressourcer og kan forringe ydeevnen. Den største fordel ved validering på serversiden er, at du har større kontrol, og du er sikker på, at dine valideringsregler fungerer, selvom brugeren deaktiverer JavaScript i browseren.

En bedre strategi er at bruge klientsiden som den primære valideringsstrategi og serversiden som en reservemekanisme.

Tilføjelse af formularvalideringsregler

CodeIgniter har et indbygget valideringsbibliotek. Biblioteket indlæses ved hjælp af følgende linje

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

CodeIgniter-formularvalideringsbiblioteket kan bruges til at udføre nogle af følgende handlinger

  • Tjek for obligatoriske felter. Dette undersøger de indsendte værdier og returnerer en fejl, hvis et felt, der er blevet mærket som påkrævet, ikke har en værdi
  • Datatypevalidering – nogle felter kræver muligvis kun numeriske værdier. Hvis en ikke-numerisk værdi detekteres, returnerer biblioteket en fejl. Eksekvering af formularindsendelsen afbrydes også.
  • Længdevalidering – nogle datatyper kræver, at felter har et vist minimum eller maksimum antal tegn. Valideringsbiblioteket er praktisk i sådanne tilfælde.
  • Datasanering – valideringsbiblioteket har også funktioner, der fjerner ondsindet kode fra de indsendte data af sikkerhedsmæssige årsager. Hvis for eksempel de indsendte værdier har aktive JavaScript eller SQL Injection-kode i dem, valideringsbiblioteket fjerner den skadelige kode og gør den ubrugelig.
  • Valider unikke databasefelter - antag, at du har en formular, hvor brugere tilmelder sig ved hjælp af en e-mailadresse. Du vil gerne sikre dig, at e-mailadressen er unik. Biblioteket gør det nemt for dig at kontrollere de indsendte data mod en databasetabel og et felt. Dette giver dig mulighed for at vide, at værdien allerede er optaget.

Valideringsregler indstilles ved hjælp af følgende format

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

HER,

  • 'felt' specificerede formularfeltnavnet, der skal valideres af biblioteket
  • 'human readable field' angiver det menneskeligt læsbare format for feltet under validering. Dette vises tilbage til brugeren, når der opstår en fejl.
  • 'regel' angiver den valideringsregel, der skal anvendes, såsom påkrævet, numerisk, tjek om minimumslængden er... osv.
  • ['custom message'] er valgfri og kan bruges til at indstille en brugerdefineret valideringsmeddelelse, der skal vises, når valideringsreglen mislykkes.

Følgende er en formular, der indsendes i CodeIgniter eksempel til validering af kontaktens navn

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

HER,

  • Ovenstående kode kontrollerer, om feltet kontaktnummer er indtastet. Hvis det ikke er indstillet, returneres en fejl, der siger, at feltet Kontaktnummer er påkrævet.

For at køre valideringen mod de fastsatte regler, bruger vi følgende funktion i valideringsbiblioteket

$this->form_validation->run()

Hvis ovenstående kode returnerer falsk, har en eller flere sæt regler mislykkedes. Hvis det returnerer sandt, er alle valideringsreglerne bestået, og du kan fortsætte med yderligere handling.

Lad os se på flere eksempler på valideringsregler. Antag, at du vil validere, at nogle felter siger kontaktens navn, nummer og e-mailadresse, kan du bruge følgende kode til at opnå 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 ovenstående e-mail-validering i CodeIgniter-eksemplet giver vi en række felter med regler for funktionen set_rules i biblioteket. Dette gør det nemmere, når du validerer nogle felter.

Unik validering

Hvis vi ønsker at validere kontaktnummeret for at sikre, at vi ikke gemmer det samme nummer to gange, kan vi bruge følgende regel til at gøre det.

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

HER,

  • | bruges til at sætte flere regler sammen
  • is_unique[contacts.contact_number] kontrollerer, om værdien for contact_number er unik i forhold til kontaktnummer-feltværdierne i databasetabellens kontakter.

Viser formularvalideringsfejlmeddelelser

Hvis der opstår en fejl under behandlingen af ​​formularen, kan du bruge følgende kode til at vise de opståede valideringsfejl

<?php echo validation_errors(); ?>

HER,

  • Ovenstående funktion returnerer alle de fejl, der er opstået.

Udfyldning af indsendte formulardata: Sticky Forms

Nogle formularer har mange felter, og hvis der er opstået en fejl, så vil man sikre sig, at de data, der er tilføjet korrekt, er bevaret. Valideringsbiblioteket har mekanismer til at opnå det. Det gør vi ved at bruge følgende kode.

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

HER,

  • Ovenstående kode viser det input, som brugeren havde indtastet.

For en komplet referencevejledning om de metoder, der er tilgængelige under valideringsbiblioteket, kan du henvise til API-dokumentationen fra den officielle brugervejledning til CodeIgniter

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

CodeIgniter Form Validation Eksempel

Igennem disse selvstudieserier har vi tilføjet mere kode til vores selvstudieprojekt, som er en kontaktadministrationsapplikation. I denne sektion vil vi indlæse valideringsbiblioteket og se, hvordan vi kan bruge det til praktisk brug ved hjælp af en applikation i den virkelige verden.

Rediger rutekoden som følger for at inkludere butiksmetoden

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

Lad os nu indlæse formularvalideringsbiblioteket i kontaktcontrolleren og indstille nogle valideringsregler.

Rediger koden som vist i nedenstående formularvalidering i CodeIgniter eksempel:

<?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(…) sæt definerer valideringsreglerne
  • $this->form_validation->set_rules($rules); sætter valideringsreglerne
  • if ($this->form_validation->run() == FALSE) {...} kører valideringsreglerne, og hvis de mislykkes, vises formularen igen med valideringsfejl. Hvis valideringen går igennem, omdirigerer vi blot til listen over kontaktpersoner. Under normale omstændigheder ville vi skrive dataene til databasen. Det vil vi gøre i de næste tutorials, når vi ser på databaser.

Rediger oprettelsesvisningen i application/contacts/create.php-koden som vist i nedenstående eksempel på formularvalidering CodeIgniter:

<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 de fejl, der opstår, hvis nogen under valideringsprocessen
  • indstiller den værdi, der tidligere blev indstillet, hvis nogen

Du skal indlæse følgende URL i din webbrowser. Klik derefter på Opret kontakt uden at indtaste nogen værdier

CodeIgniter-formularvalidering

Resumé

  • Formularer giver brugerne mulighed for at interagere med applikationen og indsende data.
  • HTML er fantastisk er let at forstå og skrive, men CodeIgniter gør tingene endnu enklere. CodeIgniter har indbyggede funktioner til at oprette HTML-formularer.
  • Validering spiller en meget kritisk rolle ved behandling af data fra formularer.
  • I denne tutorial har vi set store valideringsstrategier og deres fordele og ulemper. Vi lærte også, hvordan man indstiller valideringsregler og udsender fejlmeddelelser ved hjælp af CodeIgniters indbyggede valideringsbibliotek. Vi har afsluttet lektionen med at implementere den opnåede viden i en praktisk anvendelse.