Wie "richtig" $ _GET-Variablen in PHP behandeln?

7

Derzeit habe ich den folgenden Code:

%Vor%

Aber ich denke, es ist zu "komplex" mit if-Anweisungen in if-Anweisungen usw. ...

Würdest du anders damit umgehen? Wie würdest du es einfacher machen?

[EDIT] Akzeptierte Antwort:

Nun, ich habe ein paar kleine Details und neue PHP-Funktionen gelernt, die mir nicht bekannt waren. Ich glaube nicht, dass es genau eine richtige Möglichkeit gibt, das zu tun, was ich gefragt habe. Ich habe eindeutig einige PHP-Funktionen falsch verwendet und ich werde das beheben.

Es scheint mir, dass Eingaben wie diese mit PHP-Filterfunktionen validiert / bereinigt werden sollten, und deshalb markiere ich Arkhs Antwort als akzeptiert.

Allerdings werde ich für ein bestimmtes Universitätsprojekt (dessen PHP-Code völlig irrelevant ist) eine Mischung aus seiner Antwort mit der Hilfsfunktionsidee verwenden. Aber für ein anderes Projekt verwende ich eine Mischung aus seiner Antwort mit der Klassenidee von Ignacio , weil sie besser und besser organisiert aussieht.

    
Ricardo Amaral 08.12.2010, 14:40
quelle

10 Antworten

11

Ich würde filter_input mit dem Filter FILTER_SANITIZE_NUMBER_FLOAT für Mitte verwenden. So ähnlich:

%Vor%     
Arkh 08.12.2010, 14:52
quelle
5

Ich würde eine Funktion schreiben, die den Namen des Indexes annimmt und entweder den Wert innerhalb von $_GET zurückgibt oder eine Ausnahme auslöst.

Das oder kapseln Sie es in einer Klasse ähnlich der folgenden:

%Vor%     
Ignacio Vazquez-Abrams 08.12.2010 14:43
quelle
4
  1. empty überprüft bereits, ob eine Variable isset .
  2. ist
  3. is_numeric ist ein bisschen ausführlich, da Sie auch gegen 0 .
  4. suchen
  5. Eine switch-Anweisung eignet sich am besten zum Prüfen von Variablen auf mehrere Zeichenfolgenwerte

Ich würde das tun:

%Vor%

Wenn Sie $_GET['op'] in einer Variablen für später speichern müssen, könnten Sie dies vor dem Schaltblock tun, obwohl ich es nicht tun würde, wenn es nicht benötigt wird.

    
Stephen 08.12.2010 14:48
quelle
3

Ich mag die Idee, eine InputFilter-Klasse zu erstellen, die ArrayAccess implementiert. Dies ist objektorientierter und besser anpassbar, da Sie Methoden nach Belieben zur Anpassung hinzufügen und mit demselben Hauptfilterobjekt arbeiten können.

%Vor%

Was ist auch schön daran ist, dass es wiederverwendbar für $ _POST, etc. Sie müssen nur etwas wie $post = new InputFilter($_POST); tun. Und Sie können es auch für andere Eingabequellen verwenden.

Oder, wenn Sie eine neue Version von PHP haben, könnten Sie filter_input () auch später implementieren, wie von @Arkh vorgeschlagen. IMO, fühlt sich Ihre eigene Klasse viel mehr wiederverwendbar und langlebig.

%Vor%     
snarkback 08.12.2010 15:48
quelle
2

Sie könnten eine Hilfsfunktion erstellen:

%Vor%

Das würde Ihren Code ein wenig sauberer machen, aber Sie selbst Code ist in Ordnung.

    
Tatu Ulmanen 08.12.2010 14:43
quelle
2

Was Sie tun könnten, ist eine Filterfunktion (die bereits in PHP & gt; = 5.2 existiert) zu definieren, die eine Variable basierend auf einem Argument filtern würde, je nachdem, um welchen Typ es sich handelt, ob es eine Zahl, eine Zeichenkette oder mehr ist auf Ihre Anforderungen.

%Vor%

Verwenden Sie dann diese Funktion, um die Werte zu filtern, die Sie mit $ _GET

erhalten %Vor%     
Nigel 08.12.2010 14:50
quelle
0

Ich würde etwas wie das Folgende tun. Mehr oder weniger. Aber Sie können Filter auch für viele dieser Dinge verwenden. Und Sie können auch Warnungen ausschalten und einfach leer () verwenden und sich nicht um Isset im ersten Teil kümmern.

%Vor%     
DampeS8N 08.12.2010 15:03
quelle
0

Es sieht ein bisschen komplex aus. Aber es scheint, dass Sie für eine Menge Randbedingungen testen möchten. Es gibt jedoch Möglichkeiten, den Prozess zu vereinheitlichen. Ich verwende dafür eine Wrapper-Klasse :

%Vor%

Aber man könnte eine benutzerdefinierte Methode definieren, die alle isset und is_numeric oder was auch immer prüft.

    
mario 08.12.2010 15:04
quelle
0

Ich mag diesen folgenden Ansatz für Integer-Variablen:

%Vor%     
Dzmitry Hubin 10.12.2014 11:36
quelle
-1

Es ist nichts falsch daran. Verschachtelte wenn Aussagen absolut in Ordnung sind. Sie könnten jedoch Filter verwenden.

    
rik 08.12.2010 14:44
quelle

Tags und Links