Mailinglisten-Archive |
Hallo Andy, > hab mal 2 - für die meisten unter euch - vermutlichvermutlich triviale fragen: > > 1) wenn ich eine variable (z.b. <input type=text name=alter> )aus einem > formular via post oder get übergebe, kann ich auf der nächsten seite via > http_post_vars bzw http_get_vars auf die variablen zugreifen. allerdings > funktioniert es dort ja auch, wenn ich direkt auf die variable zugreife > (z.b. echo $alter;) ... was ist dabei er unterschied? ist es "sicherer" den > umweg über http_****_vars zu gehen, oder gibts einen bestimmten grund das > auf die eine oder andere weise zu tun? > > 2) ähnliches gilt ja auch für variablen wie $HTTP_REFERER, > $HTTP_USER_AGENT, .... die kann ich entweder direkt ansprechen (z.b. echo > $HTTP_USER_AGENT;) oder über den gefehl getenv (oder so ähnlich). welche > variante sollte man da wählen... und warum? PHPs Angwohnheit, POST-, GET-, etc Variablen direkt auf gleichnamige globale Variablen zu mappen, ist so eins *der* Features (zusammen mit der Möglichkeit, Code und Layout zu vermischen.. ;), die PHP am Anfang so schön einfach machen, und alles geht so schnell.. und die einem dann irgendwann die Tränen in die Augen treiben, wenn man sich später noch einmal seinen Code anguckt. Meine Empfehlung wäre also , die $HTTP_*_VARS bzw. getenv() zu benutzen. Aus zwei Gründen: Erstens möchtest Du vielleicht eines Tages wissen, was diese Variable da eigentlich macht bzw. wo sie herkommt, und wenn Du die Arrays benutzt, steht es direkt vor Dir (klingt trivial, ist aber tatsächlich manchmal ungemein praktisch), und überhaupt ist es eigentlich guter Stil, möglichst wenig globale Variablen zu haben. Zweitens und wohl entscheidener: Es ist sicherer. Du hast ja sonst gar keinen Überblick, woher die Variable kommt, Du gehst halt davon aus, dass Du es bspw. mit einer POST-Variable zu tun hast, weil Dein Programm normalerweise so funktioniert; unter Umständen hat der Benutzer Deine Seite aber ganz anderes aufgerufen und übergibt Werte, mit denen Du nie gerechnet hättest.. nicht dass man andernfalls den Variablen erheblich grösseres Vertrauen entgegenbringen sollte, aber wenn Du ein Formular auswerten willst und sich der Aufruf nicht mal eben durch eine entsprechende URL mit gefakten Queries simulieren lässt, hast Du vielleicht bei der Gelegenheit schon mal einen Querschläger abgefangen. Nicht umsonst ist dieses Feature (register_globals) bei PHP4 (zumindest in der optimierten Version der php.ini) by default ausgeschaltet. Wenn Du übrigens Deine POST-Variablen dennoch direkt ansprechen möchtest, kannst Du immer noch hingehen und was in der Art while (list($name, $wert)=each($HTTP_POST_VARS)) $name=$wert; sagen, dann hast Du den gleichen Komfort und trotzdem schonmal sichergestellt, dass das, was Du für gepostet hältst, auch tatsächlich gepostet wurde. Viele Grüße, Nicolas Neubauer
php::bar PHP Wiki - Listenarchive