CodeIgniter Form Validering med Form Submit Exempel
Formulär i CodeIgniter
Formulär är ett sätt för användare att interagera med applikationen och skicka in data. Den kan användas för ett kontaktformulär som en besökare på webbplatsen kan fylla i och skicka informationen till oss. Informationen som tas emot lagras vanligtvis i databasen eller skickas via e-post.
HTML-formulärstruktur
Följande kod visar strukturen för ett typiskt HTML-formulär.
<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>
HÄR,
- … är formulärets inledande och avslutande taggar. Attributet id och name anger formulärets namn och id. Metodattributet anger vilket HTTP-verb som ska användas. Detta anges vanligtvis av POST-verb
- Anger formulärelementen. Namnattributet är variabelnamnet som skickas till backend-servern för bearbetning.
CodeIgniter Form Helper
HTML är bra är lätt att förstå och skriva, men CodeIgniter gör saker ännu enklare. CodeIgniter har inbyggda funktioner för att skapa HTML-formulär.
Låt oss överväga följande CodeIgniter-formulärsändningskod som använder formulärhjälpen för att skapa ett formulär
<?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(); ?>
HÄR,
- echo form_open('create_user.php', ['id' => 'frmUsers']); skapar formulärets öppningstagg, ställer in åtgärden till POST Verb och ställer in åtgärdens URL till create_user.php
- echo form_label('Användar-ID', 'användar-id'); skapar en etikett som läser User ID för inmatningsfältet med namnet på user_id.
- echo form_input(['namn' => 'användar-id']); skapar ett inmatningsfält av texttyp med namnet user_id
- echo form_submit('btnSubmit', 'Skapa användare'); skapar en skicka-knapp med etiketten Skapa användare
- echo form_close(); stänger formuläret
Som du kan se från ovanstående CodeIgniter-kod, gör formulärhjälparna det enkelt för oss att skapa formulär med ren PHP. Genom att skicka attribut till formulärhjälpmetoderna kan vi anpassa HTML-koden som genereras för formuläret.
Ovanstående kod genererar följande HTML-formulärkod
<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örsta fördelarna med att använda formulärhjälpen är att den genererar semantiskt korrekt kod som följer de uppställda HTML-standarderna.
Du kan se den officiella CodeIgniter-dokumentationen för mer information
https://codeigniter.com/user_guide/helpers/form_helper.html
CodeIgniter Form Exempel
Efter att ha täckt grunderna i CodeIgniter, låt oss gå tillbaka till vårt handledningsprojekt som vi har arbetat med under hela detta CodeIgniter Tutorial Series. Sammanfattningsvis bygger handledningsprojektet en kontakthanteringsapp som lagrar detaljerna i databasen.
Skapa kontakt
i den tidigare handledningen skapade vi rutter för våra applikationer och enkla vyer. Öppna application/views/contacts/create.php
Ändra koden för create.php enligt följande
<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>
Notera: koden ovan använder vanlig HTML för att skapa formulär.
Låt oss nu se hur våra formulär ser ut i webbläsaren
Ladda följande URL i vår webbläsare.
http://localhost:3000/contacts/create
Om du har skapat självstudieprojektet bör du kunna se följande
Formulärvalidering i CodeIgniter
Validering spelar en mycket kritisk roll vid bearbetning av data från formulär. Låt oss säga att en användare registrerar sig på en webbplats; vi vill se till att de fyller i sina nödvändiga uppgifter och e-postadresser. Vi måste se till att e-postadressen som har angetts är giltig. Om vi arbetar med datumvärden vill vi se till att datumintervallen är giltiga. Vi skulle inte behöva acceptera ett datum som har 32 dagar i en månad osv.
Validering löser ovanstående problem. CodeIgniter Validering görs på två (2) fronter när man arbetar med webbapplikationer.
Verifiering på klientsidan görs från webbläsarens sida. Detta innebär vanligtvis användning av HTML och JavaManus. Validering på klientsidan förbättrar prestandan eftersom allt görs på klientsidan. Så det finns inget behov av att skicka in data till servern. Nackdelen med validering på klientsidan är att användaren har kontroll över den. Om du litar på JavaSkript för att validera och användaren inaktiverar JavaSkript i webbläsaren, då misslyckas din validering.
Verifiering på serversidan görs på serversidan. Nackdelen med denna validering är att användaren måste skicka in data till servern för bearbetning och vänta på svaret. Detta förbrukar nätverksresurser och kan försämra prestandan. Den stora fördelen med validering på serversidan är att du har större kontroll och att du är säker på att dina valideringsregler fungerar även om användaren inaktiverar JavaSkript i webbläsaren.
En bättre strategi är att använda klientsidan som primär valideringsstrategi och serversidan som reservmekanism.
Lägga till regler för formulärvalidering
CodeIgniter har ett inbyggt valideringsbibliotek. Biblioteket laddas med följande rad
$this->load->library('form_validation');
CodeIgniter-formulärvalideringsbiblioteket kan användas för att utföra några av följande åtgärder
- Kontrollera efter obligatoriska fält. Detta undersöker de inskickade värdena och returnerar ett fel om ett fält som har taggats som obligatoriskt inte har ett värde
- Validering av datatyp – vissa fält kan kräva endast numeriska värden. Om ett icke-numeriskt värde upptäcks returnerar biblioteket ett fel. Utförandet av formulärinlämningen avbryts också.
- Längdvalidering – vissa datatyper kräver att fält har ett visst lägsta eller högsta antal tecken. Valideringsbiblioteket kommer väl till pass i sådana fall.
- Datasanering – valideringsbiblioteket har också funktioner som tar bort skadlig kod från inlämnad data av säkerhetsskäl. Om till exempel de inlämnade värdena har aktiva JavaScript eller SQL Injection-kod i dem, valideringsbiblioteket tar bort den skadliga koden och gör den oanvändbar.
- Validera unika databasfält – anta att du har ett formulär där användare registrerar sig med en e-postadress. Du skulle vilja se till att e-postadressen är unik. Biblioteket gör det enkelt för dig att kontrollera inlämnad data mot en databastabell och fält. Detta låter dig veta att värdet redan har tagits upp.
Valideringsregler ställs in med följande format
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
HÄR,
- 'fält' angav namnet på formulärfältet som ska valideras av biblioteket
- 'mänskligt läsbart fält' anger det mänskligt läsbara formatet för fältet under validering. Detta visas tillbaka för användaren när ett fel uppstår.
- 'regel' anger valideringsregeln som ska tillämpas såsom obligatorisk, numerisk, kontrollera om minsta längd är... etc.
- ['anpassat meddelande'] är valfritt och kan användas för att ställa in ett anpassat valideringsmeddelande som ska visas när valideringsregeln misslyckas.
Följande är ett formulär som skickas in i CodeIgniter-exemplet för att validera kontaktnamnet
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
HÄR,
- Ovanstående kod kontrollerar om fältet contact_number har angetts. Om det inte är inställt returneras ett felmeddelande som säger att fältet Kontaktnummer krävs.
För att köra valideringen mot de uppställda reglerna använder vi följande funktion i valideringsbiblioteket
$this->form_validation->run()
Om ovanstående kod returnerar false, har en eller flera uppsättningsregler misslyckats. Om det returnerar sant har alla valideringsreglerna passerat och du kan fortsätta med ytterligare åtgärder.
Låt oss titta på fler exempel på valideringsregler. Anta att du vill validera några fält som säger kontaktens namn, nummer och e-postadress, du kan använda följande kod för att åstadkomma 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);
HÄR,
- I ovanstående e-postvalidering i CodeIgniter-exemplet tillhandahåller vi en rad fält med regler för funktionen set_rules i biblioteket. Detta gör det lättare när du validerar vissa fält.
Unik validering
Om vi vill validera kontaktnumret för att säkerställa att vi inte sparar samma nummer två gånger kan vi använda följande regel för att göra det.
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
HÄR,
- | används för att koppla ihop flera regler
- is_unique[contacts.contact_number] kontrollerar om värdet för contact_number är unikt mot fältvärdena för kontaktnummer i databastabellens kontakter.
Visar felmeddelanden om formulärvalidering
Om ett fel uppstår under bearbetningen av formuläret kan du använda följande kod för att visa de valideringsfel som uppstod
<?php echo validation_errors(); ?>
HÄR,
- Ovanstående funktion returnerar alla fel som uppstod.
Fylla på inskickade formulärdata: Sticky Forms
Vissa formulär har många fält, och om ett fel har uppstått så vill man försäkra sig om att data som lagts till korrekt bevaras. Valideringsbiblioteket har mekanismer för att åstadkomma det. Det gör vi genom att använda följande kod.
<?php echo set_value('field_name'); ?>
HÄR,
- Ovanstående kod visar den inmatning som användaren hade angett.
För en fullständig referensguide om metoderna som är tillgängliga under valideringsbiblioteket, kan du hänvisa till API-dokumentationen från den officiella användarhandboken för CodeIgniter
https://codeigniter.com/userguide3/libraries/form_validation.html
CodeIgniter Form Validation Exempel
Under hela denna handledningsserie har vi lagt till mer kod till vårt handledningsprojekt som är en kontakthanteringsapplikation. I det här avsnittet kommer vi att ladda valideringsbiblioteket och se hur vi kan använda det praktiskt med hjälp av en verklig exempelapplikation.
Ändra ruttkoden enligt följande för att inkludera 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';
Låt oss nu ladda formulärvalideringsbiblioteket i kontaktkontrollern och ställa in några valideringsregler.
Ändra koden som visas i nedanstående formulärvalidering i CodeIgniter-exemplet:
<?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'); } }
HÄR,
- $rules = array(…) set definierar valideringsreglerna
- $this->form_validation->set_rules($rules); anger valideringsreglerna
- if ($this->form_validation->run() == FALSE) {...} kör valideringsreglerna och om de misslyckas visas formuläret igen med valideringsfel. Om valideringen går igenom, omdirigerar vi helt enkelt till kontaktlistan. Under normala omständigheter skulle vi skriva data till databasen. Vi kommer att göra det i nästa handledning när vi tittar på databaser.
Ändra skapavyn i application/contacts/create.php-koden som visas i nedanstående exempel på formulärvalidering 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>
HÄR,
- vi visar eventuella fel som uppstår under valideringsprocessen
- ställer in värdet som tidigare ställts in om något
Du måste ladda följande URL i din webbläsare. Klicka sedan på Skapa kontakt utan att ange några värden
Sammanfattning
- Formulär är ett sätt för användare att interagera med applikationen och skicka in data.
- HTML är bra är lätt att förstå och skriva, men CodeIgniter gör saker ännu enklare. CodeIgniter har inbyggda funktioner för att skapa HTML-formulär.
- Validering spelar en mycket kritisk roll vid bearbetning av data från formulär.
- I den här handledningen har vi sett stora valideringsstrategier och deras för- och nackdelar. Vi lärde oss också hur man ställer in valideringsregler och skickar ut felmeddelanden med hjälp av CodeIgniters inbyggda valideringsbibliotek. Vi har avslutat lektionen med att implementera den kunskap vi har fått i en praktisk tillämpning.