Επικύρωση φόρμας CodeIgniter με Παράδειγμα Υποβολής Φόρμας
Φόρμα στο CodeIgniter
Οι φόρμες παρέχουν έναν τρόπο στους χρήστες να αλληλεπιδρούν με την εφαρμογή και να υποβάλλουν δεδομένα. Μπορεί να χρησιμοποιηθεί για μια φόρμα επικοινωνίας που μπορεί να συμπληρώσει ένας επισκέπτης του ιστότοπου και να μας στείλει τις πληροφορίες. Οι πληροφορίες που λαμβάνονται συνήθως αποθηκεύονται στη βάση δεδομένων ή αποστέλλονται μέσω email.
Δομή φόρμας HTML
Ο παρακάτω κώδικας δείχνει τη δομή μιας τυπικής φόρμας 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>
ΕΔΩ,
- … είναι οι ετικέτες ανοίγματος και κλεισίματος της φόρμας. Το χαρακτηριστικό id και name καθορίζουν το όνομα και το αναγνωριστικό της φόρμας. Το χαρακτηριστικό μέθοδος καθορίζει το ρήμα HTTP που θα χρησιμοποιηθεί. Αυτό προσδιορίζεται συνήθως από το ρήμα POST
- Καθορίζει τα στοιχεία της φόρμας. Το χαρακτηριστικό name είναι το όνομα της μεταβλητής που υποβάλλεται στον διακομιστή υποστήριξης για επεξεργασία.
CodeIgniter Form Helper
Το HTML είναι υπέροχο είναι εύκολο να κατανοηθεί και να γραφτεί, αλλά CodeIgniter κάνει τα πράγματα ακόμα πιο απλά. Το CodeIgniter έχει ενσωματωμένες λειτουργίες για τη δημιουργία φορμών HTML.
Ας εξετάσουμε τον ακόλουθο κώδικα υποβολής φόρμας CodeIgniter που χρησιμοποιεί τον βοηθό φόρμας για τη δημιουργία μιας φόρμας
<?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(); ?>
ΕΔΩ,
- echo form_open('create_user.php', ['id' => 'frmUsers']); δημιουργεί την ετικέτα ανοίγματος της φόρμας, ορίζει την ενέργεια σε POST Verb και ορίζει τη διεύθυνση URL ενέργειας σε create_user.php
- echo form_label('User Id', 'user_id'); δημιουργεί μια ετικέτα που διαβάζει User ID για το πεδίο εισαγωγής με το όνομα user_id.
- echo form_input(['όνομα' => 'user_id']); δημιουργεί ένα πεδίο εισαγωγής τύπου κειμένου με το όνομα user_id
- echo form_submit('btnSubmit', 'Create User'); δημιουργεί ένα κουμπί υποβολής με την ετικέτα Δημιουργία χρήστη
- echo form_close(); κλείνει τη φόρμα
Όπως μπορείτε να δείτε από τον παραπάνω κώδικα CodeIgniter, οι βοηθοί φορμών μας διευκολύνουν να δημιουργήσουμε φόρμες χρησιμοποιώντας καθαρή PHP. Περνώντας χαρακτηριστικά στις μεθόδους βοήθειας φόρμας, μπορούμε να προσαρμόσουμε το HTML που δημιουργείται για τη φόρμα.
Ο παραπάνω κώδικας δημιουργεί τον ακόλουθο κώδικα φόρμας 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>
Τα μεγαλύτερα πλεονεκτήματα της χρήσης του βοηθού φόρμας είναι ότι δημιουργεί σημασιολογικά σωστό κώδικα που συμμορφώνεται με τα καθορισμένα πρότυπα HTML.
Μπορείτε να ανατρέξετε στην επίσημη τεκμηρίωση του CodeIgniter για περισσότερες λεπτομέρειες
https://codeigniter.com/user_guide/helpers/form_helper.html
Παράδειγμα φόρμας CodeIgniter
Αφού καλύψουμε τα βασικά του CodeIgniter, ας επιστρέψουμε στο εκπαιδευτικό μας έργο στο οποίο εργαζόμαστε σε όλο αυτό CodeIgniter Tutorial Series. Συνοπτικά, το πρόγραμμα εκμάθησης δημιουργεί μια εφαρμογή διαχείρισης επαφών που θα αποθηκεύει τις λεπτομέρειες στη βάση δεδομένων.
Δημιουργία επαφής
στο προηγούμενο σεμινάριο, δημιουργήσαμε διαδρομές για τις εφαρμογές μας και απλές προβολές. Ανοίξτε την εφαρμογή/views/contacts/create.php
Τροποποιήστε τον κώδικα για το create.php ως εξής
<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>
Σημείωση: Ο παραπάνω κώδικας χρησιμοποιεί απλό HTML για τη δημιουργία φορμών.
Ας δούμε τώρα πώς φαίνονται οι φόρμες μας στο πρόγραμμα περιήγησης ιστού
Φορτώστε την ακόλουθη διεύθυνση URL στο πρόγραμμα περιήγησής μας.
http://localhost:3000/contacts/create
Εάν έχετε δημιουργήσει το έργο εκμάθησης, τότε θα πρέπει να μπορείτε να δείτε τα παρακάτω
Επικύρωση φόρμας στο CodeIgniter
Η επικύρωση παίζει πολύ κρίσιμο ρόλο κατά την επεξεργασία δεδομένων από φόρμες. Ας υποθέσουμε ότι ένας χρήστης εγγράφεται σε έναν ιστότοπο. θέλουμε να βεβαιωθούμε ότι συμπληρώνουν τα απαιτούμενα στοιχεία και τη διεύθυνση email τους. Πρέπει να βεβαιωθούμε ότι η διεύθυνση email που έχει εισαχθεί είναι έγκυρη. Εάν εργαζόμαστε με τιμές ημερομηνίας, τότε θέλουμε να βεβαιωθούμε ότι τα εύρη ημερομηνιών είναι έγκυρα. Δεν θα έπρεπε να δεχτούμε μια ημερομηνία που έχει 32 ημέρες το μήνα κ.λπ.
Η επικύρωση επιλύει τα παραπάνω προβλήματα. Η επικύρωση CodeIgniter γίνεται σε δύο (2) μέτωπα κατά την εργασία με εφαρμογές web.
Η επικύρωση από την πλευρά του πελάτη γίνεται από την πλευρά του προγράμματος περιήγησης ιστού. Αυτό συνήθως περιλαμβάνει τη χρήση HTML και JavaΓραφή. Η επικύρωση από την πλευρά του πελάτη βελτιώνει την απόδοση καθώς όλα γίνονται από την πλευρά του πελάτη. Επομένως, δεν χρειάζεται να υποβάλετε τα δεδομένα στον διακομιστή. Το μειονέκτημα της επικύρωσης από την πλευρά του πελάτη είναι ότι ο χρήστης έχει τον έλεγχο της. Αν βασίζεσαι σε JavaΣενάριο για επικύρωση και ο χρήστης απενεργοποιεί JavaΚάντε δέσμη ενεργειών στο πρόγραμμα περιήγησης, τότε η επικύρωσή σας θα αποτύχει.
Η επικύρωση από την πλευρά του διακομιστή πραγματοποιείται από την πλευρά του διακομιστή. Το μειονέκτημα αυτής της επικύρωσης είναι ότι ο χρήστης πρέπει να υποβάλει τα δεδομένα στον διακομιστή για επεξεργασία και να περιμένει την απάντηση. Αυτό καταναλώνει πόρους δικτύου και μπορεί να υποβαθμίσει την απόδοση. Το κύριο πλεονέκτημα της επικύρωσης από την πλευρά του διακομιστή είναι ότι έχετε μεγαλύτερο έλεγχο και είστε σίγουροι ότι οι κανόνες επικύρωσης λειτουργούν ακόμη και αν ο χρήστης απενεργοποιήσει JavaΣενάριο στο πρόγραμμα περιήγησης.
Μια καλύτερη στρατηγική είναι να χρησιμοποιήσετε την πλευρά του πελάτη ως κύρια στρατηγική επικύρωσης και την πλευρά του διακομιστή ως εναλλακτικό μηχανισμό.
Προσθήκη κανόνων επικύρωσης φορμών
Το CodeIgniter διαθέτει μια ενσωματωμένη βιβλιοθήκη επικύρωσης. Η βιβλιοθήκη φορτώνεται χρησιμοποιώντας την ακόλουθη γραμμή
$this->load->library('form_validation');
Η βιβλιοθήκη επικύρωσης φόρμας CodeIgniter μπορεί να χρησιμοποιηθεί για την εκτέλεση ορισμένων από τις ακόλουθες ενέργειες
- Ελέγξτε για τα απαιτούμενα πεδία. Αυτό εξετάζει τις υποβληθείσες τιμές και επιστρέφει ένα σφάλμα εάν ένα πεδίο που έχει επισημανθεί ως απαιτείται δεν έχει τιμή
- Επικύρωση τύπου δεδομένων – ορισμένα πεδία ενδέχεται να απαιτούν μόνο αριθμητικές τιμές. Εάν εντοπιστεί μια μη αριθμητική τιμή, τότε η βιβλιοθήκη επιστρέφει ένα σφάλμα. Η εκτέλεση της υποβολής της φόρμας ματαιώνεται επίσης.
- Επικύρωση μήκους – ορισμένοι τύποι δεδομένων απαιτούν τα πεδία να έχουν συγκεκριμένο ελάχιστο ή μέγιστο αριθμό χαρακτήρων. Η βιβλιοθήκη επικύρωσης είναι χρήσιμη σε τέτοιες περιπτώσεις.
- Εξυγίανση δεδομένων – η βιβλιοθήκη επικύρωσης έχει επίσης δυνατότητες που αφαιρούν κακόβουλο κώδικα από τα υποβληθέντα δεδομένα για λόγους ασφαλείας. Αν για παράδειγμα, οι τιμές που υποβλήθηκαν έχουν ενεργές JavaΣενάριο ή κώδικα SQL Injection σε αυτά, η βιβλιοθήκη επικύρωσης αφαιρεί τον επιβλαβή κώδικα και τον καθιστά άχρηστο.
- Επικύρωση μοναδικών πεδίων βάσης δεδομένων – ας υποθέσουμε ότι έχετε μια φόρμα όπου οι χρήστες εγγράφονται χρησιμοποιώντας μια διεύθυνση email. Θα θέλατε να βεβαιωθείτε ότι η διεύθυνση ηλεκτρονικού ταχυδρομείου είναι μοναδική. Η βιβλιοθήκη σας διευκολύνει να ελέγξετε τα υποβαλλόμενα δεδομένα σε έναν πίνακα και ένα πεδίο βάσης δεδομένων. Αυτό σας επιτρέπει να γνωρίζετε ότι η τιμή έχει ήδη ληφθεί.
Οι κανόνες επικύρωσης ορίζονται χρησιμοποιώντας την ακόλουθη μορφή
$this->form_validation->set_rules('field','human readable field','rule',['custom message']);
ΕΔΩ,
- Το 'field' καθόρισε το όνομα του πεδίου της φόρμας που θα επικυρωθεί από τη βιβλιοθήκη
- Το "πεδίο αναγνώσιμο από τον άνθρωπο" καθορίζει τη μορφή αναγνώσιμη από τον άνθρωπο του πεδίου υπό επικύρωση. Αυτό εμφανίζεται πίσω στον χρήστη όταν παρουσιαστεί ένα σφάλμα.
- Ο «κανόνας» καθορίζει τον κανόνα επικύρωσης που θα εφαρμοστεί όπως απαιτείται, αριθμητικός, έλεγχος αν το ελάχιστο μήκος είναι… κ.λπ.
- Το ['custom message'] είναι προαιρετικό και μπορεί να χρησιμοποιηθεί για να ορίσετε ένα προσαρμοσμένο μήνυμα επικύρωσης που θα πρέπει να εμφανίζεται όταν ο κανόνας επικύρωσης αποτυγχάνει.
Ακολουθεί μια φόρμα υποβολής στο παράδειγμα CodeIgniter για την επικύρωση του ονόματος επαφής
$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');
ΕΔΩ,
- Ο παραπάνω κωδικός ελέγχει εάν έχει εισαχθεί το πεδίο contact_number. Εάν δεν έχει οριστεί, επιστρέφει ένα σφάλμα που λέει ότι απαιτείται το πεδίο Αριθμός Επικοινωνίας.
Για να εκτελέσουμε την επικύρωση σύμφωνα με τους καθορισμένους κανόνες, χρησιμοποιούμε την ακόλουθη συνάρτηση της βιβλιοθήκης επικύρωσης
$this->form_validation->run()
Εάν ο παραπάνω κωδικός επιστρέψει ψευδής, τότε ένας ή περισσότεροι καθορισμένοι κανόνες έχουν αποτύχει. Εάν επιστρέψει true, τότε οι κανόνες επικύρωσης έχουν περάσει όλοι και μπορείτε να προχωρήσετε σε περαιτέρω ενέργειες.
Ας δούμε περισσότερα παραδείγματα κανόνων επικύρωσης. Ας υποθέσουμε ότι θέλετε να επικυρώσετε ορισμένα πεδία που αναφέρουν το όνομα επαφής, τον αριθμό και τη διεύθυνση email, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα για να το πετύχετε.
$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);
ΕΔΩ,
- Στην παραπάνω επικύρωση email στο παράδειγμα CodeIgniter, παρέχουμε μια σειρά πεδίων με κανόνες για τη συνάρτηση set_rules της βιβλιοθήκης. Αυτό διευκολύνει την επικύρωση ορισμένων πεδίων.
Μοναδική επικύρωση
Εάν θέλουμε να επικυρώσουμε τον αριθμό επικοινωνίας για να διασφαλίσουμε ότι δεν θα αποθηκεύσουμε τον ίδιο αριθμό δύο φορές, μπορούμε να χρησιμοποιήσουμε τον ακόλουθο κανόνα για να το κάνουμε.
$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');
ΕΔΩ,
- | χρησιμοποιείται για τη διοχέτευση πολλών κανόνων μαζί
- Το is_unique[contacts.contact_number] ελέγχει εάν η τιμή του contact_number είναι μοναδική σε σχέση με τις τιμές του πεδίου contact_number στις επαφές του πίνακα της βάσης δεδομένων.
Εμφάνιση μηνυμάτων σφάλματος επικύρωσης φόρμας
Εάν παρουσιαστεί σφάλμα κατά την επεξεργασία της φόρμας, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα για να εμφανίσετε τα σφάλματα επικύρωσης που παρουσιάστηκαν
<?php echo validation_errors(); ?>
ΕΔΩ,
- Η παραπάνω συνάρτηση επιστρέφει όλα τα σφάλματα που προέκυψαν.
Συμπλήρωση δεδομένων φόρμας που έχουν υποβληθεί: κολλώδεις φόρμες
Ορισμένες φόρμες έχουν πολλά πεδία και εάν έχει παρουσιαστεί σφάλμα, τότε θέλετε να βεβαιωθείτε ότι διατηρούνται τα δεδομένα που προστέθηκαν σωστά. Η βιβλιοθήκη επικύρωσης έχει μηχανισμούς για να το επιτύχει αυτό. Αυτό το κάνουμε χρησιμοποιώντας τον παρακάτω κώδικα.
<?php echo set_value('field_name'); ?>
ΕΔΩ,
- Ο παραπάνω κωδικός εμφανίζει την είσοδο που είχε εισαγάγει ο χρήστης.
Για έναν πλήρη οδηγό αναφοράς σχετικά με τις μεθόδους που είναι διαθέσιμες στη βιβλιοθήκη επικύρωσης, μπορείτε να ανατρέξετε στην τεκμηρίωση του API από τον επίσημο οδηγό χρήστη για το CodeIgniter
https://codeigniter.com/userguide3/libraries/form_validation.html
Παράδειγμα επικύρωσης φόρμας CodeIgniter
Σε όλη αυτή τη σειρά εκμάθησης, προσθέτουμε περισσότερο κώδικα στο εκπαιδευτικό μας έργο που είναι μια εφαρμογή διαχείρισης επαφών. Σε αυτήν την ενότητα, θα φορτώσουμε τη βιβλιοθήκη επικύρωσης και θα δούμε πώς μπορούμε να τη χρησιμοποιήσουμε στην πράξη χρησιμοποιώντας ένα παράδειγμα εφαρμογής πραγματικού κόσμου.
Τροποποιήστε τον κωδικό διαδρομών ως εξής για να συμπεριλάβετε τη μέθοδο αποθήκευσης
$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';
Ας φορτώσουμε τώρα τη βιβλιοθήκη επικύρωσης φόρμας στον ελεγκτή Επαφών και ας ορίσουμε ορισμένους κανόνες επικύρωσης.
Τροποποιήστε τον κώδικα όπως φαίνεται στην παρακάτω επικύρωση φόρμας στο παράδειγμα 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'); } }
ΕΔΩ,
- $rules = τα σύνολα πίνακα (…) ορίζουν τους κανόνες επικύρωσης
- $this->form_validation->set_rules($rules); ορίζει τους κανόνες επικύρωσης
- if ($this->form_validation->run() == FALSE) {…} εκτελεί τους κανόνες επικύρωσης και εάν αποτύχουν, η φόρμα εμφανίζεται ξανά με σφάλματα επικύρωσης. Εάν η επικύρωση περάσει, απλώς ανακατευθυνόμαστε στη σελίδα επαφών της λίστας. Υπό κανονικές συνθήκες θα γράφαμε τα δεδομένα στη βάση δεδομένων. Θα το κάνουμε αυτό στα επόμενα σεμινάρια όταν το δούμε βάσεις δεδομένων.
Τροποποιήστε την προβολή δημιουργίας στον κώδικα application/contacts/create.php όπως φαίνεται στο παρακάτω παράδειγμα επικύρωσης φόρμας CodeIgniter:
<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>
ΕΔΩ,
- εμφανίζουμε τα σφάλματα που προκύπτουν εάν υπάρχουν κατά τη διαδικασία επικύρωσης
- ορίζει την τιμή που είχε οριστεί προηγουμένως εάν υπάρχει
Πρέπει να φορτώσετε την ακόλουθη διεύθυνση URL στο πρόγραμμα περιήγησής σας. Στη συνέχεια, κάντε κλικ στο Δημιουργία επαφής χωρίς να εισάγετε τιμές
Σύνοψη
- Οι φόρμες παρέχουν έναν τρόπο στους χρήστες να αλληλεπιδρούν με την εφαρμογή και να υποβάλλουν δεδομένα.
- Το HTML είναι υπέροχο και είναι εύκολο να κατανοηθεί και να γραφτεί, αλλά το CodeIgniter κάνει τα πράγματα ακόμα πιο απλά. Το CodeIgniter έχει ενσωματωμένες λειτουργίες για τη δημιουργία φορμών HTML.
- Η επικύρωση παίζει πολύ κρίσιμο ρόλο κατά την επεξεργασία δεδομένων από φόρμες.
- Σε αυτό το σεμινάριο, έχουμε δει σημαντικές στρατηγικές επικύρωσης και τα πλεονεκτήματα και τα μειονεκτήματά τους. Μάθαμε επίσης πώς να ορίζουμε κανόνες επικύρωσης και να εξαλείφουμε μηνύματα λάθους χρησιμοποιώντας την ενσωματωμένη βιβλιοθήκη επικύρωσης του CodeIgniter. Ολοκληρώσαμε το μάθημα εφαρμόζοντας τις γνώσεις που αποκτήθηκαν σε μια πρακτική εφαρμογή.