dedlfix: Sortierung

Beitrag lesen

echo $begrüßung;

  • die Variable $orderby muß mit einem Wert gefüllt werden, bevor das SELECT-Statement zusammengebaut wird; der if-Teil gehört also vor das SELECT.

Soweit richtig. PHP hat jedoch die Angewohnheit, Parameter von GET und POST-Anfragen selbständig als Variablen anzulegen, wenn register_globals eingeschaltet ist. Dies war lange Zeit Standard und ist auch heute noch bei manchen Providern so eingestellt, damit auch alte Scripte noch funktionieren, die sich auf dieses Feature verlassen. Generell ist register_globals aber als kritisch zu betrachten, weil damit von außerhalb unkontrolliert und unbeabsichtigt Variablen im Script angelegt werden können. Vergisst man dann auch noch seine eigenen Variablen vor der ersten Verwendung mit einem definierten Wert zu initialisieren, kann es zu einem unerwarteten Scriptablauf kommen, wenn jemand einen Parameter übergibt, der einem vorhandenen Variablennamen entspricht.

Moderne Scripte greifen auf auf die GET- und POST-Werte über $_GET und $_POST zu, damit sie unabhängig von register_globals funktionieren. Sicherheitsbewusste Programmierer achten auch noch darauf, dass ihre Variablen in jedem Fall einen definierten Wert erhalten, da man nicht unbedingt wissen kann, welche Einstellung register_globals auf dem Zielrechner hat. Abschalten kann man es innerhalb des Scripts nicht mehr, da register_globals bereits vor dem Scriptstart seine Aufgabe erledigt.

  • im SELECT-Statement ist die Variable einfach nur als Textstring enthalten, der Wert wird so jedoch nicht ausgegeben. Der Textstring müßte m.E. eher so aussehen: "... ORDER BY ends " . $orderby (der "." müßte lt. Tutorialseiten das Verknüpfungszeichen für PHP sein, wie gesagt, mit der PHP-Syntax kenne ich mich nicht so aus. In javascript wäre es "... ORDER BY ends " + $orderby , in vbscript "... ORDER BY ends " & $orderby )

Hier triffst du auf einen Unterschied PHPs zu anderen Programmiersprachen. Strings können in einfachen Anführungszeichen ' oder in doppelten " notiert werden. Notiert man sie in doppelten Anführungszeichen werden Variablennamen beim Parsen erkannt und durch deren Inhalt ersetzt.

Natürlich muss dann auch ein Inhalt vorhanden sein. Greift man lesend auf eine nicht initialisierte bzw. nicht vorhandene Variable zu, gibt PHP eine Notice-Meldung aus, die im Normalfall jedoch unterdrückt wird. Um diese wichtigen Hinweismeldungen dennoch zu bekommen, empfiehlt es sich beim Entwickeln das error_reporting auf E_ALL zu stellen. Auch Tippfehler bei den Variablennamen kassen sich so leichter finden.

echo "$verabschiedung $name";