In PHP Ausdrücke mit logischen Operatoren verknüpfen

In PHP-Programmen müssen häufig mehrere Ausdrücke mit logischen Operatoren verknüpft werden, z.B. wenn bei der if-, else-Abfrage mehrere Bedingungen zutreffen müssen, damit ein bestimmter Programmteil ausgeführt wird. Ein typisches Beispiel hierfür ist ein Online-Test, bei dem die Teilnehmer die Antworten ankreuzen können und das Ergebnis davon abhängt, welche Checkboxen angehakt sind und welche nicht.

Angenommen, in einem Online-Test hat man zu einer Frage zwei vorgegebene Antworten, wobei theoretisch eine oder beide Antworten richtig sein können. Wenn die richtige Lösung darin besteht, dass Antwort 1 angekreuzt sein muss und Antwort 2 nicht, dann muss man für die Auswertung die folgende Aussage im Programm umsetzen.

  • Antwort 1 ist ausgewählt (TRUE)
  • UND
  • Antwort 2 ist nicht ausgewählt (FALSE)
Logische Operatoren in PHP

Für die richtige Lösung müssen in dem Fall beide Bedingungen zutreffen. Damit man diese miteinander verknüpfen kann, würde man einen UND-Operator benötigen, womit ausgedrückt wird, dass Bedingung 1 UND Bedingung 2 erfüllt sein müssen. Würde das zutreffen, würde die Abfrage den Rückgabewert TRUE (1) zurückgeben, ansonsten ein FALSE (0).

Eine Bedingung ohne einen logischen Operator definiert ein logisches JA (Gegenteil von Negation). Daneben gibt es drei weitere Operatoren, die man in PHP verwenden kann. In Verbindung mit der Negation ergeben sich insgesamt acht Möglichkeiten. 

Logische Ausdrücke und die verwendeten Operatoren

Wahrheitstabellen beim logischen JA

Der Rückgabewert kann bei der Verwendung von logischen Operatoren sehr gut durch Wahrheitstabellen verdeutlicht werden. Angenommen, man möchte Abfragen, ob die Variable a den Wert 1 (TRUE) hat. Ist der Wert 0 (FALSE), wäre der Rückgabewert eine 0 (FALSE). Ist der Wert eine 1 (TRUE), dann würde der Rückgabewert eine 1 (TRUE) sein und abhängig davon könnte man einen Programmlauf ausführen lassen.

Man kann natürlich nicht nur abfragen, ob der Wert eine 1 (TRUE) ist. Es wäre z.B. genauso möglich abzufragen, ob der Wert der Variable a eine 0 (FALSE) ist. In dem Fall würde der Rückgabewert in beiden Fällen umgekehrt werden (1 bei 0, 0 bei 1). Es spielt demnach keine Rolle, ob man eine Variable auf 0 oder eine 1 (oder auf einen anderen Wert) abfragt.

Ohne einen logischen Operator würde ein Ausdruck bejaht werden. Man spricht in solchen Fällen von einem logischen JA. Beim logischen JA ist die Besonderheit, dass nicht unbedingt mehrere Ausdrücke verknüpft werden müssen, sodass z.B. nur eine Variable auf einen Wert abgefragt werden kann. Nachfolgend sind zwei Wahrheitstabellen abgebildet. Einmal bei einer Abfrage der Variable a auf 1 und einmal auf eine 0 mit den dazugehörigen Rückgabewerten.

Wahrheitstabellen beim logischen JA

Beispielcode mit logischem JA

Mit dem folgenden Beispielcode wird die Checkbox (a1) eines Formulars ausgewertet. Ist die Checkbox vor dem Abschicken ausgewählt, erscheint am Bildschirm der Text "Checkbox a1 ausgewählt". Falls die Checkbox nicht ausgewählt wurde, erscheint eine Meldung über die Nichtauswahl.

<body>

<!-- HTML-Code für das Formular -->
<form name="formular" method="post" action="">
  <input type="hidden" name="abgeschickt" value="ja">
  <p>Checkbox a1: <input type="checkbox" name="a1"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>

<?php

// Abfrage ob Checkbox a1 ausgewählt wurde
if ($_POST['a1'] == TRUE)
{
  $auswertung = 'Checkbox a1 ausgewählt';
}
else
{
  $auswertung = 'Checkbox a1 nicht ausgewählt';
}

// Ausgabe nach dem Abschicken
if ($_POST['abgeschickt'] == 'ja')
{
  echo $auswertung;
}

