Kann isset () nicht für das Ergebnis eines Funktionsaufrufs verwenden (stattdessen können Sie "null! = Func ()" verwenden)

8
%Vor%

Zuvor war mein Code

%Vor%

Und meine IDE hat Do Not Access SuperGlobal $_REQUEST Array Directly gewarnt Also habe ich diesen folgenden Code verwendet:

%Vor%

Hier ist detect.php

%Vor%

Und index.php

%Vor%

Und config.php

%Vor%

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%     
sanoj lawrence 23.01.2016, 08:17
quelle

5 Antworten

3

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, oder NULL , wenn die Variable variable_name nicht festgelegt ist . Wenn das Flag FILTER_NULL_ON_FAILURE verwendet wird, gibt FALSE zurück, wenn die Variable nicht gesetzt ist und NULL , 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 -

%Vor%

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.

    
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ 26.01.2016, 10:33
quelle
2

Entfernen Sie die isset() -Aufrufe in Ihrem zweiten Beispiel, und es sollte funktionieren.

%Vor%

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:

%Vor%

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.

    
Siphon 25.01.2016 21:03
quelle
1

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

zu erfüllen     
Adam 31.01.2016 09:43
quelle
0

Verwenden Sie isset() als:

%Vor%     
Jsparo30 23.01.2016 08:37
quelle
0

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.

Warum ist das in diesem Fall wichtig?

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:

  1. Wie PHP empfiehlt, verwenden Sie stattdessen null !== . Dies ist wahrscheinlich die einfachste Kurzschriftlösung.

Beispiel:

%Vor%

Kann genauso einfach wie

geschrieben werden %Vor%

Erhalten Sie auch Ihre variable Zuweisung.

  1. 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))     ...

  2. 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.

    
smcjones 31.01.2016 17:43
quelle

Tags und Links