Zuvor war mein Code
%Vor% Und meine IDE hat Do Not Access SuperGlobal $_REQUEST Array Directly
gewarnt
Also habe ich diesen folgenden Code verwendet:
Hier ist detect.php
Und index.php
Und config.php
Wenn die Indexdatei geladen ist, sollte sie das Gerät erkennen und es zum richtigen root umleiten, aber in meinem Fall nicht Ich bekomme folgenden Fehler
%Vor% Erstens zeigt NetBeans IDE diese Warnungen an, damit Sie den $_REQUEST
-Werten nicht direkt vertrauen und sie auf irgendeine Weise validieren. Wenn Sie isset($_REQUEST['wap'])
überprüfen, tun Sie bereits einen Teil der Überprüfung, die die IDE vorschlägt. Es kann andere Schritte dieses Prozesses geben, die Sie tun sollten, bevor Sie verwenden , wie in die Datenbank einfügen. Ich ignoriere viele der NetBeans-Warnungen, weil NetBeans nicht weiß, was ich mit meinen Eingaben / Variablen machen werde. Es warnt mich nur vor den besten Praktiken, die für meinen Fall die beste sein können oder nicht. Und Warnungen sollten nur als Vorschläge betrachtet werden, nicht als etwas, das Sie tun müssen .
Zweitens, wenn Sie filter_input () verwenden, müssen Sie isset()
nicht verwenden. zusätzlich. Denn filter_input()
macht das schon für dich. Wie die Dokumentation sagt,
Rückgabewerte : Wert der angeforderten Variablen bei Erfolg,
FALSE
, wenn der Filter fehlschlägt, oderNULL
, wenn die Variable variable_name nicht festgelegt ist . Wenn das FlagFILTER_NULL_ON_FAILURE
verwendet wird, gibtFALSE
zurück, wenn die Variable nicht gesetzt ist undNULL
, wenn der Filter fehlschlägt.
Sie können also isset()
entfernen und Ihr Code sollte sicher funktionieren. Möglicherweise möchten Sie jedoch überprüfen, ob der Wert so festgelegt wurde, dass er die alternativen Werte anwendet. Verwenden Sie in diesem Fall einfach die Funktion empty () , die FALSE
zurückgibt, wenn der Wert von% co_de zurückgegeben wird % ist filter_input()
/ NULL
. Also negiere einfach die Bedingung, um zu deinem Fall zu passen. Wie dieser Weg -
Zweiter Fehler
Hinweis: Undefinierter Index: ALL_HTTP
Ich konnte keine Variable namens FALSE
in der PHP-Dokumentation für $ _SERVER finden . Überprüfen Sie den Link und finden Sie einen, der Ihrem Zweck dienen kann. Ich bin mir nicht sicher, was du damit eigentlich versuchen willst, also kann ich dir nichts vorschlagen.
Dritter Fehler
Warnung: include (web / 404.html): Stream konnte nicht geöffnet werden.
Der Fehler sagt bereits, dass die Datei nicht existiert. Entweder ist die Datei nicht da oder Sie haben den Pfad falsch angegeben. Bitte überprüfen und beheben Sie das.
Entfernen Sie die isset()
-Aufrufe in Ihrem zweiten Beispiel, und es sollte funktionieren.
Dies liegt daran, dass die Funktion filter_input()
einen Wert zurückgibt, der bereits als wahr / falsch ausgewertet wird, so dass Sie auch isset()
nicht benötigen. Sehen Sie sich die Rückgabewerte im PHP-Handbuch für filter_input () für weitere Informationen an.
Sie können auch empty()
und is_null()
auschecken und sehen, wie sie mit isset()
in ihrer Verwendung verglichen werden. Die Funktion empty()
würde in dieser Situation mehr Sinn ergeben.
Für das Problem mit undefiniertem% co_de% sollten Sie dort %_SERVER['ALL_HTTP']
verwenden, um zuerst zu prüfen, ob die Variable existiert. Beispiel:
Der Fehler mit der fehlenden 404-Datei kann ich nicht beheben, ohne zu wissen, wo die Datei gespeichert ist. Das von Ihnen verwendete Include sucht jedoch nach:
isset()
Sie müssen entweder die Datei an diesem Speicherort erstellen / verschieben oder den Include-Pfad so ändern, dass er auf den richtigen Speicherort verweist. Sie können mir den Speicherort der Datei angeben, und ich gebe Ihnen den korrekten Include-Pfad.
Sie sollten einen Lisible-Code verwenden:
Schritt 1: Sie erhalten die Variablen, die Ihren Anforderungen entsprechen, in einem Array
%Vor%Schritt 2: Verwenden Sie die erste erkannte Variable
%Vor% Wie bereits in anderen Antworten erwähnt, müssen Sie filter_input()
functions verwenden, um Ihre IDE-Warnung Do Not Access SuperGlobal $_REQUEST Array Directly
Während der erste Teil Ihre Frage nicht direkt beantwortet, ist dies eine wichtige Anmerkung und wird Ihnen wahrscheinlich viel Kummer in Ihrer Anwendung ersparen. Sie verwenden Konstanten falsch, die Sie wieder beißen können.
Betrachten Sie den folgenden Code:
%Vor% Diese Zeilen sagen "Wenn WAP nicht definiert ist, weisen Sie WAP den Wert" wahr "zu, wenn eine der folgenden Optionen im Bereich" REQUEST
"enthalten ist: wap, wap2, imode, html, Android, iphone oder IEMobile sind NICHT im Anforderungsbereich, weisen Sie WAP
dem Wert false zu.
Ich weiß, das mag sich trivial anfühlen, aber Konstanten sollten unabhängig von jeder anderen Systemrealität den gleichen Wert haben. Für Konstanten sollten Werte leicht zu finden sein. Sehen Sie sich an, wie PHP Konstanten verwendet, um eine Idee zu geben. E_NOTICE
hat immer den gleichen Wert. Daher können Sie die Ganzzahl (8) verwenden, die E_NOTICE
darstellt, oder Sie können E_NOTICE
constant verwenden, um dasselbe genaue Ergebnis zu erhalten.
Wenn andererseits E_NOTICE
gleich 8 ist, es sei denn, Sie haben angegeben, dass Benachrichtigungen einen schwerwiegenden Fehler auslösen sollen. In diesem Fall wäre E_NOTICE
gleich 16 (aka E_CORE_ERROR
) habe ein bisschen Verwirrung in deinen Händen.
Betrachten Sie Ihren Code:
%Vor%Sie machen eine Menge mentaler Gymnastik, um sicherzustellen, dass eine Konstante auf eine bestimmte Sitzung eingestellt ist. Es gibt zwar Möglichkeiten, diesen Code zu bereinigen, um keinen Fehler auszulösen, enthält jedoch immer noch ein Problem, das Sie vielleicht wieder beißen , dh Sie verwenden Konstanten, in denen Sie eine Variable verwenden sollten oder, noch besser, eine Funktion.
Wie das Folgende:
%Vor% Ersetzen Sie nun WAP
durch is_wap()
.
Je nach Ihrer Frage können Sie nicht isset()
für einen direkten Funktionsaufruf verwenden. Sie können eines von drei Dingen tun, um dies zu umgehen:
null !==
. Dies ist wahrscheinlich die einfachste Kurzschriftlösung. Beispiel:
%Vor%Kann genauso einfach wie
geschrieben werden %Vor%Erhalten Sie auch Ihre variable Zuweisung.
Wenn Sie isset()
verwenden möchten, können Sie die Variable vorher zuweisen.
$ imode = filter_input (INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING); if (isset ($ imode)) ...
Sie können function
return-Werte verwenden, um das Ergebnis zu bestimmen. Sie können sogar eine benutzerdefinierte Funktion erstellen, um Ihre Logik für Sie zu verwalten, wenn eine Drittanbieter- oder integrierte Funktion nicht den richtigen Rückgabewert hat.
Wenn Sie beispielsweise sicherstellen möchten, dass ein Wert nicht gleich null ist (und Sie sind damit einverstanden, dass er falsch ist), können Sie Folgendes verwenden:
%Vor%Dann können Sie in Ihrem Code die benutzerdefinierte Funktion verwenden:
%Vor% Beachten Sie, dass filter_input
den Wert false zurückgibt, wenn der Filter fehlschlägt, und null, wenn die Variable nicht existiert. Daher ist es möglicherweise vorteilhafter, isset
ganz wegzulassen, was dazu führt, dass Ihre logische Überprüfung ermittelt, ob eine Variable existiert, ohne dass der Filter möglicherweise fehlschlägt.
Ich sollte beachten, dass die Wahrscheinlichkeit, dass ein Filter in der Produktion versagt, gering ist. Es wird der volle Kreis zu meinem ursprünglichen Punkt verwendet. Einer der Gründe dafür ist, dass die Filter Konstanten sind und IMMER dasselbe darstellen.