?>

</body>

Wahrheitstabellen beim logischen NICHT

Ein Ausdruck kann mit dem Operator ! (Ausrufezeichen, ebenfalls in runden Klammern) negiert werden. In solchen Fällen ist bei einer Abfrage der Rückgabewert eine 1 (TRUE), wenn der Ausdruck nicht zutrifft. Mit den nachfolgenden Wahrheitstabellen wird der Effekt im Gegensatz zum logischen JA deutlich.

Wahrheitstabellen beim logischen NICHT

Beispielcode mit logischem NICHT

Mit dem folgenden Beispielcode wird abgefragt, ob die Checkbox (a1) vor dem Abschicken des Formulars nicht ausgewählt wurde. Falls das zutrifft, wird der folgende Programmteil innerhalb der geschweiften Klammern ausgeführt und in diesem Beispiel würde die Meldung über die Nichtauswahl ausgegeben werden. Falls die Checkbox ausgewählt wurde und somit die Bedingung nicht zutrifft, würde der Programmteil innerhalb der geschweiften Klammern nach else ausgeführt werden.

<body>

<!-- HTML-Code für das Formular -->
<form name="formular" method="post" action="">
  <input type="hidden" name="abgeschickt" value="ja">
  <p>Checkbox a1: <input type="checkbox" name="a1"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>

<?php

// Abfrage ob Checkbox a1 ausgewählt wurde
if (!($_POST['a1'] == TRUE))
{
  $auswertung = 'Checkbox a1 nicht ausgewählt';
}
else
{
  $auswertung = 'Checkbox a1 ausgewählt';
}

// Ausgabe nach dem Abschicken
if ($_POST['abgeschickt'] == 'ja')
{
  echo $auswertung;
}

?>

</body>

Wahrheitstabellen beim logischen UND

Zwei Ausdrücke können mit einem UND-Operator (&& oder AND) miteinander verknüpft werden. In dem Fall müssen beide Bedingungen zutreffen, damit der Rückgabewert eine 1 (TRUE) ist. Das kann man z.B. für einen mit Benutzernamen und Passwort geschützten Bereich verwenden. In dem Fall müssen Benutzername UND Passwort einem bestimmten Wert entsprechen. Nachfolgend sind zwei Wahrheitstabellen abgebildet. Beim ersten Beispiel müssen die Werte der Variablen a und b jeweils eine 1 (TRUE) sein und beim nächsten Beispiel muss der Wert von a eine 1 (TRUE) und der von b eine 0 (FALSE) sein, damit ein bestimmter Programmteil ausgeführt wird.

Wahrheitstabellen beim logischen UND

Beispielcode mit logischem UND

Beim folgenden Beispielcode handelt es sich um eine Frage mit zwei möglichen Antwortmöglichkeiten. In diesem Beispiel muss die Antwort 1 angehakt werden und Antwort 2 nicht, damit das Ergebnis richtig ist. Das Ergebnis wird nach dem Abschicken angezeigt. Als UND-Operator wurde AND verwendet. Man hätte auch ein doppeltes UND-Zeichen && verwenden können.

<body>

<!-- HTML-Code für das Formular -->
<form name="formular" method="post" action="">
  <input type="hidden" name="abgeschickt" value="ja">
  <p>Antwort 1: <input type="checkbox" name="a1"></p>
  <p>Antwort 2: <input type="checkbox" name="a2"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>

<?php

// Abfrage beider Bedingungen und Programmausführung
if ($_POST['a1'] == TRUE AND $_POST['a2'] == FALSE) 
{
  $auswertung = 'Richtige Antwort';
}
else
{
  $auswertung = 'Falsche Antwort';
}

// Ausgabe nach dem Abschicken
if ($_POST['abgeschickt'] == 'ja')
{
  echo $auswertung;
}

?>

<body>

Wahrheitstabellen beim logischen NICHT-UND (NAND)

Mit dem NOT-Operator ! kann eine UND-Verknüpfung negiert werden. In dem Fall spricht man von einer NAND-Verknüpfung (NICHT-UND). Das kann man z.B. nutzen, um nach dem Ausfüllen und Abschicken eines Formulars die Programmausführung nur dann auszuführen, wenn keine zwei widersprechende Werte angegeben wurden. Bei den folgenden Wahrheitstabellen ist im ersten Beispiel der Rückgabewert eine 1 (TRUE), wenn beide Werte der Variablen (a und b) nicht 1 (TRUE) sind. Beim zweiten Beispiel darf die Kombination nicht a ist gleich 1 und b ist gleich 0 sein.

