Daten mit PHP-Filtern bereinigen und validieren

Die Datenvalidierung ist ein wesentlicher Bestandteil der Arbeit mit Formularen. Ungültig gesendete Daten können nicht nur zu Sicherheitsproblemen führen, sondern auch Ihre Webseite beschädigen. Heute schauen wir uns an, wie Sie mit der Funktion "filter_var" unzulässige Zeichen entfernen und Daten validieren können.


Ein Beispiel ist unten zu sehen. Ein Benutzer hat den Text "Ich habe keinen" als Startseite angegeben. Wenn diese Daten in eine Datenbank eingegeben und später als Link abgerufen werden, wird der Link abgebrochen.

Die meisten Leute neigen dazu, die Datenvalidierung als einen immens langwierigen Prozess zu betrachten, bei dem entweder:

  • Vergleicht die Daten, die sie validieren möchten, mit jeder möglichen Kombination, die sie sich vorstellen können.
  • Versucht, einen goldenen regulären Ausdruck zu finden, der zu jeder möglichen Kombination passt.
  • Eine Kombination der beiden.

Es gibt offensichtliche Probleme mit den oben aufgeführten:

  • Es ist absolut zeitaufwändig.
  • Es besteht eine sehr hohe Fehlerwahrscheinlichkeit.

Zum Glück hat PHP ab Version 5.2 eine aufgerufene Funktion eingebaut filter_var das entlastet die Datenvalidierung.

filter_var In Aktion

filter_var wird beides machen, Daten desinfizieren und validieren. Was ist der Unterschied zwischen den beiden?

  • Durch die Bereinigung werden illegale Zeichen aus den Daten entfernt.
  • Durch die Überprüfung wird festgestellt, ob die Daten in einwandfreiem Zustand sind.

Hinweis: Warum desinfizieren und nicht einfach validieren? Es ist möglich, dass der Benutzer versehentlich ein falsches Zeichen eingegeben hat oder dass es sich um ein fehlerhaftes Kopieren und Einfügen handelt. Durch die Bereinigung der Daten übernehmen Sie die Verantwortung, den Benutzer nach Fehlern zu suchen.

Wie benutzt man filter_var

Verwenden filter_var ist unglaublich einfach. Es ist einfach eine PHP-Funktion, die zwei Daten benötigt:

  • Die Variable, die Sie überprüfen möchten
  • Die Art der zu verwendenden Prüfung

Mit dem folgenden Code werden beispielsweise alle HTML-Tags aus einer Zeichenfolge entfernt:

$ string = "

Hallo Welt!

"; $ new_string = filter_var ($ string, FILTER_SANITIZE_STRING); // $ new_string ist jetzt" Hallo, Welt! "

Hier ist ein anderes Beispiel - diesmal schwieriger. Der folgende Code stellt sicher, dass der Wert der Variablen eine gültige IP-Adresse ist:

$ ip = "127.0.0.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip ist TRUE $ ip = "127.0.1.1.1.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip ist FALSE

So einfach ist die Verwendung filter_var. Eine vollständige Liste aller Regeln, die Sie überprüfen können, finden Sie am Ende dieses Lernprogramms.

Beispiel für die Desinfektion

Im Folgenden finden Sie ein schnelles Beispiel für die Bereinigung von Eingaben aus zwei Feldern: einem E-Mail-Feld und einem Homepage-Feld. In diesem Beispiel werden alle Zeichen entfernt, die in keinem Datentyp vorkommen dürfen.


"; if (isset ($ _ POST ['homepage'])) echo filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); echo"

";?>
E-Mail-Addresse:


Startseite:


Mit der FILTER_SANITIZE_EMAIL und FILTER_SANITIZE_URL Konstanten, die von PHP definiert werden, ist die Vermutung, dass die Zeichen illegal sind, verschwunden.

Validierungsbeispiel

Nur weil die Daten bereinigt werden, kann nicht sichergestellt werden, dass sie ordnungsgemäß formatiert sind. Im folgenden Beispiel mussten die Daten nicht bereinigt werden, es ist jedoch offensichtlich, dass die Benutzereingabe keine E-Mail oder URL ist.

