Convalida del modulo CodeIgniter con esempio di invio del modulo
Modulo in CodeIgniter
I moduli forniscono agli utenti un modo per interagire con l'applicazione e inviare dati. Possono essere utilizzati per un modulo di contatto che un visitatore del sito Web può compilare e inviare le informazioni a noi. Le informazioni ricevute sono solitamente archiviate nel database o inviate tramite e-mail.
Struttura del modulo HTML
Il codice seguente mostra la struttura di un tipico modulo HTML.
<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>
QUI,
- … sono i tag di apertura e chiusura del form. Gli attributi id e name specificano il nome e l'id del modulo. L'attributo del metodo specifica il verbo HTTP da utilizzare. Questo di solito è specificato dal verbo POST
- Specifica gli elementi del modulo. L'attributo name è il nome della variabile inviato al server backend per l'elaborazione.
Assistente modulo CodeIgniter
L'HTML è fantastico, è facile da capire e scrivere, ma CodeIgniter rende le cose ancora più semplici. CodeIgniter ha funzioni integrate per creare moduli HTML.
Consideriamo il seguente codice di invio del modulo CodeIgniter che utilizza l'helper del modulo per creare un modulo
<?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(); ?>
QUI,
- echo form_open('create_user.php', ['id' => 'frmUsers']); crea il tag di apertura del modulo, imposta l'azione su POST Verb e imposta l'URL dell'azione su create_user.php
- echo form_label('ID utente', 'id_utente'); crea un'etichetta che legge l'ID utente per il campo di input con il nome user_id.
- echo form_input(['name' => 'user_id']); crea un campo di input di tipo testo con il nome user_id
- echo form_submit('btnSubmit', 'Crea utente'); crea un pulsante di invio con l'etichetta Crea utente
- echo form_close(); chiude il modulo
Come puoi vedere dal codice CodeIgniter sopra, gli helper dei moduli ci semplificano la creazione di moduli utilizzando PHP puro. Passando attributi ai metodi helper del modulo, possiamo personalizzare l'HTML generato per il modulo.
Il codice soprastante genera il seguente codice di modulo HTML
<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>
Il più grande vantaggio dell'utilizzo dell'helper del modulo è che genera codice semanticamente corretto che aderisce agli standard HTML impostati.
Per maggiori dettagli puoi fare riferimento alla documentazione ufficiale di CodeIgniter
https://codeigniter.com/user_guide/helpers/form_helper.html
Esempio di modulo CodeIgniter
Dopo aver trattato le nozioni di base di CodeIgniter, torniamo al nostro progetto tutorial su cui abbiamo lavorato durante tutto questo Serie di tutorial su CodeIgniterIn sintesi, il progetto tutorial crea un'app di gestione dei contatti che memorizzerà i dettagli nel database.
Crea contatto
nel tutorial precedente abbiamo creato percorsi per le nostre applicazioni e visualizzazioni semplici. Apri application/views/contacts/create.php
Modifica il codice per create.php come segue
<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>
Nota: il codice sopra utilizza HTML semplice per creare moduli.
Vediamo ora come appaiono i nostri moduli nel browser web
Caricare il seguente URL nel nostro browser web.
http://localhost:3000/contacts/create
Se hai creato il progetto tutorial, dovresti essere in grado di vedere quanto segue
Convalida del modulo in CodeIgniter
La convalida svolge un ruolo molto critico quando si elaborano dati da moduli. Supponiamo che un utente si registri su un sito Web; vogliamo assicurarci che inserisca i dettagli richiesti e l'indirizzo e-mail. Dobbiamo assicurarci che l'indirizzo e-mail inserito sia valido. Se lavoriamo con valori di data, vogliamo assicurarci che gli intervalli di date siano validi. Non dovremmo accettare una data che ha 32 giorni in un mese ecc.
La convalida risolve i problemi di cui sopra. La convalida di CodeIgniter viene eseguita su due (2) fronti quando si lavora con applicazioni web.
La convalida lato client viene eseguita da parte del browser Web. Questo di solito comporta l'uso di HTML e JavaScript. La convalida lato client migliora le prestazioni poiché tutto viene fatto lato client. Quindi, non c'è bisogno di inviare i dati al server. Lo svantaggio della convalida lato client è che l'utente ha il controllo su di essa. Se ci si affida a JavaScript per convalidare e disabilitare l'utente JavaScript nel browser, la convalida fallirà.
La convalida lato server viene eseguita sul lato server. Lo svantaggio di questa convalida è che l'utente deve inviare i dati al server per l'elaborazione e attendere la risposta. Ciò consuma le risorse di rete e può ridurre le prestazioni. Il vantaggio principale della convalida lato server è che hai un maggiore controllo e hai la certezza che le regole di convalida funzionino anche se l'utente disabilita JavaScript nel browser.
Una strategia migliore consiste nell'utilizzare il lato client come strategia di convalida primaria e il lato server come meccanismo di fallback.
Aggiunta di regole di convalida del modulo
CodeIgniter ha una libreria di convalida integrata. La libreria viene caricata utilizzando la seguente riga
$this->load->library('form_validation');
La libreria di convalida dei moduli CodeIgniter può essere utilizzata per eseguire alcune delle seguenti azioni
- Controlla i campi obbligatori. Questo esamina i valori inviati e restituisce un errore se un campo contrassegnato come obbligatorio non ha un valore
- Convalida del tipo di dati: alcuni campi potrebbero richiedere solo valori numerici. Se viene rilevato un valore non numerico, la libreria restituisce un errore. Viene interrotta anche l'esecuzione dell'invio del modulo.
- Convalida della lunghezza: alcuni tipi di dati richiedono che i campi contengano un determinato numero minimo o massimo di caratteri. La libreria di validazione torna utile in questi casi.
- Sanificazione dei dati: la libreria di convalida dispone anche di funzionalità che rimuovono il codice dannoso dai dati inviati per motivi di sicurezza. Se, ad esempio, i valori inviati sono attivi JavaScript o codice SQL Injection in essi contenuti: la libreria di convalida elimina il codice dannoso e lo rende inutile.
- Convalida campi di database univoci: supponiamo di avere un modulo in cui gli utenti si iscrivono tramite un indirizzo e-mail. Vorresti assicurarti che l'indirizzo e-mail sia univoco. La libreria semplifica il controllo dei dati inviati rispetto a una tabella e a un campo del database. Ciò ti consente di sapere che il valore è già stato utilizzato.
Le regole di convalida vengono impostate utilizzando il seguente formato
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
QUI,
- 'field' specifica il nome del campo del modulo che deve essere convalidato dalla libreria
- 'campo leggibile dall'uomo' specifica il formato leggibile dall'uomo del campo in fase di convalida. Questo viene visualizzato all'utente quando si verifica un errore.
- 'rule' specifica la regola di convalida da applicare come obbligatorio, numerico, controlla se la lunghezza minima è... ecc.
- ['messaggio personalizzato'] è facoltativo e può essere utilizzato per impostare un messaggio di convalida personalizzato che deve essere visualizzato quando la regola di convalida fallisce.
Di seguito è riportato un esempio di invio di un modulo in CodeIgniter per convalidare il nome del contatto
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
QUI,
- Il codice sopra controlla se il campo contact_number è stato inserito. Se non è impostato, restituisce un errore che indica che il campo Numero di contatto è obbligatorio.
Per eseguire la convalida rispetto alle regole impostate, utilizziamo la seguente funzione della libreria di convalida
$this->form_validation->run()
Se il codice precedente restituisce false, una o più regole impostate non sono riuscite. Se restituisce true, tutte le regole di convalida sono state approvate e puoi procedere con ulteriori azioni.
Diamo un'occhiata ad altri esempi di regole di convalida. Supponiamo che tu voglia convalidare alcuni campi, ad esempio il nome del contatto, il numero e l'indirizzo e-mail, puoi usare il seguente codice per farlo.
$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);
QUI,
- Nell'esempio di convalida email in CodeIgniter sopra riportato, forniamo un array di campi con regole per la funzione set_rules della libreria. Questo semplifica la convalida di alcuni campi.
Convalida unica
Se vogliamo convalidare il numero di contatto per assicurarci di non salvare lo stesso numero due volte, possiamo usare la seguente regola.
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
QUI,
- | viene utilizzato per convogliare più regole insieme
- is_unique[contacts.contact_number] controlla se il valore di contact_number è univoco rispetto ai valori del campo contact_number nella tabella del database contatti.
Visualizzazione dei messaggi di errore di convalida del modulo
Se si verifica un errore durante l'elaborazione del modulo, è possibile utilizzare il seguente codice per visualizzare gli errori di convalida verificatisi
<?php echo validation_errors(); ?>
QUI,
- La funzione precedente restituisce tutti gli errori che si sono verificati.
Popolamento dei dati dei moduli inviati: moduli permanenti
Alcuni moduli hanno molti campi e, se si è verificato un errore, si desidera assicurarsi che i dati aggiunti correttamente vengano preservati. La libreria di convalida ha meccanismi per raggiungere questo obiettivo. Lo facciamo utilizzando il seguente codice.
<?php echo set_value('field_name'); ?>
QUI,
- Il codice precedente mostra l'input immesso dall'utente.
Per una guida di riferimento completa sui metodi disponibili nella libreria di convalida, puoi fare riferimento alla documentazione API dalla guida utente ufficiale di CodeIgniter
https://codeigniter.com/userguide3/libraries/form_validation.html
Esempio di convalida del modulo CodeIgniter
Nel corso di queste serie di tutorial, abbiamo aggiunto più codice al nostro progetto tutorial che è un'applicazione di gestione dei contatti. In questa sezione caricheremo la libreria di validazione e vedremo come possiamo metterla in pratica utilizzando un'applicazione di esempio nel mondo reale.
Modificare il codice del percorso come segue per includere il metodo di archiviazione
$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';
Carichiamo ora la libreria di convalida dei moduli nel controller Contatti e impostiamo alcune regole di convalida.
Modifica il codice come mostrato nella convalida del modulo seguente nell'esempio CodeIgniter:
<?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'); } }
QUI,
- $rules = array(…) sets definisce le regole di validazione
- $this->form_validation->set_rules($rules); imposta le regole di validazione
- if ($this->form_validation->run() == FALSE) {…} esegue le regole di convalida e se falliscono il modulo viene visualizzato nuovamente con errori di convalida. Se la convalida passa, verremo semplicemente reindirizzati alla pagina dell'elenco dei contatti. In circostanze normali scriveremmo i dati nel database. Lo faremo nei prossimi tutorial quando guarderemo banche dati.
Modifica la vista di creazione nel codice application/contacts/create.php come mostrato nell'esempio CodeIgniter di convalida del modulo seguente:
<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>
QUI,
- visualizziamo gli eventuali errori che si verificano durante il processo di convalida
- imposta il valore precedentemente impostato, se presente
Devi caricare il seguente URL nel tuo browser web. Quindi clicca su Crea contatto senza immettere alcun valore
Sintesi
- I moduli forniscono agli utenti un modo per interagire con l'applicazione e inviare dati.
- L'HTML è fantastico, è facile da capire e scrivere, ma CodeIgniter rende le cose ancora più semplici. CodeIgniter ha funzioni integrate per creare moduli HTML.
- La convalida gioca un ruolo molto critico durante l'elaborazione dei dati dai moduli.
- In questo tutorial abbiamo visto le principali strategie di validazione e i loro pro e contro. Abbiamo anche imparato come impostare regole di convalida e inviare messaggi di errore utilizzando la libreria di convalida integrata di CodeIgniter. Abbiamo concluso la lezione implementando le conoscenze acquisite in un'applicazione pratica.