wenn die Anweisung wahr zurückgibt

7

Kann mir jemand sagen, warum bei der Auswahl einer PSD-Datei die if-Anweisung im PHP-Code als wahr und echos "image / vnd.adobe.photoshop" durchgeht?

%Vor%     
davelowe85 02.08.2013, 14:48
quelle

6 Antworten

9

Weil das falsch ist

%Vor%

Sollte

sein %Vor%

Oder sogar

%Vor%

Das heißt, weil eine nicht leere Zeichenfolge als wahr betrachtet wird, wurde die IF-Bedingung erfüllt.

    
MightyPork 02.08.2013, 14:49
quelle
4

Dies liegt daran, dass der bitweise Operator eine niedrigere Priorität als die Gleichheitsprüfung hat. Es geht so:

  1. Sie haben

    %Vor%
  2. Gleichheit wird zuerst in den booleschen Wert aufgelöst, und Ihr Ausdruck wird zu

    %Vor%
  3. Nicht leere Strings werden wie true behandelt, wenn sie in Ausdruck verwendet werden. Das heißt, wir haben

    %Vor%
  4. Und das Ergebnis davon ist natürlich true , also wird der if-Block ausgeführt.

klkvsk 02.08.2013 14:53
quelle
2

Ihre || Aussage ist falsch

%Vor%

Was passiert, ist, dass "image / gif" wahr und wahr mit der falschen zurückgegeben wird $ imagetype == "Bild / JPEG". falsch || Wahr == Wahr

    
dseibert 02.08.2013 14:49
quelle
2

Sie können auch folgende Bedingung haben:

%Vor%

Die anderen Antworten sind gut, das ist nur eine andere Möglichkeit, es zu lösen:)

    
Mohamed Amine 02.08.2013 14:53
quelle
1

Die if-Anweisung, wie Sie sie geschrieben haben, würde als TRUE erwartet.

Dies liegt daran, dass Sie "image / gif" nicht mit irgendetwas vergleichen, sondern lediglich als booleschen Wert. PHP konvertiert Zeichenfolgenwerte (die nicht "0" oder leer sind ( "" )) auf TRUE, wenn sie als Boolean ausgewertet werden. Im Wesentlichen sagt Ihre IF-Anweisung also: "Wenn $imagetype gleich "image/jpeg" OR "image/gif" ist TRUE ist, dann tu das Zeug.

Ihre if-Bedingung wird immer bestehen, weil "image / gif" IMMER als wahr gewertet wird, also ist es egal, welcher $imagetype s-Wert tatsächlich ist.

    
Jim Rubenstein 02.08.2013 14:54
quelle
1
%Vor%

ist äquivalent zu:

%Vor%

was in diesem Fall als

ausgewertet wird %Vor%

was zu true zählt, unabhängig vom Wert von $condition1

weil if(false || true) true

zurückgibt

Ein anderer Punkt: Ich schlage vor, anstelle von == den Operator === zu verwenden. Der endgültige Code sollte also lauten:

%Vor%     
skafandri 02.08.2013 14:52
quelle

Tags und Links