Um sicherzustellen, dass die Daten ordnungsgemäß formatiert sind, müssen sie validiert werden.


"; else echo" $ email is NICHT eine gültige E-Mail-Adresse.

"; if (isset ($ _ POST ['homepage'])) $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (filter_var ($ homepage, FILTER_VALIDATE_URL)) echo" $ homepage ist eine gültige URL.

"; else echo" $ homepage ist NICHT eine gültige URL.

";?>
E-Mail-Addresse:


Startseite:


Nachdem die Daten überprüft wurden, können Sie sicher sein, dass die übermittelten Informationen genau Ihren Suchkriterien entsprechen.

Alles zusammenstellen: Ein E-Mail-Formular

Nachdem die Datenbereinigung und -validierung nun abgedeckt ist, werden wir diese Fähigkeiten mit einem schnellen E-Mail-Formular verwenden. Dies ist keinesfalls von Produktionsqualität - zum Beispiel sollte kein Formular eine Homepage erfordern -, aber es funktioniert perfekt für dieses Tutorial. Das Formular enthält 4 Informationen:

  • Name
  • E-Mail-Addresse
  • Startseite
  • Botschaft

Wir werden die Daten gegen alle vier Daten desinfizieren und validieren und die E-Mail nur senden, wenn sie alle gültig sind. Wenn etwas ungültig ist oder Felder leer sind, wird dem Benutzer das Formular zusammen mit einer Liste der zu korrigierenden Elemente angezeigt. Wir geben die bereinigten Daten auch an den Benutzer zurück, falls sie nicht wissen, dass bestimmte Zeichen illegal sind.

Schritt 1 - Erstellen des Formulars

Für den ersten Schritt erstellen Sie einfach ein Formularelement mit 5 Feldern: das oben aufgeführte for und ein Submit-Button:

Name:


E-Mail-Addresse:


Startseite:


Botschaft:

Schritt 2 - Stellen Sie fest, ob das Formular übermittelt wurde

Sie können überprüfen, ob ein Formular gesendet wurde, indem Sie prüfen, ob die Schaltfläche "Senden" aktiviert wurde. Platzieren Sie den folgenden Code über Ihrem Formular:

if (isset ($ _ POST ['Submit'])) 

Schritt 3 - Überprüfen des Namens und des Nachrichtenfelds

Da sowohl das Namensfeld als auch das Meldungsfeld auf dieselbe Weise bereinigt und validiert werden, erledigen wir sie gemeinsam. Prüfen Sie zunächst, ob eines der Felder leer ist, indem Sie folgende Schritte ausführen:

if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")

Als nächstes desinfizieren Sie sie mit der FILTER_SANITIZE_STRING Konstante

$ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING);

Stellen Sie abschließend sicher, dass die beiden Felder noch nicht leer sind. Damit wird sichergestellt, dass nach dem Entfernen aller ungültigen Zeichen kein leeres Feld angezeigt wird:

if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")

Wir werden keine Validierung dieser beiden Felder durchführen, nur weil es keine absolute Möglichkeit gibt, einen Namen oder eine beliebige Nachricht zu validieren.

Der endgültige Code sieht folgendermaßen aus:

if ($ _POST ['name']! = "") $ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); if ($ _POST ['name'] == "") $ errors. = 'Bitte geben Sie einen gültigen Namen ein.

'; else $ errors. = 'Bitte geben Sie Ihren Namen ein.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Bitte geben Sie eine zu sendende Nachricht ein.
'; else $ errors. = 'Bitte geben Sie eine zu sendende Nachricht ein.
';

Schritt 4 - Bestätigen Sie das E-Mail-Feld

Das E-Mail-Feld wird wie zuvor im Tutorial sterilisiert und validiert.

Stellen Sie zunächst sicher, dass es nicht leer ist:

if ($ _POST ['email']! = "")

Als nächstes desinfizieren Sie es:

$ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL);

