Άγευστη επικύρωση php. Επικύρωση και καθαρισμός δεδομένων με χρήση PHP. Καταχώρηση του δικού σας κανόνα επικύρωσης

Κατά τη δημιουργία εφαρμογών Ιστού, είναι σημαντικό να λαμβάνετε σοβαρά υπόψη την ασφάλεια, ειδικά όταν έχετε να κάνετε με τη λήψη δεδομένων από χρήστες.

Ένας γενικός κανόνας ασφαλείας είναι να μην εμπιστεύεστε κανέναν, επομένως δεν μπορείτε να βασίζεστε στους χρήστες να εισάγουν πάντα τις σωστές τιμές στις φόρμες. Για παράδειγμα, αντί να εισαγάγετε τη σωστή διεύθυνση email στο πεδίο, ο χρήστης μπορεί να εισαγάγει μια εσφαλμένη διεύθυνση ή ακόμα και κάποια κακόβουλα δεδομένα.

Όταν πρόκειται για επικύρωση δεδομένων χρήστη, μπορεί να γίνει είτε από την πλευρά του πελάτη (στο πρόγραμμα περιήγησης ιστού) είτε από την πλευρά του διακομιστή.

Προηγουμένως, η επικύρωση από την πλευρά του πελάτη μπορούσε να γίνει μόνο χρησιμοποιώντας JavaScript. Όλα όμως έχουν αλλάξει (ή σχεδόν έχουν αλλάξει), αφού με τη βοήθεια της HTML5 μπορεί να γίνει επικύρωση στο πρόγραμμα περιήγησης, χωρίς να χρειάζεται να γραφτούν πολύπλοκα σενάρια επικύρωσης σε JavaScript.

Επικύρωση φόρμας με χρήση HTML5

Η HTML5 παρέχει έναν αρκετά ισχυρό μηχανισμό που βασίζεται στα ακόλουθα χαρακτηριστικά ετικέτας: τύπος, μοτίβο και απαίτηση. Με αυτά τα νέα χαρακτηριστικά, μπορείτε να μεταφορτώσετε ορισμένες από τις λειτουργίες επικύρωσης δεδομένων στο πρόγραμμα περιήγησης.

Ας δούμε αυτά τα χαρακτηριστικά για να κατανοήσουμε πώς μπορούν να βοηθήσουν στην επικύρωση φόρμας.

χαρακτηριστικό τύπου

Αυτό το χαρακτηριστικό λέει ποιο πεδίο εισόδου να εμφανιστεί για επεξεργασία δεδομένων, για παράδειγμα το γνωστό πεδίο όπως

Ορισμένα πεδία εισαγωγής παρέχουν ήδη τυπικές μεθόδους επικύρωσης, χωρίς την ανάγκη εγγραφής πρόσθετου κώδικα. Για παράδειγμα, ελέγχει ένα πεδίο για να διασφαλίσει ότι η τιμή που εισαγάγατε ταιριάζει με το πρότυπο μιας έγκυρης διεύθυνσης email. Εάν εισαχθεί λανθασμένος χαρακτήρας σε ένα πεδίο, η φόρμα δεν μπορεί να υποβληθεί μέχρι να διορθωθεί η τιμή.

Δοκιμάστε να παίξετε με τις τιμές των πεδίων email στην παρακάτω επίδειξη.

Υπάρχουν επίσης άλλοι τυπικοί τύποι πεδίων, όπως και για την επικύρωση αριθμών, διευθύνσεων URL και αριθμών τηλεφώνου, αντίστοιχα.

Σημείωση: Οι μορφές αριθμών τηλεφώνου διαφέρουν από χώρα σε χώρα λόγω διαφορών στον αριθμό των ψηφίων στους αριθμούς τηλεφώνου και των διαφορών στις μορφές. Ως αποτέλεσμα, η προδιαγραφή δεν καθορίζει έναν αλγόριθμο για τον έλεγχο αριθμών τηλεφώνου, επομένως τη στιγμή της σύνταξης αυτή η δυνατότητα δεν υποστηρίζεται ελάχιστα από τα προγράμματα περιήγησης.

Ευτυχώς για εμάς, η επικύρωση αριθμού τηλεφώνου μπορεί να γίνει χρησιμοποιώντας το χαρακτηριστικό πρότυπο, το οποίο παίρνει μια κανονική έκφραση ως όρισμα, την οποία θα εξετάσουμε στη συνέχεια.

χαρακτηριστικό μοτίβο

Το χαρακτηριστικό μοτίβο πιθανότατα θα κάνει πολλούς προγραμματιστές front-end να πηδήξουν από χαρά. Αυτό το χαρακτηριστικό δέχεται μια τυπική έκφραση (παρόμοια με τη μορφή τυπικής έκφρασης JavaScript) που θα χρησιμοποιηθεί για τον έλεγχο της ορθότητας των δεδομένων που εισάγονται στο πεδίο.