Wahrheitstabellen beim logischen NAND

Beispielcode mit logischem NICHT-UND (NAND)

Beim folgenden Beispielcode sind alle Kombinationen richtig, außer wenn Antwort 1 ausgewählt und Antwort 2 nicht ausgewählt wurde. Nachdem das Formular abgeschickt wurde, wird das Ergebnis am Bildschirm angezeigt.

<body>

<!-- HTML-Code für das Formular -->
<form name="formular" method="post" action="">
  <input type="hidden" name="abgeschickt" value="ja">
  <p>Antwort 1: <input type="checkbox" name="a1"></p>
  <p>Antwort 2: <input type="checkbox" name="a2"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>

<?php

// Abfrage der Negierung zweier Bedingungen und Programmausführung
if (!($_POST['a1'] == TRUE AND $_POST['a2'] == FALSE))
{
  $auswertung = 'Kombination richtig';
}
else
{
  $auswertung = 'Kombination nicht richtig';
}

// Ausgabe nach dem Abschicken
if ($_POST['abgeschickt'] == 'ja')
{
  echo $auswertung;
}

?>

<body>

Wahrheitstabellen beim logischen ODER

Es kommt in PHP-Programmen häufig vor, dass man zwei Ausdrücke mit einem logischen ODER verknüpfen muss. Der Unterschied zur UND-Verknüpfung besteht darin, dass es ausreicht, dass nur ein Ausdruck zutrifft, damit der Rückgabewert eine 1 (TRUE) ist. Es können aber auch beide Ausdrücke zutreffend sein. Bei der UND-Verknüpfung wird dagegen das Zutreffen beider Bedingungen vorausgesetzt. Ein typischer Anwendungsfall ist eine Online-Umfrage, bei der eine bestimmte Frage erscheinen soll, wenn innerhalb einer Gruppe von mehreren Checkboxen eine ausgewählt wurde. Als ODER-Operator kann man OR oder || (zwei Pipes) verwenden. Nachfolgend sind beispielhaft zwei Wahrheitstabellen mit den Rückgabewerten abgebildet.

Wahrheitstabellen beim logischen ODER

Beispielcode mit logischem ODER

Beim folgenden Beispielcode reicht es aus, wenn entweder die Checkbox a1 ausgewählt oder a2 nicht ausgewählt wurde, damit der nachfolgende Programmteil innerhalb der geschweiften Klammern ausgeführt wird. Ist dagegen die Checkbox a1 nicht ausgewählt und a2 ausgewählt, wird der Programmteil nach else ausgeführt, da in dem Fall keine Bedingung zutrifft.

<body>

<!-- HTML-Code für das Formular -->
<form name="formular" method="post" action="">
  <input type="hidden" name="abgeschickt" value="ja">
  <p>Antwort 1: <input type="checkbox" name="a1"></p>
  <p>Antwort 2: <input type="checkbox" name="a2"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>

<?php

// Abfrage zweier Bedingungen und Programmausführung
if ($_POST['a1'] == TRUE OR $_POST['a2'] == FALSE)
{
  $auswertung = 'Mindestens eine Auswahl richtig';
}
else
{
  $auswertung = 'Keine Auswahl richtig';
}

// Ausgabe nach dem Abschicken
if ($_POST['abgeschickt'] == 'ja')
{
  echo $auswertung;
}

?>

<body>

Wahrheitstabellen beim logischen NICHT-ODER (NOR)

Wird eine ODER-Verknüpfung mit dem NICHT-Operator ! negiert, erhält man eine NOR-Verknüpfung (NICHT-ODER). Das kann man z.B. nutzen, um den Programmablauf davon abhängig zu machen, dass gewisse Variablen bestimmte Werte nicht haben. Bei der NOR-Verknüpfung werden tendenziell viele Möglichkeiten ausgeschlossen, da ein einzelner Wert bereits ausreichen kann, um die Kriterien nicht zu erfüllen. Auf den folgenden Wahrheitstabellen wird der Effekt anhand von zwei Beispielen deutlich.

Wahrheitstabelle beim logischen NICHT-ODER

Beispielcode mit logischem NICHT-ODER (NOR)