Bestätigen Sie schließlich als echte E-Mail-Adresse:

if (! filter_var ($ email, FILTER_VALIDATE_EMAIL))

Der endgültige Code sieht folgendermaßen aus:

if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email ist NICHT eine gültige E-Mail-Adresse.

"; else $ errors. = 'Bitte geben Sie Ihre E-Mail-Adresse ein.
';

Schritt 5 - Bestätigen Sie das Feld für die Startseite

Das Homepage-Feld wird auf dieselbe Weise wie zuvor im Tutorial desinfiziert und validiert.

Stellen Sie zunächst sicher, dass es nicht leer ist:

if ($ _POST ['homepage']! = "")

Als nächstes bereinigen Sie es und entfernen Sie alle unzulässigen Zeichen:

$ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL)

Bestätigen Sie zum Schluss, um sicherzustellen, dass es sich um eine echte URL handelt:

if (! filter_var ($ homepage, FILTER_VALIDATE_URL))

Der endgültige Code sieht folgendermaßen aus:

if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage ist NICHT eine gültige URL.

"; else $ errors. = 'Bitte geben Sie Ihre Homepage ein.
';

Schritt 6 - Auf Fehler prüfen und Nachricht senden

Nachdem wir alle Felder durchgearbeitet haben, ist es jetzt an der Zeit, die Fehler zu melden oder die Nachricht zu senden. Beginnen Sie mit der Annahme, dass keine Fehler aufgetreten sind:

if (! $ fehler) 

Erstellen Sie dann die E-Mail-Nachricht:

$ mail_to = '[email protected]'; $ subject = 'Neue Mail von der Formularübermittlung'; $ message = 'From:'. $ _POST ['name']. "\ n"; $ message. = 'Email:'. $ _POST ['email']. "\ n"; $ message. = 'Homepage:'. $ _POST ['Homepage']. "\ n"; $ message. = "Nachricht: \ n". $ _POST ["Nachricht"]. "\ n \ n";

Und zum Schluss senden Sie die Nachricht:

mail ($ to, $ subject, $ message);

Wenn jedoch Fehler aufgetreten sind, melden Sie diese und lassen Sie den Benutzer es erneut versuchen:

Echo '
'. $ Fehler. '
';

Das abgeschlossene Projekt sieht folgendermaßen aus:


'; else $ errors. = 'Bitte geben Sie Ihren Namen ein.
'; if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email ist NICHT eine gültige E-Mail-Adresse.

"; else $ errors. = 'Bitte geben Sie Ihre E-Mail-Adresse ein.
'; if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage ist NICHT eine gültige URL.

"; else $ errors. = 'Bitte geben Sie Ihre Homepage ein.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Bitte geben Sie eine zu sendende Nachricht ein.
'; else $ errors. = 'Bitte geben Sie eine zu sendende Nachricht ein.
'; if (! $ errors) $ mail_to = '[email protected]'; $ subject = 'Neue Mail von der Formularübermittlung'; $ message = 'From:'. $ _POST ['name']. "\ n"; $ message. = 'Email:'. $ _POST ['email']. "\ n"; $ message. = 'Homepage:'. $ _POST ['Homepage']. "\ n"; $ message. = "Nachricht: \ n". $ _POST ["Nachricht"]. "\ n \ n"; mail ($ to, $ subject, $ message); echo "Vielen Dank für Ihre E-Mail!

"; else echo '
'. $ Fehler. '
'; ?>
Name:


E-Mail-Addresse:


Startseite:


Botschaft:

Zusammenfassung

Ich hoffe, beim Lesen dieses Tutorials haben Sie eine gute Einführung in die neuen Datenfilterungsfunktionen von PHP erhalten. Es gibt noch viele weitere Funktionen und Regeln, die nicht behandelt wurden. Wenn Sie mehr darüber erfahren möchten, lesen Sie bitte den Abschnitt Datenfilterung im PHP-Handbuch.

  • Abonnieren Sie den NETTUTS-RSS-Feed für mehr tägliche Webentwicklungsberichte und -artikel.