Οι κανονικές εκφράσεις είναι μια γλώσσα που χρησιμοποιείται για την ανάλυση και το χειρισμό κειμένου. Συχνά χρησιμοποιούνται για σύνθετες λειτουργίες εύρεσης και αντικατάστασης, καθώς και για έλεγχο της ορθότητας των δεδομένων που έχουν εισαχθεί.

Σήμερα, οι κανονικές εκφράσεις περιλαμβάνονται στις πιο δημοφιλείς γλώσσες προγραμματισμού, καθώς και σε πολλές γλώσσες δέσμης ενεργειών, συντάκτες, εφαρμογές, βάσεις δεδομένων και βοηθητικά προγράμματα γραμμής εντολών.

Οι τυπικές εκφράσεις (RegEX) είναι ένα ισχυρό, συνοπτικό και ευέλικτο εργαλείο για την αντιστοίχιση μιας σειράς κειμένου, όπως μεμονωμένους χαρακτήρες, λέξεις ή μοτίβα χαρακτήρων.

Περνώντας μια τυπική έκφραση ως τιμή του χαρακτηριστικού προτύπου, μπορείτε να καθορίσετε ποιες τιμές είναι αποδεκτές για ένα δεδομένο πεδίο εισαγωγής, καθώς και να ενημερώσετε τον χρήστη για σφάλματα.

Ας δούμε μερικά παραδείγματα χρήσης κανονικών παραστάσεων για την επικύρωση της τιμής των πεδίων εισαγωγής.

Τηλεφωνικοί αριθμοί

Όπως αναφέρθηκε προηγουμένως, ο τύπος πεδίου tel δεν υποστηρίζεται πλήρως από προγράμματα περιήγησης λόγω ασυνέπειας στις μορφές αριθμών τηλεφώνου σε διάφορες χώρες.

Για παράδειγμα, σε ορισμένες χώρες η μορφή για τους αριθμούς τηλεφώνου είναι xxxx-xxx-xxxx και ο ίδιος ο αριθμός τηλεφώνου θα είναι κάπως έτσι: 0803-555-8205.

Η τυπική έκφραση που ταιριάζει αυτό το μοτίβο είναι: ^\d(4)-\d(3)-\d(4)$ . Σε κώδικα αυτό μπορεί να γραφτεί ως εξής:

Τηλεφωνικό νούμερο:

Αλφαριθμητικές τιμές Απαιτείται χαρακτηριστικό

Αυτό είναι ένα χαρακτηριστικό Boolean που χρησιμοποιείται για να υποδείξει ότι πρέπει να συμπληρωθεί η τιμή ενός δεδομένου πεδίου προκειμένου να υποβληθεί η φόρμα. Όταν προσθέτετε αυτό το χαρακτηριστικό σε ένα πεδίο, το πρόγραμμα περιήγησης θα ζητήσει από τον χρήστη να συμπληρώσει αυτό το πεδίο πριν υποβάλει τη φόρμα.

Αυτό μας εξοικονομεί από την εφαρμογή επικύρωσης πεδίου με χρήση JavaScript, η οποία μπορεί να εξοικονομήσει λίγο χρόνο στους προγραμματιστές.

Για παράδειγμα: ή (για συμβατότητα XHTML)

Όλες οι επιδείξεις που έχετε δει παραπάνω χρησιμοποιούν το απαιτούμενο χαρακτηριστικό, ώστε να μπορείτε να το δοκιμάσετε προσπαθώντας να υποβάλετε τη φόρμα χωρίς να συμπληρώσετε κανένα πεδίο.

συμπέρασμα

Η υποστήριξη του προγράμματος περιήγησης για την επικύρωση φόρμας είναι αρκετά καλή και για τα παλαιότερα προγράμματα περιήγησης μπορείτε να χρησιμοποιήσετε polyfills.

Αξίζει να σημειωθεί ότι το να βασίζεσαι μόνο στην επικύρωση από την πλευρά του προγράμματος περιήγησης είναι επικίνδυνο, καθώς αυτοί οι έλεγχοι μπορούν εύκολα να παρακαμφθούν από εισβολείς ή ρομπότ.

Δεν υποστηρίζουν όλα τα προγράμματα περιήγησης HTML5 και δεν προέρχονται όλα τα δεδομένα που αποστέλλονται στο σενάριό σας από τη φόρμα σας. Αυτό σημαίνει ότι πριν δεχθείτε τελικά δεδομένα από τον χρήστη, είναι απαραίτητο να ελέγξετε την ορθότητά τους από την πλευρά του διακομιστή.

Είναι πολύ σημαντικό να έχετε επικυρώσει την εισαγωγή στη φόρμα σας πριν λάβετε τα δεδομένα υποβολής της φόρμας για περαιτέρω επεξεργασία. Όταν υπάρχουν πολλά πεδία στη φόρμα, το σενάριο επικύρωσης PHP γίνεται πολύ περίπλοκο. Επιπλέον, δεδομένου ότι κάνετε την ίδια ή παρόμοια επικύρωση για τις περισσότερες από τις φόρμες που δημιουργείτε, δαπανάται υπερβολική διπλή προσπάθεια για επικυρώσεις φορμών.

