CodeIgniter 4 Formulärvalidering och formulärinlämning med exempel
⚡ Smart sammanfattning
CodeIgniter 4 Form Validation kontrollerar användarinmatning innan den bearbetas. Formulär skapas med formulärhjälpen, och det inbyggda valideringsbiblioteket anger regler som obligatorisk, numerisk och är_unik, visar sedan fel och fyller i fasta fält igen när valideringen misslyckas.

Form i CodeTändare 4
Formulär ger användare möjlighet att interagera med applikationen och skicka in data. Ett formulär kan användas för ett kontaktformulär som en besökare på webbplatsen kan fylla i och skicka informationen till oss. Den mottagna informationen 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. Attributen id och name anger formulärets namn och id. Attributet method anger vilket HTTP-verb som ska användas, vanligtvis POST.
- anger formulärelementen. Attributet name är variabelnamnet som skickas till backend-servern för bearbetning.
CodeHjälpmedel för tändform
HTML är lätt att förstå och skriva, men Codeigniter gör saker och ting ännu enklare. CodeIgniter har inbyggda funktioner för att skapa HTML-formulär. Låt oss titta på följande. CodeIgniter-formulärkod 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 metoden till POST och ställer in åtgärden URL till create_user.php.
- echo form_label('Användar-ID', 'användar-ID'); skapar en etikett som läser användar-ID för inmatningsfältet user_id.
- echo form_input(['name' => 'user_id']); skapar ett textinmatningsfält 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 gör formulärhjälpmedel det enkelt 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. Koden ovan 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>
Den största fördelen med att använda formulärhjälpen är att den genererar semantiskt korrekt kod som följer HTML-standarderna. Du kan hänvisa till den officiella CodeDokumentation för tändningsanordningen för mer information: https://codeigniter.com/user_guide/helpers/form_helper.html.
CodeExempel på tändningsform
Efter att ha gått igenom grunderna i CodeIgniter, låt oss återgå till vårt handledningsprojekt, som vi har arbetat med under hela den här tiden CodeIgniter handledningsserieSammanfattningsvis bygger handledningsprojektet en app för kontakthantering som lagrar informationen i databasen.
Skapa kontakt
I den föregående handledningen skapade vi rutter för vår applikation och enkla vyer. Öppna application/views/contacts/create.php och ä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>
Obs: Koden ovan använder vanlig HTML för att skapa formuläret. Låt oss nu se hur vårt formulär ser ut i webbläsaren. Ladda följande URL i din webbläsare: http://localhost:3000/contacts/createOm du har byggt handledningsprojektet bör du se följande:
Formulärvalidering i Codeigniter
Validering spelar en mycket viktig roll vid bearbetning av data från formulär. Anta att en användare registrerar sig på en webbplats; vi vill se till att de fyller i sina obligatoriska uppgifter och en giltig e-postadress. Om vi arbetar med datumvärden vill vi se till att datumintervallen är giltiga, så vi skulle inte acceptera ett datum med 32 dagar i en månad.
Validering löser dessa problem. CodeIgniter-validering görs på två fronter när man arbetar med webbapplikationer.
Klientsidesvalidering görs i webbläsaren, vanligtvis med HTML och JavaSkript. Det förbättrar prestandan eftersom allt görs på klienten, så det finns inget behov av att skicka in data till servern. Nackdelen är att användaren har kontroll över det; om du förlitar dig på JavaSkript för att validera och användaren inaktiverar JavaSkript, din validering kommer att misslyckas.
Serversidesvalidering görs på servern. Nackdelen är att användaren måste skicka in data till servern och vänta på svar, vilket använder nätverksresurser och kan försämra prestandan. Den största fördelen är större kontroll och försäkran om att dina valideringsregler fungerar även om användaren inaktiverar. JavaManus.
En bättre strategi är att använda klientsidesvalidering som primär strategi och serversidesvalidering som en 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');
Ocuco-landskapet CodeValideringsbiblioteket för Igniter-formulär kan utföra några av följande åtgärder:
- Kontrollera obligatoriska fält. Den undersöker de inskickade värdena och returnerar ett fel om ett fält som taggats som obligatoriskt saknar värde.
- Validering av datatyp – vissa fält kan endast kräva numeriska värden. Om ett icke-numeriskt värde upptäcks returnerar biblioteket ett fel och avbryter formulärinlämningen.
- Längdvalidering – vissa fält kräver ett visst minimum- eller maximumantal tecken. Valideringsbiblioteket hanterar sådana fall.
- Datasanering – biblioteket kan ta bort skadlig kod från inskickade data för säkerhets skull. Om de inskickade värdena har aktiva JavaSkript- eller SQL-injektionskod, biblioteket raderar den skadliga koden och gör den oanvändbar.
- Validera unika databasfält – anta att du har ett registreringsformulär med en e-postadress och vill säkerställa att adressen är unik. Biblioteket gör det enkelt att kontrollera den inskickade informationen mot en databastabell och ett fält.
Valideringsregler anges med följande format:
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
Här:
- 'fält' anger namnet på formulärfältet som ska valideras av biblioteket.
- 'läsbart fält' anger det läsbara formatet för fältet, som visas tillbaka till användaren när ett fel uppstår.
- 'regel' anger vilken valideringsregel som ska tillämpas, till exempel obligatorisk, numerisk eller en minsta längd.
- ['anpassat meddelande'] är valfritt och kan ställa in ett anpassat valideringsmeddelande som visas när regeln misslyckas.
Följande är a CodeExempel på tändningsfunktion för att validera kontaktnumret:
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
Här:
- Koden ovan kontrollerar om fältet contact_number har angetts. Om det inte är angivet returnerar den ett felmeddelande som säger att fältet Contact Number är obligatoriskt.
För att köra valideringen mot de angivna reglerna använder vi följande funktion i valideringsbiblioteket:
$this->form_validation->run()
Om koden ovan returnerar falskt, har en eller flera uppsatta regler misslyckats. Om den returnerar sant, har alla valideringsregler godkänts och du kan fortsätta med ytterligare åtgärder.
Låt oss titta på fler exempel på valideringsregler. Anta att du vill validera flera fält, till exempel kontaktnamn, nummer och e-postadress. Du kan använda följande kod:
$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 exemplet ovan tillhandahåller vi en array av fält med regler för bibliotekets funktion set_rules. Detta gör det enklare när du validerar flera 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:
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
Här:
- | används för att sammanföra 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 valideringsfelen:
<?php echo validation_errors(); ?>
Här:
- Funktionen ovan returnerar alla fel som inträffade.
Fylla på inskickade formulärdata: Sticky Forms
Vissa formulär har många fält, och om ett fel uppstår vill du se till att de data som lades till korrekt bevaras. Valideringsbiblioteket har mekanismer för att åstadkomma detta med hjälp av följande kod:
<?php echo set_value('field_name'); ?>
Här:
- Koden ovan visar den inmatning som användaren har angett.
För en komplett referensguide om metoderna som finns tillgängliga i valideringsbiblioteket, se API-dokumentationen i den officiella CodeBruksanvisning för tändaren: https://codeigniter.com/userguide3/libraries/form_validation.html.
CodeExempel på validering av tändningsformulär
Under den här handledningsserien har vi lagt till kod i vårt handledningsprojekt, ett program för kontakthantering. I det här avsnittet kommer vi att ladda valideringsbiblioteket och se hur man använder det i praktiken i ett verkligt exempel. Ändra routes-koden enligt följande för att inkludera 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';
Låt oss nu ladda formulärvalideringsbiblioteket i kontaktkontrollen och ställa in några valideringsregler. Ändra koden enligt nedan:
<?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(…) definierar valideringsreglerna.
- $this->form_validation->set_rules($rules); ställer in valideringsreglerna.
- om ($this->form_validation->run() == FALSE) {…} kör valideringsreglerna, och om de misslyckas visas formuläret igen med valideringsfel. Om valideringen godkänns omdirigerar vi till sidan med kontaktlistan. Under normala omständigheter skulle vi skriva data till databasen, vilket vi gör i nästa handledning om databaser.
Ändra create-vyn i application/views/contacts/create.php enligt nedan:
<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:
- visar de fel som uppstår, om några, under valideringsprocessen.
- anger det värde som tidigare angavs, om något.
Ladda följande URL i din webbläsare och klicka sedan på Skapa kontakt utan att ange några värden:


