CodeIgniter-Formularvalidierung mit Beispiel für die Formularübermittlung
Formular in CodeIgniter
Formulare bieten Benutzern die Möglichkeit, mit der Anwendung zu interagieren und Daten zu übermitteln. Sie können für ein Kontaktformular verwendet werden, das ein Besucher der Website ausfüllen und die Informationen an uns senden kann. Die erhaltenen Informationen werden normalerweise in der Datenbank gespeichert oder per E-Mail gesendet.
HTML-Formularstruktur
Der folgende Code zeigt die Struktur eines typischen HTML-Formulars.
<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,
- … sind die öffnenden und schließenden Tags des Formulars. Die Attribute „id“ und „name“ geben den Namen und die ID des Formulars an. Das Methodenattribut gibt das zu verwendende HTTP-Verb an. Dies wird normalerweise durch das POST-Verb angegeben
- Gibt die Formularelemente an. Das Namensattribut ist der Variablenname, der zur Verarbeitung an den Backend-Server übermittelt wird.
CodeIgniter-Formularhelfer
HTML ist großartig, es ist leicht zu verstehen und zu schreiben, aber CodeIgniter macht die Sache noch einfacher. CodeIgniter verfügt über integrierte Funktionen zum Erstellen von HTML-Formularen.
Betrachten wir den folgenden CodeIgniter-Formular-Übermittlungscode, der den Formular-Helfer verwendet, um ein Formular zu erstellen
<?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']); erstellt das Eröffnungs-Tag des Formulars, setzt die Aktion auf POST Verb und setzt die Aktions-URL auf create_user.php
- echo form_label('Benutzer-ID', 'Benutzer-ID'); erstellt eine Beschriftung, die „Benutzer-ID“ für das Eingabefeld mit dem Namen „Benutzer-ID“ lautet.
- echo form_input(['name' => 'user_id']); Erstellt ein Eingabefeld vom Typ Text mit dem Namen user_id
- echo form_submit('btnSubmit', 'Benutzer erstellen'); erstellt eine Senden-Schaltfläche mit der Bezeichnung „Benutzer erstellen“.
- echo form_close(); schließt das Formular
Wie Sie dem obigen CodeIgniter-Code entnehmen können, erleichtern uns Formularhelfer die Erstellung von Formularen mit reinem PHP. Durch die Übergabe von Attributen an die Formularhilfsmethoden können wir den HTML-Code anpassen, der für das Formular generiert wird.
Der obige Code erzeugt den folgenden HTML-Formularcode
<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>
Der größte Vorteil bei der Verwendung des Formular-Helfers besteht darin, dass er semantisch korrekten Code generiert, der den festgelegten HTML-Standards entspricht.
Weitere Einzelheiten finden Sie in der offiziellen CodeIgniter-Dokumentation.
https://codeigniter.com/user_guide/helpers/form_helper.html
Beispiel für ein CodeIgniter-Formular
Nachdem wir die Grundlagen von CodeIgniter behandelt haben, kehren wir zu unserem Tutorial-Projekt zurück, an dem wir die ganze Zeit gearbeitet haben CodeIgniter-Tutorialreihe. Zusammenfassend lässt sich sagen, dass das Tutorial-Projekt eine App zur Kontaktverwaltung erstellt, die die Details in der Datenbank speichert.
Kontakt erstellen
Im vorherigen Tutorial haben wir Routen für unsere Anwendungen und einfache Ansichten erstellt. Öffnen Sie application/views/contacts/create.php
Ändern Sie den Code für create.php wie folgt
<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>
Hinweis: Der obige Code verwendet einfaches HTML, um Formulare zu erstellen.
Schauen wir uns nun an, wie unsere Formulare im Webbrowser aussehen
Laden Sie die folgende URL in unseren Webbrowser.
http://localhost:3000/contacts/create
Wenn Sie das Tutorial-Projekt erstellt haben, sollten Sie Folgendes sehen können
Formularvalidierung in CodeIgniter
Die Validierung spielt bei der Verarbeitung von Daten aus Formularen eine sehr wichtige Rolle. Angenommen, ein Benutzer meldet sich auf einer Website an. Wir möchten sicherstellen, dass er die erforderlichen Angaben und seine E-Mail-Adresse eingibt. Wir müssen sicherstellen, dass die eingegebene E-Mail-Adresse gültig ist. Wenn wir mit Datumswerten arbeiten, möchten wir sicherstellen, dass die Datumsbereiche gültig sind. Wir müssten kein Datum akzeptieren, das 32 Tage im Monat hat usw.
Die Validierung löst die oben genannten Probleme. Die CodeIgniter-Validierung erfolgt an zwei (2) Fronten bei der Arbeit mit Webanwendungen.
Die clientseitige Validierung erfolgt durch den Webbrowser. Dabei werden in der Regel HTML- und JavaSkript. Die clientseitige Validierung verbessert die Leistung, da alles auf der Clientseite erfolgt. Es ist also nicht erforderlich, die Daten an den Server zu übermitteln. Der Nachteil der clientseitigen Validierung besteht darin, dass der Benutzer die Kontrolle darüber hat. Wenn Sie sich auf JavaSkript zur Validierung und Deaktivierung durch den Benutzer JavaSkript im Browser, dann schlägt Ihre Validierung fehl.
Die serverseitige Validierung wird auf der Serverseite durchgeführt. Der Nachteil dieser Validierung besteht darin, dass der Benutzer die Daten zur Verarbeitung an den Server senden und auf die Antwort warten muss. Dies verbraucht Netzwerkressourcen und kann die Leistung beeinträchtigen. Der Hauptvorteil der serverseitigen Validierung besteht darin, dass Sie mehr Kontrolle haben und sicher sein können, dass Ihre Validierungsregeln auch dann funktionieren, wenn der Benutzer sie deaktiviert. JavaSkript im Browser.
Eine bessere Strategie besteht darin, die Clientseite als primäre Validierungsstrategie und die Serverseite als Fallback-Mechanismus zu verwenden.
Formularvalidierungsregeln hinzufügen
CodeIgniter verfügt über eine integrierte Validierungsbibliothek. Die Bibliothek wird mit der folgenden Zeile geladen
$this->load->library('form_validation');
Mit der CodeIgniter-Formularvalidierungsbibliothek können einige der folgenden Aktionen ausgeführt werden
- Suchen Sie nach Pflichtfeldern. Dadurch werden die übermittelten Werte untersucht und ein Fehler zurückgegeben, wenn ein Feld, das als erforderlich gekennzeichnet wurde, keinen Wert hat
- Datentypvalidierung – für einige Felder sind möglicherweise nur numerische Werte erforderlich. Wenn ein nicht numerischer Wert erkannt wird, gibt die Bibliothek einen Fehler zurück. Die Ausführung der Formularübermittlung wird ebenfalls abgebrochen.
- Längenvalidierung – einige Datentypen erfordern, dass Felder eine bestimmte Mindest- oder Höchstanzahl an Zeichen haben. In solchen Fällen ist die Validierungsbibliothek hilfreich.
- Datenbereinigung – die Validierungsbibliothek verfügt auch über Funktionen, die aus Sicherheitsgründen bösartigen Code aus den übermittelten Daten entfernen. Wenn die übermittelten Werte beispielsweise aktive JavaWenn sich darin Skript- oder SQL-Injection-Code befindet, entfernt die Validierungsbibliothek den schädlichen Code und macht ihn unbrauchbar.
- Überprüfen Sie eindeutige Datenbankfelder – nehmen wir an, Sie haben ein Formular, bei dem sich Benutzer mit einer E-Mail-Adresse anmelden. Sie möchten sicherstellen, dass die E-Mail-Adresse eindeutig ist. Die Bibliothek erleichtert Ihnen die Überprüfung der übermittelten Daten anhand einer Datenbanktabelle und eines Datenbankfelds. So wissen Sie, ob der Wert bereits vergeben ist.
Validierungsregeln werden im folgenden Format festgelegt
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
HIER,
- 'field' gab den Formularfeldnamen an, der von der Bibliothek validiert werden soll
- „Lesbares Feld“ gibt das lesbare Format des zu validierenden Felds an. Dies wird dem Benutzer angezeigt, wenn ein Fehler auftritt.
- „Regel“ gibt die anzuwendende Validierungsregel an, z. B. „erforderlich“, „numerisch“, „Überprüfen, ob Mindestlänge …“ usw.
- ['Benutzerdefinierte Nachricht'] ist optional und kann verwendet werden, um eine benutzerdefinierte Validierungsnachricht festzulegen, die angezeigt werden soll, wenn die Validierungsregel fehlschlägt.
Nachfolgend finden Sie ein Beispiel für die Übermittlung eines Formulars in CodeIgniter zur Validierung des Kontaktnamens.
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
HIER,
- Der obige Code prüft, ob das Feld contact_number eingegeben wurde. Wenn es nicht festgelegt ist, wird eine Fehlermeldung zurückgegeben, die besagt, dass das Feld „Kontaktnummer“ erforderlich ist.
Um die Validierung anhand der festgelegten Regeln durchzuführen, verwenden wir die folgende Funktion der Validierungsbibliothek
$this->form_validation->run()
Wenn der obige Code „false“ zurückgibt, sind eine oder mehrere festgelegte Regeln fehlgeschlagen. Wenn „true“ zurückgegeben wird, wurden alle Validierungsregeln erfüllt und Sie können mit weiteren Aktionen fortfahren.
Sehen wir uns weitere Beispiele für Validierungsregeln an. Angenommen, Sie möchten einige Felder validieren, beispielsweise den Kontaktnamen, die Telefonnummer und die E-Mail-Adresse. Dazu können Sie den folgenden Code verwenden.
$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,
- Im obigen Beispiel zur E-Mail-Validierung in CodeIgniter stellen wir ein Array von Feldern mit Regeln für die set_rules-Funktion der Bibliothek bereit. Dies erleichtert die Validierung einiger Felder.
Einzigartige Validierung
Wenn wir die Kontaktnummer validieren möchten, um sicherzustellen, dass wir dieselbe Nummer nicht zweimal speichern, können wir dazu die folgende Regel verwenden.
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
HIER,
- | wird verwendet, um mehrere Regeln zusammenzufassen
- is_unique[contacts.contact_number] prüft, ob der Wert für contact_number im Vergleich zu den Werten des Felds „contact_number“ in der Datenbanktabelle „contacts“ eindeutig ist.
Fehlermeldungen zur Formularvalidierung anzeigen
Tritt bei der Verarbeitung des Formulars ein Fehler auf, können Sie mit dem folgenden Code die aufgetretenen Validierungsfehler anzeigen
<?php echo validation_errors(); ?>
HIER,
- Die obige Funktion gibt alle aufgetretenen Fehler zurück.
Ausfüllen übermittelter Formulardaten: Sticky Forms
Einige Formulare haben viele Felder. Wenn ein Fehler auftritt, möchten Sie sicherstellen, dass die korrekt hinzugefügten Daten erhalten bleiben. Die Validierungsbibliothek verfügt über Mechanismen, um dies zu erreichen. Wir tun dies, indem wir den folgenden Code verwenden.
<?php echo set_value('field_name'); ?>
HIER,
- Der obige Code zeigt die Eingabe an, die der Benutzer eingegeben hat.
Eine vollständige Referenzanleitung zu den Methoden, die in der Validierungsbibliothek verfügbar sind, finden Sie in der API-Dokumentation im offiziellen Benutzerhandbuch für CodeIgniter
https://codeigniter.com/userguide3/libraries/form_validation.html
Beispiel für die CodeIgniter-Formularvalidierung
Im Laufe dieser Tutorial-Reihe haben wir unserem Tutorial-Projekt, einer Kontaktverwaltungsanwendung, weiteren Code hinzugefügt. In diesem Abschnitt laden wir die Validierungsbibliothek und sehen anhand einer realen Beispielanwendung, wie wir sie in die Praxis umsetzen können.
Ändern Sie den Routencode wie folgt, um die Store-Methode einzuschließen
$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';
Laden wir nun die Formularvalidierungsbibliothek in den Kontakt-Controller und legen einige Validierungsregeln fest.
Ändern Sie den Code wie in der folgenden Formularvalidierung im CodeIgniter-Beispiel gezeigt:
<?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 definiert die Validierungsregeln
- $this->form_validation->set_rules($rules); legt die Validierungsregeln fest
- if ($this->form_validation->run() == FALSE) {…} führt die Validierungsregeln aus und wenn sie fehlschlagen, wird das Formular mit Validierungsfehlern erneut angezeigt. Wenn die Validierung erfolgreich ist, leiten wir einfach auf die Seite mit den Kontaktlisten weiter. Unter normalen Umständen würden wir die Daten in die Datenbank schreiben. Wir werden das in den nächsten Tutorials tun, wenn wir uns ansehen Datenbanken.
Ändern Sie die Erstellungsansicht im Code application/contacts/create.php, wie im folgenden CodeIgniter-Beispiel für die Formularvalidierung gezeigt:
<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,
- Wir zeigen die Fehler an, die gegebenenfalls während des Validierungsprozesses auftreten
- Legt den Wert fest, der zuvor festgelegt wurde, falls vorhanden
Sie müssen die folgende URL in Ihren Webbrowser laden. Klicken Sie dann auf Kontakt erstellen, ohne Werte einzugeben
Zusammenfassung
- Formulare bieten Benutzern die Möglichkeit, mit der Anwendung zu interagieren und Daten zu übermitteln.
- HTML ist großartig, einfach zu verstehen und zu schreiben, aber CodeIgniter macht die Sache noch einfacher. CodeIgniter verfügt über integrierte Funktionen zum Erstellen von HTML-Formularen.
- Bei der Verarbeitung von Daten aus Formularen spielt die Validierung eine sehr wichtige Rolle.
- In diesem Tutorial haben wir die wichtigsten Validierungsstrategien und ihre Vor- und Nachteile kennengelernt. Wir haben auch gelernt, wie man mithilfe der integrierten Validierungsbibliothek von CodeIgniter Validierungsregeln festlegt und Fehlermeldungen ausgibt. Den Abschluss der Lektion bildeten wir mit der Umsetzung der gewonnenen Erkenntnisse in eine praktische Anwendung.