CodeIgniter-formuliervalidatie met voorbeeld van het indienen van formulieren
Formulier in CodeIgniter
Formulieren bieden gebruikers een manier om met de applicatie te interacteren en gegevens in te dienen. Het kan worden gebruikt voor een contactformulier dat een bezoeker van de website kan invullen en de informatie naar ons kan sturen. De ontvangen informatie wordt meestal opgeslagen in de database of via e-mail verzonden.
HTML-formulierstructuur
De volgende code toont de structuur van een typisch HTML-formulier.
<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>
HIER,
- … zijn de openings- en sluitingstags van het formulier. Het id- en name-attribuut specificeren de naam en id van het formulier. Het method-attribuut specificeert het HTTP-werkwoord dat moet worden gebruikt. Dit wordt meestal gespecificeerd door het POST-werkwoord
- Specificeert de formulierelementen. Het naamkenmerk is de naam van de variabele die ter verwerking naar de backend-server wordt verzonden.
CodeIgniter-formulierhelper
HTML is geweldig en gemakkelijk te begrijpen en te schrijven, maar CodeIgniter maakt de zaken nog eenvoudiger. CodeIgniter heeft ingebouwde functies om HTML-formulieren te maken.
Laten we de volgende CodeIgniter-formuliercode bekijken die de formulierhelper gebruikt om een formulier te maken
<?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(); ?>
HIER,
- echo form_open('create_user.php', ['id' => 'frmUsers']); creëert de openingstag van het formulier, stelt de actie in op POST Verb en stelt de actie-URL in op create_user.php
- echo form_label('Gebruikers-ID', 'user_id'); maakt een label met de gebruikers-ID voor het invoerveld met de naam user_id.
- echo form_input(['naam' => 'gebruikersnaam']); creëert een invoerveld van het teksttype met de naam user_id
- echo form_submit('btnSubmit', 'Gebruiker aanmaken'); maakt een verzendknop aan met het label Gebruiker maken
- echoform_close(); sluit het formulier
Zoals je kunt zien in de bovenstaande CodeIgniter-code, maken formulierhelpers het voor ons gemakkelijk om formulieren te maken met pure PHP. Door attributen door te geven aan de formulierhelpermethoden, kunnen we de HTML aanpassen die voor het formulier wordt gegenereerd.
De bovenstaande code genereert de volgende HTML-formuliercode
<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 grootste voordelen van het gebruik van de formulierhelper zijn dat deze semantisch correcte code genereert die voldoet aan de gestelde HTML-standaarden.
Voor meer details kunt u de officiële CodeIgniter-documentatie raadplegen
https://codeigniter.com/user_guide/helpers/form_helper.html
CodeIgniter-formuliervoorbeeld
Nadat we de basisbeginselen van CodeIgniter hebben besproken, gaan we terug naar ons tutorialproject waar we de hele tijd aan hebben gewerkt CodeIgniter-tutorialreeksKortom, het tutorialproject bouwt een app voor contactenbeheer die de gegevens in de database opslaat.
Contact maken
in de vorige tutorial hebben we routes voor onze applicaties en eenvoudige weergaven gemaakt. Open applicatie/views/contacten/create.php
Wijzig de code voor create.php als volgt
<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>
Opmerking: de bovenstaande code gebruikt gewone HTML om formulieren te maken.
Laten we nu kijken hoe onze formulieren er in de webbrowser uitzien
Laad de volgende URL in uw webbrowser.
http://localhost:3000/contacts/create
Als u het tutorialproject hebt gemaakt, zou u het volgende moeten kunnen zien
Formuliervalidatie in CodeIgniter
Validatie speelt een zeer kritische rol bij het verwerken van gegevens uit formulieren. Stel dat een gebruiker zich aanmeldt op een website; we willen er zeker van zijn dat ze hun vereiste gegevens en e-mailadres invullen. We moeten er zeker van zijn dat het ingevoerde e-mailadres geldig is. Als we werken met datumwaarden, dan willen we er zeker van zijn dat de datumbereiken geldig zijn. We hoeven geen datum te accepteren die 32 dagen in een maand heeft, etc.
Validatie lost de bovenstaande problemen op. CodeIgniter Validatie gebeurt op twee (2) fronten bij het werken met webapplicaties.
Validatie aan de clientzijde gebeurt via de webbrowser. Meestal gaat het hierbij om het gebruik van HTML en JavaScript. Client-side validatie verbetert de prestaties omdat alles aan de client-side wordt gedaan. Het is dus niet nodig om de gegevens naar de server te sturen. Het nadeel van client-side validatie is dat de gebruiker er controle over heeft. Als u vertrouwt op JavaScript om te valideren en de gebruiker schakelt uit JavaScript in de browser, dan zal uw validatie mislukken.
Validatie aan de serverzijde vindt plaats aan de serverzijde. Het nadeel van deze validatie is dat de gebruiker de gegevens ter verwerking naar de server moet sturen en op het antwoord moet wachten. Dit verbruikt netwerkbronnen en kan de prestaties verslechteren. Het grote voordeel van server-side validatie is dat u meer controle heeft en dat u er zeker van bent dat uw validatieregels werken, zelfs als de gebruiker deze uitschakelt JavaScript in de browser.
Een betere strategie is om de clientzijde als primaire validatiestrategie en de serverzijde als terugvalmechanisme te gebruiken.
Formuliervalidatieregels toevoegen
CodeIgniter heeft een ingebouwde validatiebibliotheek. De bibliotheek wordt geladen met behulp van de volgende regel
$this->load->library('form_validation');
De CodeIgniter-formuliervalidatiebibliotheek kan worden gebruikt om een aantal van de volgende acties uit te voeren
- Controleer op verplichte velden. Hierbij worden de ingediende waarden onderzocht en wordt een fout geretourneerd als een veld dat als vereist is getagd, geen waarde heeft
- Validatie van gegevenstype – sommige velden vereisen mogelijk alleen numerieke waarden. Als er een niet-numerieke waarde wordt gedetecteerd, retourneert de bibliotheek een fout. Ook de uitvoering van het indienen van het formulier wordt afgebroken.
- Lengtevalidatie – sommige gegevenstypen vereisen dat velden een bepaald minimum- of maximumaantal tekens bevatten. In zulke gevallen komt de validatiebibliotheek goed van pas.
- Gegevensopschoning – de validatiebibliotheek beschikt ook over mogelijkheden die om veiligheidsredenen kwaadaardige code uit de ingediende gegevens verwijderen. Als de ingediende waarden bijvoorbeeld actief zijn JavaScript- of SQL-injectiecode wordt door de validatiebibliotheek verwijderd en onbruikbaar gemaakt.
- Valideer unieke databasevelden – stel dat u een formulier hebt waar gebruikers zich registreren met een e-mailadres. U wilt er zeker van zijn dat het e-mailadres uniek is. De bibliotheek maakt het u gemakkelijk om de ingediende gegevens te controleren aan de hand van een databasetabel en -veld. Zo weet u zeker dat de waarde al is gebruikt.
Validatieregels worden ingesteld met behulp van de volgende indeling
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
HIER,
- 'field' specificeerde de formulierveldnaam die door de bibliotheek moest worden gevalideerd
- 'human readable field' specificeert de human-readable format van het veld dat wordt gevalideerd. Dit wordt aan de gebruiker getoond wanneer er een fout optreedt.
- 'regel' specificeert de validatieregel die moet worden toegepast, zoals vereist, numeriek, controleren of de minimale lengte… enz. is.
- ['aangepast bericht'] is optioneel en kan worden gebruikt om een aangepast validatiebericht in te stellen dat moet worden weergegeven wanneer de validatieregel mislukt.
Hieronder volgt een voorbeeld van een formulier dat in CodeIgniter wordt verzonden om de contactnaam te valideren
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
HIER,
- De bovenstaande code controleert of het veld contact_number is ingevoerd. Als dit niet is ingesteld, wordt er een foutmelding geretourneerd dat het veld Contactnummer vereist is.
Om de validatie uit te voeren tegen de ingestelde regels, gebruiken we de volgende functie van de validatiebibliotheek
$this->form_validation->run()
Als de bovenstaande code false retourneert, zijn een of meer ingestelde regels mislukt. Als het waar retourneert, zijn alle validatieregels geslaagd en kunt u doorgaan met verdere actie.
Laten we nog meer voorbeelden van validatieregels bekijken. Stel dat u een aantal velden wilt valideren, zoals de contactnaam, het nummer en het e-mailadres. U kunt de volgende code gebruiken om dat te bereiken.
$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);
HIER,
- In het bovenstaande e-mailvalidatie in CodeIgniter-voorbeeld bieden we een array van velden met regels voor de set_rules-functie van de bibliotheek. Dit maakt het gemakkelijker wanneer u sommige velden valideert.
Unieke validatie
Als we het contactnummer willen valideren om er zeker van te zijn dat we hetzelfde nummer niet twee keer opslaan, kunnen we de volgende regel gebruiken.
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
HIER,
- | wordt gebruikt om meerdere regels samen te voegen
- is_unique[contacts.contact_number] controleert of de waarde voor contact_number uniek is ten opzichte van de contact_number veldwaarden in de databasetabelcontacten.
Formuliervalidatiefoutmeldingen weergeven
Als er een fout optreedt tijdens de verwerking van het formulier, kunt u de volgende code gebruiken om de opgetreden validatiefouten weer te geven
<?php echo validation_errors(); ?>
HIER,
- De bovenstaande functie retourneert alle opgetreden fouten.
Ingediende formuliergegevens invullen: Sticky Forms
Sommige formulieren hebben veel velden en als er een fout is opgetreden, wilt u er zeker van zijn dat de gegevens die correct zijn toegevoegd, worden bewaard. De validatiebibliotheek heeft mechanismen om dat te bereiken. We doen dat met behulp van de volgende code.
<?php echo set_value('field_name'); ?>
HIER,
- De bovenstaande code geeft de invoer weer die de gebruiker heeft ingevoerd.
Voor een volledige naslaggids over de methoden die beschikbaar zijn onder de validatiebibliotheek kunt u de API-documentatie raadplegen in de officiële gebruikershandleiding voor CodeIgniter
https://codeigniter.com/userguide3/libraries/form_validation.html
Voorbeeld van CodeIgniter-formuliervalidatie
Gedurende deze tutorialseries hebben we meer code toegevoegd aan ons tutorialproject, een toepassing voor contactbeheer. In deze sectie zullen we de validatiebibliotheek laden en zien hoe we deze in de praktijk kunnen gebruiken met behulp van een praktijkvoorbeeldtoepassing.
Wijzig de routecode als volgt om de opslagmethode op te nemen
$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';
Laten we nu de formuliervalidatiebibliotheek in de Contacten-controller laden en enkele validatieregels instellen.
Wijzig de code zoals weergegeven in de onderstaande formuliervalidatie in het CodeIgniter-voorbeeld:
<?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'); } }
HIER,
- $rules = array(…) sets definieert de validatieregels
- $this->form_validation->set_rules($rules); stelt de validatieregels in
- if ($this->form_validation->run() == FALSE) {…} de validatieregels uitvoert en als ze mislukken, wordt het formulier opnieuw weergegeven met validatiefouten. Als de validatie slaagt, sturen we gewoon door naar de pagina met de lijst met contactpersonen. Onder normale omstandigheden zouden we de gegevens naar de database schrijven. We zullen dat doen in de volgende tutorials wanneer we kijken naar databanken.
Wijzig de aanmaakweergave in de code application/contacts/create.php zoals weergegeven in het onderstaande CodeIgniter-voorbeeld voor formuliervalidatie:
<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>
HIER,
- we geven de eventuele fouten weer die tijdens het validatieproces optreden
- stelt de waarde in die eerder was ingesteld, indien aanwezig
U moet de volgende URL in uw webbrowser laden. Klik vervolgens op Contactpersoon maken zonder waarden in te voeren
Samenvatting
- Formulieren bieden gebruikers een manier om met de applicatie te communiceren en gegevens in te dienen.
- HTML is geweldig en gemakkelijk te begrijpen en te schrijven, maar CodeIgniter maakt de zaken nog eenvoudiger. CodeIgniter heeft ingebouwde functies om HTML-formulieren te maken.
- Validatie speelt een zeer cruciale rol bij het verwerken van gegevens uit formulieren.
- In deze tutorial hebben we belangrijke validatiestrategieën en hun voor- en nadelen gezien. We hebben ook geleerd hoe we validatieregels kunnen instellen en foutmeldingen kunnen wegsturen met behulp van de ingebouwde validatiebibliotheek van CodeIgniter. We hebben de les afgesloten met het implementeren van de opgedane kennis in een praktische toepassing.