CodeWalidacja formularza Igniter 4 i przesłanie formularza z przykładem
⚡ Inteligentne podsumowanie
CodeWalidacja formularza w Igniter 4 sprawdza dane wprowadzone przez użytkownika przed ich przetworzeniem. Formularze są tworzone za pomocą pomocnika formularzy, a wbudowana biblioteka walidacji ustawia reguły, takie jak „wymagane”, „numeryczne” i „is_unique”, a następnie wyświetla błędy i ponownie wypełnia pola stałe w przypadku niepowodzenia walidacji.

Formularz w CodeZapłonnik 4
Formularze umożliwiają użytkownikom interakcję z aplikacją i przesyłanie danych. Formularz może służyć jako formularz kontaktowy, który odwiedzający stronę internetową może wypełnić i przesłać nam informacje. Otrzymane informacje są zazwyczaj przechowywane w bazie danych lub wysyłane e-mailem.
Struktura formularza HTML
Poniższy kod pokazuje strukturę typowego formularza 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>
Tutaj:
- … to otwierające i zamykające znaczniki formularza. Atrybuty id i name określają nazwę i identyfikator formularza. Atrybut method określa używany czasownik HTTP, zazwyczaj POST.
- Określa elementy formularza. Atrybut name to nazwa zmiennej przesyłana do serwera zaplecza w celu przetworzenia.
CodePomocnik formularza Igniter
HTML jest łatwy do zrozumienia i napisania, ale CodeZapalnik sprawia, że wszystko staje się jeszcze prostsze. CodeIgniter ma wbudowane funkcje do tworzenia formularzy HTML. Rozważmy następujące CodeKod formularza Igniter, który używa pomocnika formularza do utworzenia formularza:
<?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(); ?>
Tutaj:
- echo form_open('create_user.php', ['id' => 'frmUsers']); tworzy otwierający znacznik formularza, ustawia metodę na POST i ustawia akcję URL do create_user.php.
- echo form_label('Identyfikator użytkownika', 'user_id'); tworzy etykietę odczytującą Identyfikator użytkownika dla pola wejściowego o nazwie user_id.
- echo form_input(['name' => 'user_id']); tworzy pole wprowadzania tekstu o nazwie user_id.
- echo form_submit('btnSubmit', 'Utwórz użytkownika'); tworzy przycisk przesyłania z etykietą Utwórz użytkownika.
- echo form_close(); zamyka formularz.
Jak widać, pomocnicy formularzy ułatwiają tworzenie formularzy w czystym PHP. Przekazując atrybuty do metod pomocnika formularza, możemy dostosować kod HTML generowany dla formularza. Powyższy kod generuje następujący kod HTML formularza:
<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>
Największą zaletą korzystania z pomocnika formularzy jest to, że generuje on semantycznie poprawny kod, zgodny ze standardami HTML. Możesz zapoznać się z oficjalnymi CodeWięcej szczegółów w dokumentacji Ignitera: https://codeigniter.com/user_guide/helpers/form_helper.html.
CodePrzykład formularza zapłonnika
Po omówieniu podstaw CodeIgniter, wróćmy do naszego projektu instruktażowego, nad którym pracowaliśmy przez cały ten czas CodeSeria samouczków IgniterPodsumowując, projekt samouczka polega na stworzeniu aplikacji do zarządzania kontaktami, która przechowuje szczegóły w bazie danych.
Stworzyć kontakt
W poprzednim samouczku utworzyliśmy trasy dla naszej aplikacji i prostych widoków. Otwórz plik application/views/contacts/create.php i zmodyfikuj kod pliku create.php w następujący sposób:
<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>
Uwaga: Powyższy kod wykorzystuje zwykły kod HTML do utworzenia formularza. Zobaczmy teraz, jak nasz formularz wygląda w przeglądarce internetowej. Załaduj następujący kod. URL do przeglądarki internetowej: http://localhost:3000/contacts/createJeśli tworzyłeś projekt samouczka, powinieneś zobaczyć następujące informacje:
Walidacja formularza w CodeZapalnik
Walidacja odgrywa kluczową rolę podczas przetwarzania danych z formularzy. Załóżmy, że użytkownik rejestruje się na stronie internetowej; chcemy się upewnić, że podał wymagane dane i prawidłowy adres e-mail. Jeśli pracujemy z wartościami dat, chcemy upewnić się, że zakresy dat są prawidłowe, dlatego nie akceptujemy daty z 32 dniami w miesiącu.
Walidacja rozwiązuje te problemy. CodeW przypadku aplikacji internetowych walidacja Igniter odbywa się na dwóch frontach.
Walidacja po stronie klienta odbywa się w przeglądarce internetowej, zwykle przy użyciu kodu HTML i JavaSkrypt. Poprawia wydajność, ponieważ wszystko odbywa się po stronie klienta, więc nie ma potrzeby przesyłania danych do serwera. Wadą jest to, że użytkownik ma nad tym kontrolę; jeśli polegasz na JavaSkrypt do walidacji i wyłączania przez użytkownika JavaSkrypt, twoja walidacja się nie powiedzie.
Walidacja po stronie serwera jest przeprowadzana na serwerze. Wadą jest to, że użytkownik musi przesłać dane do serwera i czekać na odpowiedź, co obciąża zasoby sieciowe i może obniżyć wydajność. Główną zaletą jest większa kontrola i pewność, że reguły walidacji działają nawet po wyłączeniu przez użytkownika. JavaScenariusz.
Lepszą strategią jest stosowanie walidacji po stronie klienta jako strategii głównej i walidacji po stronie serwera jako mechanizmu zapasowego.
Dodawanie reguł sprawdzania poprawności formularza
CodeIgniter ma wbudowaną bibliotekę walidacyjną. Bibliotekę ładuje się za pomocą poniższego wiersza:
$this->load->library('form_validation');
CodeBiblioteka walidacji formularzy Igniter może wykonywać niektóre z następujących czynności:
- Sprawdza pola wymagane. Sprawdza przesłane wartości i zwraca błąd, jeśli pole oznaczone jako wymagane nie zawiera wartości.
- Walidacja typu danych – niektóre pola mogą wymagać wyłącznie wartości liczbowych. W przypadku wykrycia wartości innej niż liczbowa biblioteka zwraca błąd i przerywa wysyłanie formularza.
- Walidacja długości – niektóre pola wymagają określonej minimalnej lub maksymalnej liczby znaków. Biblioteka walidacji obsługuje takie przypadki.
- Czyszczenie danych – biblioteka może usunąć złośliwy kod z przesłanych danych w celu zapewnienia bezpieczeństwa. Jeśli przesłane wartości mają aktywne JavaSkrypt lub kod wstrzykiwania SQL; biblioteka usuwa szkodliwy kod i czyni go bezużytecznym.
- Sprawdź poprawność unikalnych pól bazy danych – załóżmy, że masz formularz rejestracyjny z adresem e-mail i chcesz mieć pewność, że adres jest unikalny. Biblioteka ułatwia sprawdzenie przesłanych danych względem tabeli i pola bazy danych.
Reguły walidacji są ustawiane przy użyciu następującego formatu:
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
Tutaj:
- 'field' określa nazwę pola formularza, które ma zostać sprawdzone przez bibliotekę.
- 'pole czytelne dla człowieka' określa format pola, który jest wyświetlany użytkownikowi w przypadku wystąpienia błędu.
- „reguła” określa regułę walidacji, która ma zostać zastosowana, np. wymagana, numeryczna lub o minimalnej długości.
- ['niestandardowa wiadomość'] jest opcjonalne i może ustawić niestandardową wiadomość weryfikacyjną wyświetlaną w przypadku niepowodzenia reguły.
Poniżej znajduje się CodePrzykład Ignitera do weryfikacji numeru kontaktowego:
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
Tutaj:
- Powyższy kod sprawdza, czy pole contact_number zostało wprowadzone. Jeśli nie jest ustawione, zwraca błąd informujący, że pole Contact Number jest wymagane.
Aby przeprowadzić walidację zgodnie z ustalonymi regułami, korzystamy z następującej funkcji biblioteki walidacji:
$this->form_validation->run()
Jeśli powyższy kod zwróci wartość false, oznacza to, że co najmniej jedna z reguł zestawu nie powiodła się. Jeśli zwróci wartość true, oznacza to, że wszystkie reguły walidacji zostały zaakceptowane i można kontynuować działanie.
Przyjrzyjmy się bliżej przykładom reguł walidacji. Załóżmy, że chcesz zweryfikować kilka pól, takich jak imię i nazwisko kontaktu, numer telefonu i adres e-mail. Możesz użyć następującego kodu:
$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);
Tutaj:
- W powyższym przykładzie udostępniamy tablicę pól z regułami dla funkcji set_rules biblioteki. Ułatwia to walidację kilku pól.
Unikalna weryfikacja
Jeśli chcemy zweryfikować numer kontaktowy i mieć pewność, że nie zapiszemy tego samego numeru dwa razy, możemy skorzystać z następującej reguły:
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
Tutaj:
- | służy do łączenia wielu reguł.
- is_unique[contacts.contact_number] sprawdza, czy wartość contact_number jest unikalna w stosunku do wartości pola contact_number w tabeli bazy danych kontaktów.
Wyświetlanie komunikatów o błędach sprawdzania poprawności formularza
Jeżeli podczas przetwarzania formularza wystąpi błąd, możesz użyć następującego kodu, aby wyświetlić błędy walidacji:
<?php echo validation_errors(); ?>
Tutaj:
- Powyższa funkcja zwraca wszystkie błędy, które wystąpiły.
Wypełnianie danych przesłanych formularzy: Formularze przyklejone
Niektóre formularze zawierają wiele pól i w przypadku wystąpienia błędu należy upewnić się, że poprawnie dodane dane zostaną zachowane. Biblioteka walidacji oferuje mechanizmy umożliwiające osiągnięcie tego celu, wykorzystując poniższy kod:
<?php echo set_value('field_name'); ?>
Tutaj:
- Powyższy kod wyświetla dane wprowadzone przez użytkownika.
Aby uzyskać pełny przewodnik referencyjny dotyczący metod dostępnych w bibliotece walidacji, zapoznaj się z dokumentacją API w oficjalnym CodeInstrukcja obsługi Ignitera: https://codeigniter.com/userguide3/libraries/form_validation.html.
CodePrzykład walidacji formularza Igniter
W tej serii samouczków dodawaliśmy kod do naszego projektu – aplikacji do zarządzania kontaktami. W tej sekcji załadujemy bibliotekę walidacji i zobaczymy, jak wykorzystać ją w praktyce w rzeczywistym przykładzie. Zmodyfikuj kod tras w następujący sposób, aby uwzględnić metodę store:
$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';
Załadujmy teraz bibliotekę walidacji formularza do kontrolera Contacts i ustawmy reguły walidacji. Zmodyfikuj kod, jak pokazano poniżej:
<?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'); } }
Tutaj:
- $rules = array(…) definiuje reguły walidacji.
- $this->form_validation->set_rules($rules); ustawia reguły walidacji.
- if ($this->form_validation->run() == FALSE) {…} uruchamia reguły walidacji, a jeśli się nie powiodą, formularz jest wyświetlany ponownie z błędami walidacji. Jeśli walidacja zakończy się pomyślnie, przekierowujemy na stronę listy kontaktów. W normalnych okolicznościach zapisalibyśmy dane do bazy danych, co zrobimy w następnym samouczku. Bazy danych.
Zmodyfikuj widok tworzenia w pliku application/views/contacts/create.php, jak pokazano poniżej:
<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>
Tutaj:
- wyświetla ewentualne błędy, które wystąpiły w trakcie procesu walidacji.
- ustawia wartość, która została wcześniej wprowadzona, jeśli taka istniała.
Załaduj następujące URL do przeglądarki internetowej, a następnie kliknij Utwórz kontakt bez wprowadzania żadnych wartości:


