Blog zu den Themen Webentwicklung, technisches Online Marketing und Suchmaschinenoptimierung

Alle GET- oder POST-Variablen mit PHP empfangen und sichern

Im Programmieralltag mit PHP bekommt man es sehr oft mit GET- oder POST-Variablen zu tun. Diese bringen Interaktivität auf die Webseite und ermöglichen dem Benutzer, mit dem Script zu kommunizieren.

Natürlich ist es für PHP-Programmierer deshalb sehr wichtig, gut mit diesen Variablen umgehen zu können. Dazu gehört natürlich ein richtiges Verständnis ihrer Funktionsweise, das Wissen wie man sie absichert, aber natürlich auch die Möglichkeit, sich durch Funktionen das Leben zu erleichtern um dadurch Quellcode zu sparen.

Jeder wird die folgenden Zeichen Quellcode kennen:

Wir empfangen hier fünf POST-Variablen, die z.B. durch ein Formular auf der vorherigen Webseite abgeschickt wurden. Es könnte sich etwa um ein einfaches Bestellformular mit den Feldern Vorname, Nachname, Adresse, Email & Nachricht handeln.

Jede einzelne POST-Variable wird separat empfangen und in einer eigenen Variable des Scripts gespeichert. Dies bietet den Vorteil, dass man die Variable durch bestimmte Funktionen absichern kann. Dabei kann es sich natürlich um Eigenkonstruktionen oder native PHP-Funktionen handeln. Ich meinem Beispiel verwende ich letzteres, nämlich mysql_real_escape_string.

Natürlich funktioniert dieses Methode, verfügt aber – wie so oft – über Optimierungspotential. Wäre es nicht schön, wenn wir das empfangen und sichern der POST- und GET-Variablen automatisieren könnten?

Funktion um Variablen automatisch zu verarbeiten

Herrlich simpel, oder etwa nicht? Wir rufen nur eine einzige Funktion auf, welche uns unsere Variablen absichert, speichert und in einem Array zurückliefert.

Natürlich möchte ich euch die passende vars()-Funktion nicht vorenthalten:

  • Zeile 2: Hier kann man der Funktion übergeben, welche Variablen alle empfangen werden sollen. Entweder GET, POST oder REQUEST. Bei REQUEST werden sowohl POST- als auch GET-Variablen empfangen. Doch Vorsicht, je nach php.ini-Einstellung werden bei der Verwendung von REQUEST auch Cookies übernommen. Möchte man trotzdem alle REQUEST-Variablen empfangen, kann man die Funktion auch bequem per vars() aufrufen.
  • Zeile 4-9: Je nach gewähltem Variablen-Typ werden entweder alle REQUEST-, POST- oder GET-Variablen empfangen und im Array ay gespeichert.
  • Zeile 12-13: Mittels einer foreach()-Schleife durchlaufen wir den gesamten Array und somit alle empfangenen Variablen. Sowohl Key als auch Array-Value werden mit der Funktion sicher() aufgerufen. Weiter unten findet ihr ein Beispiel, wie diese Funktion aussehen könnte.
  • Zeile 15: Der abgesicherte Array mit POST- und/oder GET-Variablen wird zurückgeliefert. Wenn man die Funktion beispielsweise mit $v = vars() aufruft, wird $v zum entsprechenden Array.

PHP-Funktion zur Sicherung von empfangenen Variablen

Zum Abschluss dieses Tipps noch schnell die versprochene Funktion zur Absicherung der Variablen. Natürlich sollte man sich genau überlegen, was man absichern möchte und im Zweifelsfall einzelne Variablen nochmals mit einer weiteren Funktion absichern. Im Endeffekt ist es auch immer von Projekt zu Projekt verschieden – so zumindest bei mir.

Dieser Artikel wurde am 13.01.2011 veröffentlicht

Wer schreibt hier?

Torben Leuschner - Webentwickler

Hi, ich bin Torben und baue leidenschaftlich gerne Webseiten. Also habe ich mein Hobby zum Beruf gemacht und bin seit 2008 als Webentwickler Selbständig tätig. Obwohl ich schwerpunktmäßig für Kunden arbeite habe ich auch sehr viel Freude an der Realisierung eigener Projekte. Daraus resultierend hat sich eine große Affinität zu den Themen Online Marketing und Suchmaschinenoptimierung entwickelt. Gelegentlich schreibe ich auf Twitter, viel aktiver bin ich allerdings auf Facebook. Gerne können wir uns dort vernetzen!

Wie stehst du dazu?

  1. Warum mysql_real_escape_string, wenn es veraltet und nur noch missbilligt ist? Da sollte man PDO, mysqli oder gleich ein OR-Mapper nehmen, bei dem die Werte automatisch escaped werden.

    Auch deine Funktion ist nicht optimal; besser wäre hier die PHP-native Funktion array_map().

  2. Ergänzend sollte man immer noch anmerken, dass natürlich auch die Werte überprüft werden sollten, trotz dessen Sie durch mysql_real_escape_string „gekommen“ sind. Immerhin ist es ganz einfach möglich Formularfelder wie hidden oder select beliebig zu verändern, zum Beispiel mit Firebug. Meist wird per hidden z.B. eine ID übergeben, die kann ich ändern und mir so Zugriff auf andere Daten beschaffen oder bei Select weitere Optionen hinzufügen und übergeben. Oft wird gedacht, mit mysql_real_escape_string ist es getan. Man sollte aber auch am „anderen Ende“ schauen, ob die eingegebenen Daten überhaupt möglich sind oder ob der User da Böses vorhat :-)

  3. Hallo,
    könntest Du mir bitte behilflich aus folgendes sein?
    Ich habe ein index.php in der obengenannte Seite mit iframes. in einem davon ist ein Menü. Ein Menüpunkt (Was suchen Sie?) wird eine andere php-programm aufgerufen, welches die MySQL Datenbank-Tabelle anhand der User-Eingabe durchsucht. Nun meine Frage: wie könnte man die vom Benutzer eingebenen Suchbegriffe in der Title-Tag des index.php (aufrufende Seite) hinein als Webseitetitel (per echo?) bekommen?
    Vielen dank im Voraus

  4. Vielen Dank für die prompte Antwort.

    …das von einer iframe-seite aufgerufenes php programm kann nicht die Variable (das sind 1. Benutzer-Eigabe Suchbegriffs, 2. Auswahl aus einer Select, 3. Suchen durch den Anfangsbuchstaben), die an das php per GET oder POST übertragen ?
    Der Title im index.php muss sobald die gesuchte Datensätze, wieder in einem iframe (main.html) auf dem Bildschirm stehen, erscheine
    Da PHP am Server verarbeitet wird, gäbe es die Möglichkeit per Javascript, evtl. durch automatischen Wiederaufruf (sozusagen Aktualisierung) der index.php. Wenn Ja, die Funktion location.href=index.php muss im Syntax einen Target erhalten.

  5. Hallo,
    mein Name ist André bin zufällig auf Ihre Seite gestossen,
    vllt. können sie bei meinem Problem helfen.

    Ich möchte aus einem Bestellformular was leider nicht editierbar ist die Mailaddy auslesen und an ein eigenes PHP-Formular übergeben.

    Das Feld der Mailaddy konnte ich auslesen:

    script type="text/javascript">
    $inhalt = ('');
    document.write($inhalt);
    $test = $inhalt;

    Was mir einfach nicht gelingen will, die Mailaddy in eine variable zu speichern und dann an das PHP-Formular zu übergeben.

    Wenn Sie noch mehr Informationen benötigen, bitte fragen.
    Besten Dank im voraus.
    Gruss André

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich stimme zu.