Validarea datelor este o parte integrantă a lucrului cu formularele. Nu numai că datele trimise nevalid pot conduce la probleme de securitate, dar pot și să vă spargă pagina web. Astăzi, vom examina modul de eliminare a caracterelor ilegale și validarea datelor utilizând funcția "filter_var".
Un exemplu poate fi văzut mai jos. Un utilizator a introdus textul "Nu am unul" ca pagină de pornire. Dacă aceste date urmau să fie introduse într-o bază de date și apoi recuperate mai târziu ca o legătură, legătura ar fi întreruptă.
Majoritatea oamenilor tind să se gândească la validarea datelor ca la un proces extrem de obositor în care unul:
Există probleme evidente cu cele enumerate mai sus:
Din fericire, începând cu versiunea 5.2, PHP a inclus o mare funcție numită filter_var
care elimină durerea validării datelor.
filter_var
va face, ambele, dezinfectarea și validarea datelor. Care este diferența dintre cele două?
Notă: de ce sanitizați și nu doar validați? Este posibil ca utilizatorul să fi scris greșit într-un caracter greșit sau poate că a fost dintr-o copie și o copie proastă. Prin dezinfectarea datelor, vă asumați responsabilitatea de a vâna greseala în afara utilizatorului.
filter_var
Utilizarea filter_var
este incredibil de ușor. Este pur și simplu o funcție PHP care necesită două date:
De exemplu, codul de mai jos va elimina toate etichetele HTML dintr-un șir:
$ string = "Salut Lume!
"$ new_string = filter_var ($ string, FILTER_SANITIZE_STRING); // $ new_string este acum" Bună ziua, lume! ";
Iată un alt exemplu - de data asta mai dificil. Codul de mai jos va asigura că valoarea variabilei este o adresă IP validă:
$ ip = "127.0.0.1"; $ valid_ip = filtru_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip este TRUE $ ip = "127.0.1.1.1.1"; $ valid_ip = filtru_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip este FALSE
Atât de simplu este de a utiliza filter_var
. Pentru o listă completă a tuturor regulilor pe care le puteți verifica, consultați sfârșitul acestui tutorial.
Mai jos este un exemplu rapid de dezinfecție a datelor din două câmpuri: un câmp de e-mail și un câmp de pagină de pornire. Acest exemplu va elimina orice caractere care nu ar trebui să apară în niciun tip de date.
"; dacă isset ($ _ POST ['homepage'])) echo filter_var ($ _ POST ['homepage'],
";>>
Prin utilizarea funcției FILTER_SANITIZE_EMAIL
și FILTER_SANITIZE_URL
constantele definite de PHP, ghicitul lucru de a ști ce personaje sunt ilegale este plecat.
Doar pentru că datele sunt dezinfectate nu asigură că sunt corect formatate. În exemplul de mai jos, datele nu au fost dezinfectate, dar este evident că datele introduse de utilizator nu sunt un e-mail sau o adresă URL.
Pentru a asigura că datele sunt formatate corespunzător, acestea trebuie validate.
"; altceva echo" $ email este NU o adresă de e-mail validă.
"; dacă este ($ _ POST ['homepage'])) $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL) o adresă URL validă.
"; else echo" $ homepage este NU o adresă URL validă.
";?>
Acum că datele au fost validate, puteți fi siguri că informațiile trimise sunt exact ceea ce căutați.
Acum, că salvarea și validarea datelor au fost acoperite, le vom pune aceste abilități într-un formular rapid de trimitere prin e-mail. Acest lucru nu va fi în nici un caz de calitate a producției - de exemplu, nici o formă nu ar trebui să necesite o pagină de pornire - dar va funcționa perfect pentru acest tutorial. Formularul va avea 4 informații:
Vom dezinfecta și valida toate cele 4 fragmente de date și vom trimite doar e-mailul dacă acestea sunt toate valide. Dacă ceva nu este valid sau dacă câmpurile sunt necompletate, formularul va fi prezentat utilizatorului împreună cu o listă de elemente pe care să le remediați. De asemenea, vom returna datele dezinfectate utilizatorului în cazul în care nu sunt conștiente de faptul că anumite caractere sunt ilegale.
Pentru primul pas, trebuie doar să creați un element de formă cu 5 câmpuri: butoanele listate mai sus și un buton de trimitere:
Puteți verifica dacă a fost trimis un formular, dacă vedeți dacă butonul de trimitere a fost "setat". Plasați următorul cod deasupra formularului:
dacă (isset ($ _ POST ['Trimite']))
Deoarece ambele câmpuri de nume și mesaje vor fi dezinfectate și validate la fel, le vom face împreună. Mai întâi, verificați dacă un câmp este gol făcând următoarele:
dacă ($ _POST ['name'] == "") dacă ($ _POST ['message'] == "")
Apoi, dezinfectați-i cu FILTER_SANITIZE_STRING
constant
$ _POST ['name'] = filtrul_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); $ _POST ['mesaj'] = filter_var ($ _ POST ['mesaj'], FILTER_SANITIZE_STRING);
În cele din urmă, verificați dacă cele două câmpuri nu sunt goale. Acest lucru trebuie să vă asigurați că, după eliminarea tuturor caracterelor ilegale, nu rămâneți cu un câmp gol:
dacă ($ _POST ['name'] == "") dacă ($ _POST ['message'] == "")
Nu vom face nici o validare în aceste două câmpuri pur și simplu pentru că nu există nici o modalitate absolută de validare împotriva unui nume sau a unui mesaj arbitrar.
Codul final arată astfel:
dacă $ _POST ['name']! = "") $ _POST ['nume'] = filtrul_var ($ _ POST ['name']; dacă $ _POST ['name'] == "") $ errors = = Vă rugăm să introduceți un nume valid.
„; altceva $ errors = = Introduceți numele dvs..
„; dacă ($ _POST ['message']! = "") $ _POST ['mesaj'] = filter_var ($ _ POST ['mesaj'], FILTER_SANITIZE_STRING); dacă ($ _POST ['message'] == "") $ errors. = 'Introduceți un mesaj de trimis.
„; altceva $ errors. = 'Introduceți un mesaj de trimis.
„;
Câmpul de e-mail va fi dezinfectat și validat la fel cum a fost mai devreme în tutorial.
În primul rând, verificați dacă nu este necompletat:
dacă ($ _POST ['email']! = "")
Apoi, dezinfectați-l:
$ email = filtru_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL);
În final, validați-l ca pe o adresă de e-mail adevărată:
dacă (! filter_var ($ email, FILTER_VALIDATE_EMAIL))
Codul final arată astfel:
dacă $ _POST ['email']! = "") $ email = filtru_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); dacă (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ e-mail este NU o adresă de e-mail validă.
"; altceva $ errors = = Introduceți adresa dvs. de e-mail.
„;
Din nou, câmpul de pe pagina de pornire va fi dezinfectat și validat în același mod ca și mai devreme în tutorial.
Mai întâi, asigurați-vă că nu este gol:
dacă ($ _POST ['homepage']! = "")
Apoi, dezinfectați-l și eliminați orice personaj ilegal:
$ homepage = filtra_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL)
În cele din urmă, validați-o pentru a vă asigura că este o adresă URL adevărată:
dacă (! filter_var ($ homepage, FILTER_VALIDATE_URL))
Codul final arată astfel:
dacă $ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); dacă ! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "Pagina principală este NU o adresă URL validă.
"; altceva $ errors = = Vă rugăm să introduceți pagina dvs. de pornire.
„;
Acum, că am trecut prin toate câmpurile, este timpul să raportați erorile sau să trimiteți mesajul. Începeți, presupunând că nu au existat erori:
dacă (! $ errors)
Apoi, construiți mesajul de e-mail:
$ mail_to = '[email protected]'; $ subject = 'Mesaj nou de la trimiterea formularului'; $ message = 'De la:'. $ _POST ['name']. "\ N"; $ message = 'Email:'. $ _POST ['email']. "\ N"; $ message = 'Pagina de pornire:'. $ _POST ['homepage']. "\ N"; "Mesaj: \ n". $ _POST ['mesaj']. "\ N \ n";
Și, în cele din urmă, trimiteți mesajul:
mail ($ la, $ subiect, $ mesaj);
Cu toate acestea, dacă au existat erori, raportați-le și încercați din nou să încercați:
echo "". $ erori. '„;
Proiectul finalizat arată astfel:
„; altceva $ errors = = Introduceți numele dvs..
„; dacă ($ _POST ['email']! = "") $ email = filtru_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); dacă (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ e-mail este NU o adresă de e-mail validă.
"; altceva $ errors = = Introduceți adresa dvs. de e-mail.
„; dacă ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); dacă ! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "Pagina principală este NU o adresă URL validă.
"; altceva $ errors = = Vă rugăm să introduceți pagina dvs. de pornire.
„; dacă ($ _POST ['message']! = "") $ _POST ['mesaj'] = filter_var ($ _ POST ['mesaj'], FILTER_SANITIZE_STRING); dacă ($ _POST ['message'] == "") $ errors. = 'Introduceți un mesaj de trimis.
„; altceva $ errors. = 'Introduceți un mesaj de trimis.
„; dacă (! $ erori) $ mail_to = '[email protected]'; $ subject = 'Mesaj nou de la trimiterea formularului'; $ message = 'De la:'. $ _POST ['name']. "\ N"; $ message = 'Email:'. $ _POST ['email']. "\ N"; $ message = 'Pagina de pornire:'. $ _POST ['homepage']. "\ N"; "Mesaj: \ n". $ _POST ['mesaj']. "\ N \ n"; mail ($ la, $ subiect, $ mesaj); echo "Vă mulțumim pentru e-mailul dvs.!
"; altceva echo '". $ erori. '„; ?>
Sper că citirea acestui tutorial vă oferă o bună prezentare a noilor caracteristici de filtrare a datelor din PHP. Există încă multe funcții și reguli care nu au fost acoperite, deci dacă sunteți interesat să aflați mai multe, vă rugăm să consultați secțiunea Filtrarea datelor din manualul PHP.