Gegevensvalidatie is een integraal onderdeel van het werken met formulieren. Niet alleen kunnen ongeldige ingediende gegevens leiden tot beveiligingsproblemen, maar het kan ook uw webpagina breken. Vandaag gaan we bekijken hoe u illegale tekens kunt verwijderen en gegevens kunt valideren met behulp van de functie "filter_var".
Een voorbeeld is hieronder te zien. Een gebruiker heeft de tekst "I not not one" als startpagina ingevoerd. Als deze gegevens in een database zouden worden ingevoerd en later als een koppeling zouden worden opgehaald, zou de koppeling verbroken zijn.
De meeste mensen denken dat gegevensvalidatie een enorm saai proces is waarbij iemand ook:
Er zijn duidelijke problemen met de hierboven genoemde:
Gelukkig, beginnend met versie 5.2, heeft PHP een geweldige functie met de naam filter_var
dat neemt de pijn weg van gegevensvalidatie.
filter_var
zal doen, zowel, zuiveren en valideren van gegevens. Wat is het verschil tussen de twee?
Notitie: waarom ontsmetten en niet alleen valideren? Het is mogelijk dat de gebruiker per ongeluk een verkeerd teken heeft getypt of dat deze van een slechte kopie en plak is. Door de gegevens te ontsmetten, neemt u de verantwoordelijkheid om op de fout van de gebruiker te jagen.
filter_var
Gebruik makend van filter_var
is ongelooflijk eenvoudig. Het is gewoon een PHP-functie die twee stukjes gegevens vergt:
Met de onderstaande code worden bijvoorbeeld alle HTML-tags uit een tekenreeks verwijderd:
$ string = "Hallo Wereld!
"; $ new_string = filter_var ($ string, FILTER_SANITIZE_STRING); // $ new_string is nu" Hallo wereld! "
Hier is nog een voorbeeld - deze keer moeilijker. De onderstaande code zorgt ervoor dat de waarde van de variabele een geldig IP-adres is:
$ ip = "127.0.0.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip is TRUE $ ip = "127.0.1.1.1.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip is FALSE
Dat is hoe eenvoudig het is om te gebruiken filter_var
. Zie het einde van deze zelfstudie voor een volledige lijst met alle regels die u kunt controleren.
Hieronder ziet u een snel voorbeeld van het ontsmetten van invoer uit twee velden: een e-mailveld en een veld voor de beginpagina. In dit voorbeeld worden tekens verwijderd die niet in beide typen gegevens mogen voorkomen.
"; if (isset ($ _ POST ['homepage'])) echo filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); echo"
";?>
Door de FILTER_SANITIZE_EMAIL
en FILTER_SANITIZE_URL
constanten gedefinieerd door PHP, het giswerk om te weten welke tekens illegaal zijn is verdwenen.
Alleen omdat de gegevens worden opgeschoond, is niet gegarandeerd dat deze correct zijn opgemaakt. In het onderstaande voorbeeld hoefden de gegevens niet te worden opgeschoond, maar het is duidelijk dat de gebruikersinvoer geen e-mail of URL is.
Om ervoor te zorgen dat de gegevens correct zijn geformatteerd, moet deze worden gevalideerd.
"; else echo" $ email is NIET een geldig e-mailadres.
"; if (isset ($ _ POST ['homepage'])) $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (filter_var ($ homepage, FILTER_VALIDATE_URL)) echo" $ startpagina is een geldige URL.
"; else echo" $ startpagina is NIET een geldige URL.
";?>
Nu de gegevens zijn gevalideerd, kunt u er zeker van zijn dat de ingediende informatie precies is wat u zoekt.
Nu de gegevenssanering en -validatie zijn behandeld, zullen we die vaardigheden gebruiken met een snel e-mailinzendingsformulier. Dit zal in geen geval van productiekwaliteit zijn - bijvoorbeeld, geen formulier zou een homepage moeten hebben - maar het zal perfect werken voor deze tutorial. Het formulier zal 4 stukjes informatie bevatten:
We zullen opschonen en valideren voor alle 4 de gegevens en alleen de e-mail verzenden als ze allemaal geldig zijn. Als iets ongeldig is of als velden leeg zijn, wordt het formulier aan de gebruiker gepresenteerd, samen met een lijst met items om te herstellen. We zullen ook de ontsmette gegevens aan de gebruiker retourneren in het geval dat hij niet weet dat bepaalde tekens illegaal zijn.
Maak voor de eerste stap eenvoudig een formulierelement met 5 velden: de hierboven vermelde en een verzendknop:
U kunt controleren of een formulier is verzonden door te kijken of de knop Verzenden is "ingesteld". Plaats de volgende code boven uw formulier:
if (isset ($ _ POST ['Submit']))
Omdat zowel de naam- als de berichtvelden hetzelfde zullen worden gezuiverd en gevalideerd, zullen we ze samen doen. Controleer eerst of een veld leeg is door het volgende te doen:
if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")
Maak ze vervolgens schoon met de FILTER_SANITIZE_STRING
constante
$ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING);
Controleer ten slotte of de twee velden nog steeds niet leeg zijn. Dit is om ervoor te zorgen dat na het verwijderen van alle illegale tekens, er geen leeg veld overblijft:
if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")
We zullen geen enkele validatie uitvoeren op deze twee velden, simpelweg omdat er geen absolute manier is om te valideren tegen een Naam of willekeurige boodschap.
De definitieve code ziet er zo uit:
if ($ _POST ['name']! = "") $ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); if ($ _POST ['name'] == "") $ errors. = 'Vul een geldige naam in.
'; else $ errors. = 'Vul uw naam in.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Voer een bericht in om te verzenden.
'; else $ errors. = 'Voer een bericht in om te verzenden.
';
Het e-mailveld wordt opgeschoond en gevalideerd op dezelfde manier als eerder in de zelfstudie.
Controleer eerst of het niet leeg is:
if ($ _POST ['email']! = "")
Maak het vervolgens schoon:
$ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL);
Bevestig ten slotte het als een echt e-mailadres:
if (! filter_var ($ email, FILTER_VALIDATE_EMAIL))
De definitieve code ziet er zo uit:
if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email is NIET een geldig e-mailadres.
"; else $ errors. = 'Voer uw e-mailadres in.
';
Nogmaals, het veld voor de startpagina wordt op dezelfde manier opgeschoond en gevalideerd als eerder in de zelfstudie.
Controleer eerst of het niet leeg is:
if ($ _POST ['homepage']! = "")
Maak het vervolgens schoon en verwijder eventuele illegale tekens:
$ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL)
Bevestig het ten slotte om te controleren of het een echte URL is:
if (! filter_var ($ homepage, FILTER_VALIDATE_URL))
De definitieve code ziet er zo uit:
if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ startpagina is NIET een geldige URL.
"; else $ errors. = 'Voer je startpagina in.
';
Nu we alle velden hebben doorlopen, is het tijd om de fouten te melden of het bericht te verzenden. Begin met aan te nemen dat er geen fouten waren:
if (! $ errors)
Bouw vervolgens het e-mailbericht:
$ mail_to = '[email protected]'; $ subject = 'Nieuwe e-mail van formulierinzending'; $ message = 'Van:'. $ _POST ['naam']. "\ N"; $ message. = 'Email:'. $ _POST ['email']. "\ N"; $ message. = 'Homepage:'. $ _POST ['startpagina']. "\ N"; $ message. = "Bericht: \ n". $ _POST ['bericht']. "\ N \ n";
En als laatste stuur je het bericht:
mail ($ to, $ subject, $ message);
Als er echter fouten zijn opgetreden, meld deze dan en laat de gebruiker het opnieuw proberen:
echo ''. $ fouten. '';
Het voltooide project ziet er als volgt uit:
'; else $ errors. = 'Vul uw naam in.
'; if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email is NIET een geldig e-mailadres.
"; else $ errors. = 'Voer uw e-mailadres in.
'; if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ startpagina is NIET een geldige URL.
"; else $ errors. = 'Voer je startpagina in.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Voer een bericht in om te verzenden.
'; else $ errors. = 'Voer een bericht in om te verzenden.
'; if (! $ errors) $ mail_to = '[email protected]'; $ subject = 'Nieuwe e-mail van formulierinzending'; $ message = 'Van:'. $ _POST ['naam']. "\ N"; $ message. = 'Email:'. $ _POST ['email']. "\ N"; $ message. = 'Homepage:'. $ _POST ['startpagina']. "\ N"; $ message. = "Bericht: \ n". $ _POST ['bericht']. "\ N \ n"; mail ($ to, $ subject, $ message); echo "Bedankt voor uw e-mail!
"; else echo ''. $ fouten. ''; ?>
Ik hoop dat het lezen van deze tutorial je een goede introductie heeft gegeven in de nieuwe filterfuncties van PHP. Er zijn nog veel meer functies en regels die niet werden behandeld, dus als je meer wilt weten, kijk dan in het gedeelte Gegevens filteren in de PHP-handleiding..