Tom: Behandlung von Formularwerten

Beitrag lesen

Hello,

gibt es eine bestimmte System, wie man mit POST- und GET-Variablen umgeht, je nachdem, was man damit vorhat?

Es gibt Daten.
Diese können in verschiedenen Umgebungen dargestellt, gespeichert und über verschiedene Medien transportiert werden. Beim Transport der Daten vom Browser zum Server spricht man von Parametern des Requests. Was der Server daraus macht, ist ihm überlassen.

Wenn die Werte im Script ankommen, sind es in aller Regel wieder Variablen, denn man hat einen Namen für sie und man kann sie mit Hilfe dieses Namens _ändern_

[Cheatah wollte uns das neulich noch plausibel zu Ende erklären, aber er wird vermutlich mit Schopenhauer noch nicht fertig sein *g*]

Die Daten in den Variablen sollten möglichst in einem neutralen Format, dem "Rohformat" vorliegen. Dieses wird nur bestimmt vom Datentyp und seiner Handhabung auf dem entsprechenden System. Dieses Rohformat sollte für alle anderen Zwecke als Grundlage dienen.

1)  Man kann damit arbeiten (z.B. rechnen)

2)  Man kann es speichern
3)  Man kann es transportieren
4)  Man kann es darstellen

Allerdings müssen die Daten für die Punkte 2-4 immer erst für die vorgesehene Operation vorbereitet werden.

Zur Ausgabe im HTML-Kontext (Browser) müssen sie z.B. mit htmlspecialchars() behandelt werden.
Weitere Behandlungsmethoden sind optional.
Sollen sie aber z.B. in einen Link eingebaut werden, müssen sie zusätzlich mit urlencode() vorbehandelt werden, damit dieser dann "transportbereit" zur Verfügung steht.

Bevor man Daten in eine Datenbank schreibt, muss man überlegen, ob dies über eine Textschnittstelle geschieht (hier werden Befehle und Parameter gemischt übergeben) oder über einen Blockpuffer. Im ersten Fall müssen die Daten "escaped" werden. Man muss alle Zeichen, die für die Textschnittstelle steuernde Wirkung hätten, in den Datenwerten maskieren, also besonders kennzeichnen. Dies übernimmt bei PHP-MySQL z.B. die Funktion mysql_real_escape_string().

Um dieses Escapen ordnungsgemäß durchführen zu können, müssen die Daten aber im Rohformat vorliegen und keinesfalls in einem bereits vorbehandelten. Damit dies bei PHP als Middleware auch funktioniert, muss man sicher sein, dass PHP die Daten an der INPUT-Schnittstelle nicht schon selber vorbehandelt hat. Dies geschieht z.B durch seine Funktionalität der Magic Quotes. Hier wird meistens bereits ein "Escaping" vorgenommen, dass aber nicht zum DBMS MySQL passt. Daher muss man dieses PHP-eigene Escapöing erst wieder rückgängig machen mit stripslashes() http://de3.php.net/manual/en/function.stripslashes.php oder man muss das Feature magic_quotes_gpc ausschalten http://de3.php.net/manual/en/function.get-magic-quotes-gpc.php, http://de3.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc

Wenn man nun z.B. die Rohdaten in einem CSV-File speichern will, muss man sie ebenfalls erst vorbereiten. Denn in den Daten dürche sich keine Trennzeichen und keine Satzendezeichen befinden. Nun könnte man glauben, dass man die einfach entfernt, aber das würde die Daten verändern und vielelicht dadurch unbrauchbar machen. Also "verpackt" man solche Daten in sogenannte "Einschlusszeihen" = Begrenzerzeichen. Das einzige verbleibende Problem ist dann noch das Einschlusszeichen selber. Um dieses wieder unschädlich zu machen, wird es in einem Datenwert einfach verdoppelt. Die Lesefunktion weiß, dass sie ein doppeltes Einschlusszeichen _ohne_ dazwischenstehndes Trennzeichen als Datenwert und nicht als Steuerzeichen werten muss und kann so die Daten VERLUSTFREI wieder ins Rohformat zurücktransformieren.

Mehr Regeln fallen mir eigentlich nicht ein.

Alle anderen Bemühungen sind überflüssig.
(Hoffentlich habe ich jetzt nicht doch 'was wichtiges vergessen?)

Liebe Grüße

Tom vom Berg

--
Nur selber lernen macht schlau