Beim folgenden Beispielcode muss der Wert der Variable a ungleich 1 (TRUE) und der von b ungleich 0 (FALSE) sein, um alle Kriterien zu erfüllen und den gewünschten Programmablauf durchzuführen. Sobald ein Kriterium nicht erfüllt wird, wird der Programmablauf nach else ausgeführt. Statt dem Operator OR hätte man an dieser Stelle auch || (zwei Pipes) verwenden können.

<body>

<!-- HTML-Code für das Formular -->
<form name="formular" method="post" action="">
  <input type="hidden" name="abgeschickt" value="ja">
  <p>Antwort 1: <input type="checkbox" name="a1"></p>
  <p>Antwort 2: <input type="checkbox" name="a2"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>

<?php

// Abfrage zweier Bedingungen und Programmausführung
if (!($_POST['a1'] == TRUE OR $_POST['a2'] == FALSE))
{
  $auswertung = 'Alle Kriterien erfüllt';
}
else
{
  $auswertung = 'Mindestens 1 Kriterium nicht erfüllt';
}

// Ausgabe nach dem Abschicken
if ($_POST['abgeschickt'] == 'ja')
{
  echo $auswertung;
}

?>

<body>

Wahrheitstabellen beim logischen EXKLUSIV-ODER (XOR)

Die EXKLUSIV-ODER-Verknüpfung ist eine spezielle ODER-Verknüpfung, bei der ein Ausdruck exklusiv zutreffen muss, damit ein bestimmter Programmteil ausgeführt wird. Der Unterschied zur normalen ODER-Verknüpfung wird nachfolgend in der vierten Zeile der Wahrheitstabelle im ersten Beispiel deutlich. Während bei der normalen ODER-Verknüpfung der Rückgabewert eine 1 (TRUE) ist, ist sie bei der XOR-Verknüpfung eine 0 (FALSE), da die Exklusivität nicht gegeben ist.

Wahrheitstabelle beim logischen EXKLUSIV-ODER

Beispielcode beim logischen EXKLUSIV-ODER (XOR)

Beim folgenden Beispiel ist ein Ausdruck dann exklusiv, wenn entweder beide Checkboxen angehakt sind oder beide nicht angehakt sind. Ist dagegen die Checkbox a1 angehakt und a2 nicht, ist die Bedingung nicht gegeben, da in dem Fall beide Ausdrücke zutreffen. Ist die Checkbox a1 nicht angehakt, dafür jedoch a2, trifft keine Bedingung zu.

<body>

<!-- HTML-Code für das Formular -->
<form name="formular" method="post" action="">
  <input type="hidden" name="abgeschickt" value="ja">
  <p>Antwort 1: <input type="checkbox" name="a1"></p>
  <p>Antwort 2: <input type="checkbox" name="a2"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>

<?php

// Abfrage zweier Bedingungen und Programmausführung
if ($_POST['a1'] == TRUE XOR $_POST['a2'] == FALSE)
{
  $auswertung = 'Eine Bedingung exklusiv zutreffend';
}
else
{
  $auswertung = 'Keine Bedingung exklusiv zutreffend';
}

// Ausgabe nach dem Abschicken
if ($_POST['abgeschickt'] == 'ja')
{
  echo $auswertung;
}

?>

<body>

Wahrheitstabellen beim logischen NICHT-EXKLUSIV-ODER (XOR)

Negiert man mit dem NICHT-Operator ! eine XOR-Verknüpfung, so erhält man eine NICHT-EXKLUSIV-ODER-Verknüpfung, die auch XNOR genannt wird. In dem Fall ist die Bedingung dann zutreffend, wenn die Exklusivität nicht gegeben ist. Aus den folgenden Wahrheitstabellen ist ersichtlich, dass die Rückgabewerte gegenteilig zur normalen XOR-Verknüpfung sind.

Wahrheitstabelle beim logischen NICHT-EXKLUSIV-ODER

Beispielcode beim logischen NICHT-EXKLUSIV-ODER (XNOR)

Beim folgenden Beispielcode ist die Nicht-Exklusivität dann gegeben, wenn jeweils eine Checkbox angehakt ist und die andere nicht. In dem Fall würde der nachfolgende Programmteil innerhalb der geschweiften Klammern ausgeführt werden. Sind dagegen beide Checkboxen angehakt oder beide nicht, wäre ein Ausdruck exklusiv zutreffend und da ein solcher Fall in diesem Beispiel negiert wird, würde der Programmteil nach else ausgeführt werden.

<body>

