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
Ich würde filter_input mit dem Filter FILTER_SANITIZE_NUMBER_FLOAT für Mitte verwenden. So ähnlich:
%Vor% 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%empty
überprüft bereits, ob eine Variable isset
. is_numeric
ist ein bisschen ausführlich, da Sie auch gegen 0
. 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.
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%Sie könnten eine Hilfsfunktion erstellen:
%Vor%Das würde Ihren Code ein wenig sauberer machen, aber Sie selbst Code ist in Ordnung.
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%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.
Tags und Links php variables validation get