Σχετικά με αυτό το γενικό σενάριο επικύρωσης φόρμας PHP

Αυτό το γενικό σενάριο επικύρωσης φόρμας PHP καθιστά πολύ εύκολη την προσθήκη επικυρώσεων στη φόρμα σας.

Δημιουργούμε και συσχετίζουμε ένα σύνολο «περιγραφών επικύρωσης» με κάθε στοιχείο της φόρμας. Ο "περιγραφέας επικύρωσης" είναι μια συμβολοσειρά που καθορίζει τον τύπο της επικύρωσης που θα εκτελεστεί. Για παράδειγμα, "req" σημαίνει απαιτείται, "άλφα" σημαίνει επιτρέπονται μόνο αλφαβητικοί χαρακτήρες και ούτω καθεξής.

Κάθε πεδίο στη φόρμα μπορεί να έχει μηδέν, μία ή περισσότερες επικυρώσεις. Για παράδειγμα, η είσοδος δεν πρέπει να είναι κενή, να είναι μικρότερη από 25 χαρακτήρες, να είναι αλφαριθμητική κ.λπ.

Μπορείτε να συσχετίσετε ένα σύνολο περιγραφέων επικύρωσης για κάθε πεδίο εισαγωγής στη φόρμα.

Κατεβάστε το σενάριο επικύρωσης φόρμας PHP

Μπορείτε να κατεβάσετε το σενάριο επικύρωσης φόρμας PHP παρακάτω:
Το αρχείο zip περιέχει το σενάριο επικύρωσης φόρμας formvalidator.php, τεκμηρίωση και δείγματα χρήσης.

