Datavalidering er en integrert del av arbeidet med skjemaer. Ikke bare kan ugyldige innleverte data føre til sikkerhetsproblemer, men det kan også ødelegge nettsiden din. I dag tar vi en titt på hvordan du fjerner ulovlige tegn og validerer data ved å bruke "filter_var" -funksjonen.
Et eksempel kan ses nedenfor. En bruker har skrevet inn teksten "Jeg har ikke en" som sin hjemmeside. Hvis disse dataene skulle bli innført i en database og senere hentet som en lenke, vil lenken bli brutt.
De fleste har en tendens til å tenke på data validering som en utrolig kjedelig prosess hvor man enten:
Det er åpenbare problemer med ovennevnte:
Heldigvis, begynner med versjon 5.2, har PHP inkludert en flott funksjon som heter filter_var
som fjerner smerten i datavalidering.
filter_var
vil gjøre, begge, sanitize og validere data. Hva er forskjellen mellom de to?
Merk: hvorfor vaske og ikke bare validere? Det er mulig at brukeren ved et uhell skrev inn en feil karakter, eller kanskje det var fra en dårlig kopi og lim inn. Ved å sanitere dataene tar du ansvaret for å jakte på feilen av brukeren.
filter_var
Ved hjelp av filter_var
er utrolig enkelt. Det er bare en PHP-funksjon som tar to deler av data:
For eksempel vil underkoden fjerne alle HTML-koder fra en streng:
$ string = "Hei Verden!
"; $ new_string = filter_var ($ streng, FILTER_SANITIZE_STRING); // $ new_string er nå" Hei, Verden! "
Her er et annet eksempel - denne gangen vanskeligere. Underkoden vil sikre at verdien av variabelen er en gyldig IP-adresse:
$ ip = "127.0.0.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip er TRUE $ ip = "127.0.1.1.1.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip er FALSK
Det er så enkelt det er å bruke filter_var
. For en komplett liste over alle reglene du kan sjekke imot, se slutten av denne opplæringen.
Nedenfor er et raskt eksempel på sanitizing-innspill fra to felt: et e-postfelt og et startfelt. Dette eksemplet fjerner alle tegn som ikke skal forekomme i begge typer data.
"; hvis (isset ($ _ POST ['hjemmeside'])) echo filter_var ($ _ POST ['hjemmeside'], FILTER_SANITIZE_URL); ekko"
";?>
Ved å bruke FILTER_SANITIZE_EMAIL
og FILTER_SANITIZE_URL
konstanter definert av PHP, gjetning arbeidet med å vite hvilke tegn som er ulovlige er borte.
Bare fordi dataene er sanitert, sikrer ikke at det er riktig formatert. I eksemplet nedenfor behøvde ikke dataene å bli sanitert, men det er åpenbart at brukerinngang ikke er en e-post eller en URL.
For å sikre at dataene er riktig formatert, må den bekreftes.
"; else echo" $ email er IKKE en gyldig e-postadresse.
"; hvis (iss_dr en gyldig nettadresse.
"; else echo" $ hjemmeside er IKKE en gyldig nettadresse.
";?>
Nå som dataene har blitt validert, kan du være sikker på at informasjonen som sendes inn, er akkurat det du leter etter.
Nå som data sanitering og validering er dekket, vil vi sette disse ferdighetene til bruk med en rask e-post innsending skjema. Dette vil på ingen måte være av produksjonskvalitet - for eksempel, ingen form skal kreve en hjemmeside - men det vil fungere perfekt for denne opplæringen. Skjemaet tar 4 opplysninger:
Vi vil sanitere og validere mot alle 4 dataene og kun sende epost hvis de er alle gyldige. Hvis noe er ugyldig, eller hvis noen felter er tomme, vil skjemaet bli presentert til brukeren sammen med en liste over elementer som skal repareres. Vi returnerer også de sanitiserte dataene til brukeren dersom de ikke er klar over at enkelte tegn er ulovlige.
For det første trinnet må du bare opprette et skjemaelement med 5 felt: listen ovenfor og en sende-knapp:
Du kan sjekke for å se om et skjema ble sendt ved å se om send-knappen var "satt". Legg følgende kode over skjemaet ditt:
hvis (isset ($ _ POST ['Send']))))
Siden både navn og meldingsfelt blir sanitisert og validert det samme, gjør vi dem sammen. Først må du kontrollere om et felt er tomt ved å gjøre følgende:
hvis ($ _POST ['name'] == "") hvis ($ _POST ['message'] == "")
Neste, sanitize dem med FILTER_SANITIZE_STRING
konstant
$ _POST ['name'] = filter_var ($ _ POST ['navn'], FILTER_SANITIZE_STRING); $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING);
Til slutt må du kontrollere at de to feltene fortsatt ikke er tomme. Dette er for å sikre at etter at du har fjernet alle ulovlige tegn, er du ikke igjen med et tomt felt:
hvis ($ _POST ['name'] == "") hvis ($ _POST ['message'] == "")
Vi vil ikke gjøre noen validering på disse to feltene, bare fordi det ikke er absolutt mulig å validere mot et navn eller en vilkårlig melding.
Den endelige koden ser slik ut:
hvis ($ _POST ['name']! = "") $ _POST ['name'] = filter_var ($ _ POST ['navn'], FILTER_SANITIZE_STRING); hvis ($ _POST ['name'] == "") $ errors. = 'Vennligst skriv inn et gyldig navn.
'; else $ errors. = 'Vennligst skriv inn navnet ditt.
'; hvis ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); hvis ($ _POST ['message'] == "") $ errors. = 'Vennligst skriv inn en melding for å sende.
'; else $ errors. = 'Vennligst skriv inn en melding for å sende.
';
Epostfeltet vil bli sanitisert og validert akkurat som det var tidligere i opplæringen.
Først må du kontrollere at det ikke er tomt:
hvis ($ _POST ['email']! = "")
Neste, sanitize det:
$ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL);
Endelig, valider det som en ekte e-postadresse:
hvis (! filter_var ($ email, FILTER_VALIDATE_EMAIL))
Den endelige koden ser slik ut:
hvis ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); hvis (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email er IKKE en gyldig e-postadresse.
"; else $ errors. = 'Vennligst skriv inn din e-postadresse.
';
Igjen vil hjemmesidenfeltet sanitiseres og valideres på samme måte som tidligere i opplæringen.
Først må du kontrollere at det ikke er tomt:
hvis ($ _POST ['hjemmeside']! = "")
Deretter rengjør det og fjern eventuelle ulovlige tegn:
$ hjemmeside = filter_var ($ _ POST ['hjemmeside'], FILTER_SANITIZE_URL)
Endelig, valider det for å sikre at det er en sann nettadresse:
hvis (! filter_var ($ hjemmeside, FILTER_VALIDATE_URL))
Den endelige koden ser slik ut:
hvis ($ _POST ['hjemmeside']! = "") $ hjemmeside = filter_var ($ _ POST ['hjemmeside'], FILTER_SANITIZE_URL); hvis (! filter_var ($ hjemmeside, FILTER_VALIDATE_URL)) $ errors. = "$ hjemmesiden er IKKE en gyldig nettadresse.
"; ellers $ errors. = 'Vennligst skriv inn startsiden din.
';
Nå som vi har gått gjennom alle felt, er det på tide å enten rapportere feilene eller sende meldingen. Start med å anta at det ikke var noen feil:
hvis (! $ feil)
Bygg deretter e-postmeldingen:
$ mail_to = '[email protected]'; $ subject = 'Ny post fra skjemainnlevering'; $ message = 'From:'. $ _POST ['navn']. "\ N"; $ message. = 'Email:'. $ _POST ['email']. "\ N"; $ message. = 'Hjemmeside:'. $ _POST ['hjemmeside']. "\ N"; $ message. = "Melding: \ n". $ _POST ['melding']. "\ N \ n";
Og til slutt, send meldingen:
post ($ til, $ emne, $ melding);
Men hvis det skulle oppstå feil, rapportere dem og få brukeren til å prøve igjen:
ekko ''. $ feil. '';
Det gjennomførte prosjektet ser slik ut:
'; else $ errors. = 'Vennligst skriv inn navnet ditt.
'; hvis ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); hvis (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email er IKKE en gyldig e-postadresse.
"; else $ errors. = 'Vennligst skriv inn din e-postadresse.
'; hvis ($ _POST ['hjemmeside']! = "") $ hjemmeside = filter_var ($ _ POST ['hjemmeside'], FILTER_SANITIZE_URL); hvis (! filter_var ($ hjemmeside, FILTER_VALIDATE_URL)) $ errors. = "$ hjemmesiden er IKKE en gyldig nettadresse.
"; ellers $ errors. = 'Vennligst skriv inn startsiden din.
'; hvis ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); hvis ($ _POST ['message'] == "") $ errors. = 'Vennligst skriv inn en melding for å sende.
'; else $ errors. = 'Vennligst skriv inn en melding for å sende.
'; hvis (! $ feil) $ mail_to = '[email protected]'; $ subject = 'Ny post fra skjemainnlevering'; $ message = 'From:'. $ _POST ['navn']. "\ N"; $ message. = 'Email:'. $ _POST ['email']. "\ N"; $ message. = 'Hjemmeside:'. $ _POST ['hjemmeside']. "\ N"; $ message. = "Melding: \ n". $ _POST ['melding']. "\ N \ n"; post ($ til, $ emne, $ melding); ekko "Takk for e-posten din!
"; else echo ''. $ feil. ''; ?>
Jeg håper å lese denne opplæringen ga deg en god introduksjon til PHPs nye datafiltreringsfunksjoner. Det er fortsatt mange flere funksjoner og regler som ikke var dekket, så hvis du er interessert i å lære mer, vennligst se delen Data filtrering i PHP manualen.