<!-- HTML-Code für das Formular -->
<form name="formular" method="post" action="">
  <input type="hidden" name="abgeschickt" value="ja">
  <p>Antwort 1: <input type="checkbox" name="a1"></p>
  <p>Antwort 2: <input type="checkbox" name="a2"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>

<?php

// Abfrage zweier Bedingungen und Programmausführung
if (!($_POST['a1'] == TRUE XOR $_POST['a2'] == FALSE))
{
  $auswertung = 'Keine Bedingung exklusiv zutreffend';
}
else
{
  $auswertung = 'Eine Bedingung exklusiv zutreffend';
}

// Ausgabe nach dem Abschicken
if ($_POST['abgeschickt'] == 'ja')
{
  echo $auswertung;
}

?>

<body>

Zusammengesetzte Verknüpfungen mit UND, ODER und Exklusiv-ODER

Es kann vorkommen, dass man mehrere Ausdrücke mit verschiedenen logischen Operatoren verknüpft, z.B. mit UND und ODER. In dem Fall ist wichtig zu wissen, welcher Operator Vorrang vor den anderen Operatoren hat, ähnlich wie bei der Punkt-vor-Strichrechnung in der Mathematik. Dabei gilt, dass UND Vorrang vor EXKLUSIV-ODER hat und EXKLUSIV-ODER wiederum Vorrang vor ODER. Falls man eine davon abweichende andere Logik haben möchte, kann man jedoch mit runden Klammern arbeiten. Ein Beispielcode UND und Exklusiv-ODER. Die Logik ist aus dem Auswertungstext zu entnehmen.

<body>

<!-- HTML-Code für das Formular -->
<form name="formular" method="post" action="">
  <input type="hidden" name="abgeschickt" value="ja">
  <p>Antwort 1: <input type="checkbox" name="a1"></p>
  <p>Antwort 2: <input type="checkbox" name="a2"></p>
  <p>Antwort 3: <input type="checkbox" name="a3"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>

<?php

if ($_POST['a1'] == TRUE AND $_POST['a2'] == TRUE XOR $_POST['a3'] == TRUE)
{
  $auswertung = 'Bedingung (a1 UND a2) Exklusiv-ODER (a3) trifft zu';
}
else
{
  $auswertung = 'Bedingung (a1 UND a2) Exklusiv-ODER (a3) trifft nicht zu';
}

// Ausgabe nach dem Abschicken
if ($_POST['abgeschickt'] == 'ja')
{
  echo $auswertung;
}

?>

<body>

Beim folgenden Beispiel werden die Ausdrücke mit XOR und OR verknüpft. Das Ergebnis könnte evtl. überraschend sein. Denn, wenn z.B. alle drei Checkboxen angehakt sind, trifft die Bedingung zu. Man könnte hier annehmen, dass aufgrund der XOR-Verknüpfung (a1 und a1) die Exklusivität nicht gegeben ist und somit die Bedingung nicht zutrifft. Dem ist jedoch nicht so, da die Logik besagt, dass a1 und a2 exklusiv, oder a3 den Wert 1 (TRUE) haben muss, damit die Bedingung gegeben ist.

<body>

<!-- HTML-Code für das Formular -->
<form name="formular" method="post" action="">
  <input type="hidden" name="abgeschickt" value="ja">
  <p>Antwort 1: <input type="checkbox" name="a1"></p>
  <p>Antwort 2: <input type="checkbox" name="a2"></p>
  <p>Antwort 3: <input type="checkbox" name="a3"></p>
  <p><input type="submit" name="submit" value="Senden"></p>
</form>

<?php

if ($_POST['a1'] == TRUE XOR $_POST['a2'] == TRUE OR $_POST['a3'] == TRUE)
{
  $auswertung = 'Bedingung (a1 Exklusiv-ODER a2) ODER (a3) trifft zu';
}
else
{
  $auswertung = 'Bedingung (a1 Exklusiv-ODER a2) ODER (a3) trifft nicht zu';
}

// Ausgabe nach dem Abschicken
if ($_POST['abgeschickt'] == 'ja')
{
  echo $auswertung;
}

?>

<body>

Es ist möglich, weitere Ausdrücke mit logischen Operatoren zu verknüpfen. Um die Logik zu verändern, kann man Ausdrücke in runde Klammern einfügen und es ist auch möglich, die Ausdrücke zu verschachteln. Zu Übungszwecken können die Beispielcodes kopiert, verändert und ergänzt werden, sodass man die Auswirkungen bzw. die Programmlogik ermitteln kann.