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.

  • 📝 former: Formulär låter användare skicka in data, ofta sparade i databasen eller skickade via e-post.
  • 🧰 Formulärhjälp: Funktioner som form_open, form_input och form_submit genererar standardkompatibel HTML.
  • 🛡️ Två fronter: Validering på klientsidan är snabb; validering på serversidan är säker och kan inte kringgås.
  • 📏 regler: set_rules definierar obligatoriska kontroller av datatyp, längd, sanering och unikhet.
  • 🔁 Springa: Metoden run() returnerar falskt om någon regel misslyckas och sant när alla godkänns.
  • ⚠️ fel: validation_errors() skriver ut meddelandena för de fält som misslyckades.
  • 📌 Klibbiga blanketter: set_value() fyller i korrekt ifyllda fält igen efter en misslyckad inlämning.

CodeValidering av tändningsformulär

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:

CodeSkapa kontaktformulär för Igniter

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:

CodeFel vid validering av Igniter-formulär visas

Vanliga frågor

Klientsidesvalidering kan kringgås genom att inaktivera JavaSkript eller att skicka en direkt förfrågan. Serversidesvalidering körs där användaren inte har någon kontroll, så det är den pålitliga sista försvarslinjen.

Ett fast formulär fyller i fälten som användaren redan har fyllt i efter en misslyckad inlämning med hjälp av set_value(). Det sparar användaren från att behöva skriva in igenping giltiga data när endast ett fält orsakade felet.

is_unique[table.field] kontrollerar det inskickade värdet mot en kolumn i databasen och misslyckas om det redan finns. Det används för fält som e-postadress eller användarnamn som inte får dupliceras.

Ja. Från en fältlista kan AI generera set_rules-matrisen med obligatoriska regler, valid_email-regler och längdregler samt anpassade meddelanden. RevVisa reglerna mot din affärslogik och ditt databasschema.

Formhjälpen genererar standardkompatibel HTML, escaper attribut och håller formulär konsekventa. Den integrerar också med valideringshjälpare som set_value, vilket minskar repetitiv markup i vyer.

Sammanfatta detta inlägg med: