php wenn nicht Aussagen

9

Dies ist vielleicht die Art, wie mein Server eingerichtet ist, aber ich hämmere meinen Kopf gegen die Wand. Was ich versuche zu tun, ist, dass, wenn $action keinen Wert hat oder einen Wert hat, der nicht "add" oder "delete" ist, als einen Fehler hat, sonst führe das Skript weiter aus. Allerdings bekomme ich einen Fehler, egal was $action ist.

%Vor%

$action wird richtig gesetzt und wenn etwas wie if($action =="add") läuft, funktioniert es. Dies ist auf meinem lokalen Host, könnte also ein Einstellungs-Problem sein.

    
BandonRandon 31.07.2010, 05:29
quelle

7 Antworten

18

Ihre Logik ist etwas aus. Der zweite || sollte && sein:

%Vor%

Sie können sehen, warum Ihre ursprüngliche Zeile fehlschlägt, indem Sie einen Beispielwert ausprobieren. Sagen wir, $action ist "delete" . So verkleinert sich die Bedingung Schritt für Schritt:

%Vor%

Hoppla! Die Bedingung war erfolgreich und druckte "Fehler", aber es sollte fehlschlagen. In der Tat, wenn Sie darüber nachdenken, egal was der Wert von $action ist, wird einer der beiden != -Tests wahr zurückgeben. Wechseln Sie die || zu && und die vorletzte Zeile wird zu if (true && false) , was sich richtig auf if (false) reduziert.

Es gibt eine Möglichkeit, || zu benutzen und die Testarbeit zu erledigen. Sie müssen alles andere negieren, indem Sie das Gesetz von De Morgan verwenden, d. H .:

%Vor%

Sie können das im Englischen als "Wenn Aktion nicht ist (entweder hinzufügen oder entfernen), dann".

    
John Kugelman 31.07.2010, 05:31
quelle
8

Egal was $ Aktion ist, es wird immer entweder nicht "add" oder nicht "delete" sein, weshalb die if Bedingung immer besteht. Was Sie wollen, ist die Verwendung von & amp; & amp; anstelle von ||:

%Vor%     
Jeremy Ruten 31.07.2010 05:31
quelle
2

Du könntest es auch versuchen:

%Vor%     
fastcodejava 31.07.2010 05:59
quelle
1

Sie sagen "wenn es nicht gesetzt ist oder es unterscheidet sich von hinzufügen oder unterscheidet es sich von löschen". Sie erkennen, dass a != x && a != y , mit x != y notwendigerweise false ist, da a nicht gleichzeitig zwei verschiedene Werte sein können.

    
Artefacto 31.07.2010 05:31
quelle
0

für zukünftige Referenz, können Sie schnell eine Wahrheitstabelle erstellen, um zu überprüfen, ob es die Art und Weise bewertet, die Sie wollen ... es ist irgendwie wie Sudoku.

(!isset($action)) && ($action !="add" && $action !="delete"))

Beispiel:

column 1 is issetaction, column 2 and 3 evaluates !="add","delete" respectively

if ($ a = add) T & amp; & amp; (F & amp; & amp; T) = & gt; T & amp; & amp; F = & gt; FALSCH

if ($ a = löschen) T & amp; & amp; (T & amp; & amp; F) = & gt; T & amp; & amp; F = & gt; FALSCH

if ($ a = nichts) T & amp; & amp; (T & amp; & amp; T) = & gt; T & amp; & amp; T = & gt; WAHR

    
ina 31.07.2010 05:39
quelle
0
%Vor%


Ich denke, das ist der beste und einfachste Weg, es zu tun

    
PHP Developer 31.07.2010 05:42
quelle
0

keine Antwort, sondern nur wegen der Formatierung des Codes

%Vor%

note exit; statement nach header (). das ist wichtig. header () beendet die Skriptausführung nicht

    
Your Common Sense 31.07.2010 05:51
quelle