Χρησιμοποιώντας το σενάριο επικύρωσης φόρμας PHP
  • Συμπεριλάβετε το formvalidator.php στο σενάριο επεξεργασίας φόρμας
  • require_once "formvalidator.php"
  • Δημιουργήστε ένα αντικείμενο FormValidator και προσθέστε τους περιγραφείς επικύρωσης φόρμας.
  • $validator = new FormValidator(); $validator->addValidation("Όνομα","req","Παρακαλώ συμπληρώστε Όνομα"); $validator->addValidation("Email","email", "The input για το Email πρέπει να είναι μια έγκυρη τιμή email"); $validator->addValidation("Email","req","Παρακαλώ συμπληρώστε Email");

    Το πρώτο όρισμα είναι το όνομα του πεδίου εισαγωγής στη φόρμα. Το δεύτερο όρισμα είναι ο περιγραφέας επικύρωσης που λέει τον τύπο της απαιτούμενης επικύρωσης. Το τρίτο όρισμα είναι το μήνυμα σφάλματος που θα εμφανιστεί εάν η επικύρωση αποτύχει.

  • Επικυρώστε τη φόρμα καλώντας τη συνάρτηση ValidateForm().
  • if(!$validator->ValidateForm()) ( echo "Σφάλματα επικύρωσης:"; $error_hash = $validator->GetErrors(); foreach($error_hash as $inpname => $inp_err) (echo "

    $inpname: $inp_err

    \n"; ) ) Παράδειγμα

    Το παρακάτω παράδειγμα θα κάνει την ιδέα πιο ξεκάθαρη

    Όνομα: Email:

    Προσθήκη προσαρμοσμένης επικύρωσης

    Εάν θέλετε να προσθέσετε μια προσαρμοσμένη επικύρωση, η οποία δεν παρέχεται από τους περιγραφείς επικύρωσης, μπορείτε να το κάνετε. Εδώ είναι τα βήματα:

  • Δημιουργήστε μια κλάση για την προσαρμοσμένη επικύρωση και παρακάμψτε τη συνάρτηση DoValidate().
  • class MyValidator επεκτείνει το CustomValidator ( συνάρτηση DoValidate(&$formars,&$error_hash) ( if(stristr($formars["Comments"],"http://")) ( $error_hash["Comments"]="Δεν επιτρέπονται διευθύνσεις URL στα σχόλια"; επιστροφή false; ) επιστροφή true; ) )

  • Προσθέστε το προσαρμοσμένο αντικείμενο επικύρωσης
  • $validator = new FormValidator(); $validator->addValidation("Όνομα","req","Παρακαλώ συμπληρώστε Όνομα"); $validator->addValidation("Email","email", "The input για το Email πρέπει να είναι μια έγκυρη τιμή email"); $validator->addValidation("Email","req","Παρακαλώ συμπληρώστε Email"); $custom_validator = νέο MyValidator(); $validator->AddCustomValidator($custom_validator);

    Η προσαρμοσμένη συνάρτηση επικύρωσης θα κληθεί αυτόματα μετά από άλλες επικυρώσεις.

    Πίνακας περιγραφέων επικύρωσης

    Ακολουθεί η λίστα με όλους τους περιγραφείς επικύρωσης:

    Περιγραφέας επικύρωσηςΧρήση
    απαίτησηΤο πεδίο δεν πρέπει να είναι κενό
    maxlen=???ελέγχει το μήκος των δεδομένων που εισάγονται στο μέγιστο. Για παράδειγμα, εάν το μέγιστο επιτρεπόμενο μέγεθος είναι 25, δώστε τον περιγραφικό επικύρωσης ως "maxlen=25"
    minlen=???ελέγχει το μήκος της εισαγόμενης συμβολοσειράς στο απαιτούμενο ελάχιστο. παράδειγμα "minlen=5"
    αλνουμΕλέγξτε τα δεδομένα εάν περιέχουν άλλους χαρακτήρες εκτός από αλφαβητικούς ή αριθμούς
    alnum_sΕπιτρέπει μόνο αλφαβητικούς, αριθμούς και χαρακτήρες διαστήματος
    αρΕλέγξτε τα αριθμητικά δεδομένα
    άλφαΕλέγξτε τα αλφαβητικά δεδομένα.
    alpha_sΕλέγξτε τα αλφαβητικά δεδομένα και επιτρέψτε κενά.
    ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗΤο πεδίο είναι ένα πεδίο email και επαληθεύστε την εγκυρότητα των δεδομένων.
    lt=???
    λιγότερο από=???
    Επαληθεύστε ότι τα δεδομένα είναι μικρότερα από την τιμή που διαβιβάστηκε. Ισχύει μόνο για αριθμητικά πεδία.
    παράδειγμα: εάν η τιμή πρέπει να είναι μικρότερη από 1000, δώστε περιγραφή επικύρωσης ως "lt=1000"
    gt=???
    μεγαλύτερο από=???
    Επαληθεύστε ότι τα δεδομένα είναι μεγαλύτερα από την τιμή που διαβιβάστηκε. Ισχύει μόνο για αριθμητικά πεδία.
    παράδειγμα: εάν η τιμή πρέπει να είναι μεγαλύτερη από 10, δώστε περιγραφή επικύρωσης ως "gt=10"
    regexp=???Ελέγξτε με μια τυπική έκφραση ότι η τιμή πρέπει να ταιριάζει με την κανονική έκφραση.
    παράδειγμα: "regexp=^(1.20)$" επιτρέπει έως και 20 αλφαβητικούς χαρακτήρες.
    dontselect=??Αυτός ο περιγραφέας επικύρωσης προορίζεται για επιλεγμένα στοιχεία εισόδου (λίστες) Κανονικά, τα πλαίσια λίστας επιλογής θα έχουν ένα στοιχείο που θα λέει "Επιλέξτε ένα". Ο χρήστης θα πρέπει να επιλέξει μια επιλογή διαφορετική από αυτήν την επιλογή. Εάν η τιμή αυτής της επιλογής είναι "Select One", η περιγραφή επικύρωσης θα πρέπει να είναι "dontselect=Select One"
    dontselectchkΑυτός ο περιγραφέας επικύρωσης είναι για πλαίσια ελέγχου. Ο χρήστης δεν πρέπει να επιλέξει το πλαίσιο ελέγχου. Δώστε την τιμή του πλαισίου ελέγχου αντί για ??
    Για παράδειγμα, dontselectchk=on
    shouldselchkΑυτός ο περιγραφέας επικύρωσης είναι για πλαίσια ελέγχου. Ο χρήστης πρέπει να επιλέξει το συγκεκριμένο πλαίσιο ελέγχου. Δώστε την τιμή του πλαισίου ελέγχου αντί για ??
    Για παράδειγμα, shouldselchk=on
    dontselectradioΑυτός ο περιγραφέας επικύρωσης είναι για κουμπιά επιλογής. Ο χρήστης δεν πρέπει να επιλέξει το συγκεκριμένο κουμπί επιλογής. Δώστε την τιμή του κουμπιού επιλογής αντί για ??
    Για παράδειγμα, dontselectradio=NO
    επιλεκτικό ραδιόφωνοΑυτός ο περιγραφέας επικύρωσης είναι για κουμπιά επιλογής. Ο χρήστης θα πρέπει να επιλέξει το συγκεκριμένο κουμπί επιλογής. Δώστε την τιμή του κουμπιού επιλογής αντί για ??
    Για παράδειγμα, selectradio=ναι
    selmin=??Επιλέξτε τουλάχιστον n αριθμό πλαισίων ελέγχου από μια ομάδα πλαισίων ελέγχου.
    Για παράδειγμα: selmin=3
    μόνοςΚαθιστά υποχρεωτική μια ομάδα ραδιοφώνου. Ο χρήστης θα πρέπει να επιλέξει τουλάχιστον ένα στοιχείο από την ομάδα ραδιοφώνου.
    eqelmnt=???συγκρίνετε δύο στοιχεία στη φόρμα και βεβαιωθείτε ότι οι τιμές είναι ίδιες. Για παράδειγμα, «password» και «confirm password». Αντικαταστήστε το ??? με το όνομα του άλλου στοιχείου εισόδου.
    Για παράδειγμα: eqelmnt=confirm_pwd

    Θα μιλήσουμε για την επικύρωση των δεδομένων POST ή GET, αν και καταρχήν αυτό μπορεί να εφαρμοστεί και σε δεδομένα που λαμβάνονται με άλλες μεθόδους, όπως τα cookies. Καθώς αναπτύσσετε οποιαδήποτε εφαρμογή Ιστού, πρέπει να γράψετε μια διεπαφή για την αλληλεπίδραση με τους χρήστες και φυσικά να δημιουργήσετε διάφορες φόρμες για να στείλετε δεδομένα από τους χρήστες στον διακομιστή. για παράδειγμα, αυτά θα μπορούσαν να είναι σχόλια. Νομίζω ότι είναι σαφές και προφανές σε όλους ότι τα δεδομένα που λαμβάνονται πρέπει να ελεγχθούν για να διαπιστωθεί εάν αντιστοιχούν στον τύπο, το μέγεθος και το καθορισμένο εύρος. Πρώτα απ 'όλα, αυτό απαιτείται για την ασφάλεια του συστήματος, του ιστότοπου ή της βάσης δεδομένων, επειδή... Εσφαλμένα μεταδιδόμενα δεδομένα ή ένα εσκεμμένα κακώς σχηματισμένο αίτημα μπορεί να ανοίξει πρόσβαση σε έναν εισβολέα.

    Δεύτερον, τα μη επαληθευμένα δεδομένα, εάν είναι λανθασμένα, μπορεί να προκαλέσουν ασταθή λειτουργία του σεναρίου, του συστήματος ή ολόκληρου του διακομιστή. Επομένως, όλα τα δεδομένα πρέπει να ελεγχθούν και να διπλοελεγχθούν· ίσως κάποιος πει ότι δεν χρειάζεται υπερβολική παράνοια, αλλά πιστεύω ότι σε αυτό το θέμα απλώς δεν μπορεί να είναι υπερβολική.

    Μην εμπιστεύεστε δεδομένα που λαμβάνονται από χρήστες, υπό καμία πρόφαση, σε καμία περίπτωση. Συμβαίνει να είμαστε απλώς πολύ τεμπέληδες για να γράψουμε κώδικα που ελέγχει τα ληφθέντα δεδομένα για άλλη μια φορά ή ελπίζουμε ότι οι υπάρχουσες μέθοδοι επαλήθευσης είναι αρκετές, με αποτέλεσμα να κάνουμε παραχωρήσεις στον εαυτό μας.

    Μια μικρή παρέκκλιση από το θέμα:
    Η εργασία σε έργα, η ανάπτυξη και ο προγραμματισμός ιστοσελίδων, σεναρίων και άλλων συστημάτων καταλαμβάνει σχεδόν όλο τον ελεύθερο χρόνο μου (εκτός από τον χρόνο εργασίας), με άλλα λόγια, κάνω αυτή τη δουλειά για τον μέγιστο δυνατό αριθμό ωρών την ημέρα. Από καιρό σε καιρό υπάρχει η ανάγκη να δοκιμάσετε κάτι, για διασκέδαση ή απλώς περιέργεια. Ως αποτέλεσμα, οι τοποθεσίες που κατασκευάζονται βιαστικά, χρησιμοποιώντας αυτοσχέδιους κινητήρες ή CMS αρχαίων εκδόσεων, γίνονται παρόμοιοι αρουραίοι εργαστηριακών δοκιμών. Φυσικά, όλα τα παραπάνω πάσχουν από λανθασμένα γραμμένο κώδικα, έλλειψη ελέγχου δεδομένων και απλώς βρίθουν από διάφορα σφάλματα. Στην πραγματικότητα, στις περισσότερες περιπτώσεις, σε μια ώρα των πειραμάτων μου σε τέτοιους ιστότοπους, καταφέρνω να βρω αρκετές σοβαρές ευπάθειες και οι περισσότερες από αυτές έγκεινται σε ανεπαρκή επικύρωση των δεδομένων που έλαβα. Πρόσφατα, αυτό έχει βρεθεί συχνά σε σενάρια που επεξεργάζονται δεδομένα POST που λαμβάνονται από JavaScript + Ajax.

    Προφανώς, οι προγραμματιστές που έγραψαν αυτά τα σενάρια χρησιμοποιώντας το Ajax πιστεύουν ότι εφόσον όλα τα αιτήματα εμφανίζονται στο παρασκήνιο, εν αγνοία του χρήστη ή απλά χωρίς επαναφόρτωση της σελίδας, τότε τα δεδομένα δεν χρειάζεται να ελέγχονται ιδιαίτερα.

    Κατά κανόνα, αρκετά από αυτά τα σενάρια αποδεικνύονται τόσο γεμάτα τρύπες που χωρίς ιδιαίτερη προσπάθεια καταφέρνουν να κάνουν μια μεγαλύτερη τρύπα και να πλημμυρίσουν το καβούκι τους. φυσικά αποκλειστικά για πειραματισμό και τίποτα παραπάνω (η διαχείριση τέτοιων ιστοτόπων ενημερώνεται πάντα για τα υφιστάμενα τρωτά σημεία).

    Νομίζω ότι η σημασία της επικύρωσης είναι ξεκάθαρη σε όλους. Για μεγάλο χρονικό διάστημα, έγραφα το ίδιο κομμάτι κώδικα κάθε φορά, στη συνέχεια χρησιμοποιούσα τις δικές μου λειτουργίες επαλήθευσης δεδομένων, πολλές από τις οποίες ήταν πολύ πρωτόγονες και, κατά κανόνα, διάσπαρτες σε διαφορετικά μέρη (περιλαμβανόμενων) αρχείων. Σύντομα άρχισα να εξοικειώνομαι με τα πλαίσια PHP Zend, CI, Kohana, καθένα από τα οποία υλοποίησε τη δική του κλάση για την επικύρωση δεδομένων που δανείστηκα για τα έργα μου. Στο τέλος, αποφάσισα να προσαρμόσω μια από τις τάξεις CI στις ανάγκες μου, αλλά αποδείχθηκε ότι ο συγγραφέας ενός από τα ιστολόγια προγραμματισμού είχε ήδη φροντίσει γι' αυτό. Στη συνέχεια, μοιράζομαι τα έργα του, δηλαδή την τροποποιημένη βιβλιοθήκη CodeIgniter.

    Ας δούμε τον παρακάτω κώδικα:

    Προβολή κώδικα PHP

    require_once "validator.class.php" ; $validator = new Validator() ; $validator -> set_rules ("όνομα" , "Το όνομά σας" , πίνακας ("απαιτείται" => , "άλφα" => ) ); $validator -> set_rules ("email" , "Το email σας" , array ("required" => "Το πεδίο %s απαιτείται" , "valid_email" => ) ); if ($validator -> run () ) ( echo "Η επικύρωση ήταν επιτυχής" ; ) else (echo $validator -> get_string_errors () ;)

    Όπως μπορείτε να δείτε από το παράδειγμα, στην πρώτη γραμμή συμπεριλαμβάνουμε το αρχείο κλάσης validator.calss.phpστο σενάριό μας. Στη συνέχεια, δημιουργούμε μια παρουσία της κλάσης και αποθηκεύουμε το αντικείμενο σε μια μεταβλητή $validator.
    Στη συνέχεια, χρησιμοποιώντας τη μέθοδο $validator->set_rules($field, $label, $rules)ορίστε τα πεδία για επικύρωση.

    Αυτή η μέθοδος παίρνει 3 παραμέτρους:

  • $field- όνομα του πεδίου επικύρωσης (η τιμή του χαρακτηριστικού name στην ετικέτα)
  • $label- το όνομα του πεδίου επικύρωσης, θα εισαχθεί στα μηνύματα σφάλματος
  • $κανόνες- μια σειρά κανόνων επικύρωσης, στην οποία ο κανόνας επικύρωσης χρησιμοποιείται ως κλειδί και το μήνυμα σφάλματος για αυτόν τον κανόνα χρησιμοποιείται ως τιμή
  • Αφού οριστούν όλα τα πεδία για επικύρωση, εκκινούμε τον επικυρωτή χρησιμοποιώντας τη μέθοδο $validator->run(). Εάν η επικύρωση ήταν επιτυχής, αυτή η μέθοδος θα επιστρέψει την τιμή ΑΛΗΘΗΣ, διαφορετικά, εάν υπάρχουν σφάλματα, θα επιστρέψει ΨΕΥΔΗΣ.

    Υπάρχουν τρεις τρόποι λήψης μηνυμάτων σφάλματος:

  • get_string_errors()- επιστρέφει όλα τα μηνύματα σφάλματος ως συμβολοσειρά
  • get_array_errors()— επιστρέφει όλα τα μηνύματα ως πίνακα, όπου το όνομα πεδίου χρησιμοποιείται ως κλειδί και η περιγραφή σφάλματος για αυτό το πεδίο χρησιμοποιείται ως τιμή.
  • form_error ($field)- επιστρέφει ένα μήνυμα σφάλματος για το πεδίο που μεταβιβάστηκε ως παράμετρος $field
  • Από προεπιλογή, τα μηνύματα σφάλματος είναι τυλιγμένα σε μια ετικέτα . Για να ορίσετε το σχέδιό σας, χρησιμοποιήστε τη μέθοδο set_error_delimiters ($prefix, $suffix). Για παράδειγμα όπως αυτό:

    Τα μηνύματα σφάλματος θα εμφανίζονται τώρα ως divμε τάξη "λάθος"

    Όπως μπορείτε να δείτε, όλα είναι πολύ απλά.

    Προβολή κώδικα PHP

    $validator -> set_error_delimiters ( " " , " " );

    Για να ορίσετε κανόνες επικύρωσης, μπορείτε να χρησιμοποιήσετε τη μέθοδο set_rules ($fields)περάσουν έναν πολυδιάστατο συσχετιστικό πίνακα. Ας δούμε ένα παράδειγμα:

    Προβολή κώδικα PHP

    $rules = array ( array ( "field" => "name" , "label" => "Το όνομά σας" , "rules" => array ( "required" => "Το πεδίο %s απαιτείται" , "alpha" = > "Το πεδίο %s πρέπει να περιέχει μόνο γράμματα" ) , array ( "field" => "email" , "label" => "Το email σας" , "rules" => array ( "required" => "Το πεδίο % s είναι απαιτείται" , "valid_email" => "Το πεδίο %s πρέπει να περιέχει μια έγκυρη διεύθυνση email" ) ) ) ; $validator -> set_rules ($rules ) ;

    Όπως μπορείτε να δείτε, έγραψα τους ίδιους κανόνες επικύρωσης όπως στο πρώτο παράδειγμα, μόνο με τη μορφή ενός πολυδιάστατου συσχετιστικού πίνακα. Μπορείτε να χρησιμοποιήσετε οποιαδήποτε από τις μεθόδους που σας ταιριάζουν καλύτερα σε μια δεδομένη κατάσταση.

    Λοιπόν, ποιους κανόνες επικύρωσης υποστηρίζει αυτή η τάξη;

    Έφερα σε αυτήν την τάξη τους πιο συνηθισμένους κανόνες επικύρωσης που συναντούν όλοι. Ακολουθεί μια πλήρης λίστα με αυτούς τους κανόνες:

    απαιτείταιΕπιστρέφει FALSE εάν το πεδίο είναι κενό
    ακέραιος αριθμόςΕπιστρέφει FALSE εάν η τιμή δεν είναι ακέραιος
    φλοτέρΕπιστρέφει FALSE εάν η τιμή δεν είναι αριθμητική τιμή
    valid_urlΕπιστρέφει FALSE εάν η τιμή δεν είναι έγκυρη διεύθυνση URL
    valid_emailΕπιστρέφει FALSE εάν η τιμή δεν είναι έγκυρη διεύθυνση email
    valid_ipΕπιστρέφει FALSE εάν η διεύθυνση IP δεν είναι έγκυρη
    σπίρταΕπιστρέφει FALSE εάν το στοιχείο δεν ταιριάζει με την τιμή άλλου στοιχείου πεδίου
    άλφαΕπιστρέφει FALSE εάν το στοιχείο περιέχει περισσότερα από γράμματα
    valid_captchaΕπιστρέφει FALSE εάν η τιμή στο πεδίο συνεδρίας δεν είναι ίση με την τιμή του πεδίου φόρμας
    Έγκυρη ημερομηνίαΕπιστρέφει FALSE εάν το στοιχείο περιέχει μη έγκυρη ημερομηνία

    Οι περισσότεροι από αυτούς τους κανόνες χρησιμοποιούν φίλτρα, τα οποία έγιναν διαθέσιμα στην PHP 5.

    Εάν θέλετε, μπορείτε πάντα να επεκτείνετε το σύνολο κανόνων για επικύρωση προσθέτοντας τις απαραίτητες συναρτήσεις στην κλάση Validator.

    Για να λάβετε την τιμή των επεξεργασμένων δεδομένων POST, χρησιμοποιήστε την ακόλουθη μέθοδο:

    Προβολή κώδικα PHP

    Συνήθως, αυτή η μέθοδος καλείται να διαγράψει τη φόρμα μετά την επιτυχή επεξεργασία της φόρμας.

    Καλησπέρα σε όλους (περισσότερο σαν νύχτα - σημείωμα συντάκτη). Σήμερα θα το βελτιώσουμε λίγο. Αρχικά, ας μάθουμε πώς να κάνουμε επικύρωση φόρμας στην PHP και να κάνουμε μερικούς χειρισμούς ασφαλείας.

    Επομένως, κοιτάξτε τον παρακάτω κώδικα και σημειώστε τις ακόλουθες αλλαγές και τους ακόλουθους λόγους για τις αλλαγές. Τόνισα όλες τις νέες γραμμές με χρώμα.

    Το όνομα των πεδίων της φόρμας έχει αλλάξει. Ίσως ρωτήσετε – γιατί στο διάολο το χρειαζόμαστε αυτό; Είναι απλό, θα σου απαντήσω. Από όσο γνωρίζω, ορισμένα spam bots αναζητούν ιστοσελίδες που αναζητούν φόρμες και τις συμπληρώνουν με βάση τα ονόματα αυτών των πεδίων. Θεωρητικά, αν δεν βρουν ταίρι, τότε πάνε σπίτι τους, αυτό που θέλουμε. Φυσικά, δεν νομίζω ότι ο βαθμός αυτής της προστασίας είναι ιδιαίτερα μεγάλος, αλλά δεν θα μας βλάψει και αν τα ανεπιθύμητα μηνύματα ηλεκτρονικού ταχυδρομείου μειωθούν κατά 1 γράμμα, αυτό θα είναι καλό =).

    Έλεγχος εάν η διεύθυνση email έχει εισαχθεί σωστά. Η γραμμή 17 χρησιμοποιεί τον τελεστή elseif, ο οποίος θα ελεγχθεί εάν αν μας επιστραφεί θετική απάντηση, δηλαδή έλεγε ότι η διεύθυνση email έλειπε καθόλου, δηλαδή δεν είχε εισαχθεί. Εδώ χρησιμοποιούμε τη συνάρτηση preg_match, η οποία μας επιτρέπει να συγκρίνουμε την εισαγόμενη διεύθυνση με κοινή έκφραση. Ίσως θα γράψω σύντομα για τις κανονικές εκφράσεις αργότερα, αλλά προς το παρόν αξίζει να γνωρίζουμε ότι μια κανονική έκφραση δημιουργεί ένα είδος προτύπου με το οποίο ελέγχεται η συμβολοσειρά μας. Και αν, στην περίπτωσή μας, η διεύθυνση που εισάγατε δεν ταιριάζει με την έκφραση, τότε θα εμφανιστεί ξανά ένα σφάλμα. Για παράδειγμα, εδώ είναι μερικές ακόμη κανονικές εκφράσεις:
    |^[-а-яе\s\.,;:\?!]+$|i– αυτή η τυπική έκφραση σάς επιτρέπει να χρησιμοποιείτε μόνο το ρωσικό αλφάβητο και ορισμένους χαρακτήρες όπως κενό, τελεία, κόμμα κ.λπ.
    #http://[-a-z0-9_.]+[-a-z0-9_:@&?=+,.!/~*’%$]*\.(html?|php)#i– και αυτή η έκφραση σάς επιτρέπει να ελέγξετε τη σωστή ορθογραφία μιας διεύθυνσης στο Διαδίκτυο.

    Στη συνέχεια, χρησιμοποιούμε τον τελεστή else, όπου έχει ήδη μεταφερθεί όλος ο κωδικός μας για την αποστολή επιστολής. Μπορείτε να δημιουργήσετε μόνοι σας κανόνες επαλήθευσης σε οποιαδήποτε ποσότητα, απλώς προσθέστε νέους εάν, όπως για τον έλεγχο μιας διεύθυνσης email, και θα είστε ευχαριστημένοι.




    Υπεύθυνος επικοινωνίας:



    Email επικοινωνίας:



    Μήνυμα:






    Αυτός είναι ο τρόπος με τον οποίο μπορείτε να επικυρώσετε τις φόρμες PHP σας χωρίς να καταφύγετε σε οτιδήποτε ξένο. Την επόμενη φορά σε μια ανάρτηση για το θέμα των φορμών, νομίζω ότι θα εξεταστεί η επικύρωση των φορμών στο jQuery. Στο μεταξύ, περιμένω τα σχόλια και τις ευχές σας. Καληνύχτα και καλό ξημέρωμα σε όλους =).

    Αυτό και τα επόμενα κεφάλαια δείχνουν πώς να χρησιμοποιήσετε την PHP για την επικύρωση δεδομένων φόρμας.

    Επικύρωση φόρμας PHP

    Σκεφτείτε ΑΣΦΑΛΕΙΑ όταν επεξεργάζεστε φόρμες PHP!

    Αυτές οι σελίδες θα δείχνουν πώς να επεξεργάζεστε φόρμες PHP έχοντας κατά νου την ασφάλεια. Η σωστή επικύρωση των δεδομένων της φόρμας είναι σημαντική για την προστασία της φόρμας σας από χάκερ και spammers!

    Η φόρμα HTML που θα εργαστούμε σε αυτά τα κεφάλαια, περιέχει διάφορα πεδία εισαγωγής: υποχρεωτικά και προαιρετικά πεδία κειμένου, κουμπιά επιλογής και ένα κουμπί υποβολής:

    Οι κανόνες επικύρωσης για το παραπάνω έντυπο είναι οι εξής:

    Κανόνες επικύρωσης πεδίου
    Ονομα Απαιτείται. + Πρέπει να περιέχει μόνο γράμματα και κενά
    ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Απαιτείται. + Πρέπει να περιέχει μια έγκυρη διεύθυνση email (με @ και .)
    Δικτυακός τόπος Προαιρετικός. Εάν υπάρχει, πρέπει να περιέχει μια έγκυρη διεύθυνση URL
    Σχόλιο Προαιρετικός. Πεδίο εισαγωγής πολλών γραμμών (textarea)
    Γένος Απαιτείται. Πρέπει να επιλέξετε ένα

    Πρώτα θα δούμε τον απλό κώδικα HTML για τη φόρμα:

    Πεδία κειμένου

    Τα πεδία ονόματος, email και ιστότοπου είναι στοιχεία εισαγωγής κειμένου και το πεδίο σχολίων είναι μια περιοχή κειμένου. Ο κώδικας HTML μοιάζει με αυτό:

    Ονομα:
    ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ:
    Δικτυακός τόπος:
    Σχόλιο:

    Κουμπιά ραδιοφώνου

    Τα πεδία φύλου είναι κουμπιά επιλογής και ο κώδικας HTML μοιάζει με αυτό:

    Γένος:
    Θηλυκός
    Αρσενικός
    Αλλα

    Το Στοιχείο Μορφής

    Ο κώδικας HTML της φόρμας μοιάζει με αυτό: