IF - Anweisung mit and und or

Hallo zusmmen,

bräuchte mal kurz einen Denkanstoß.

Ich möchte in einer IF-Anweisung 2 And Bedingungen über or mit 2 weiteren And Bedingungen verknüpfen.

Wie schreibe ich das in PHP ? muß ich da nur die ersten zwei And in Klammern setzen und dann die anderen wieder in Klammern und dann um die ganze If Anweisung wieder eine Klammer ?

Mein Problem wird also wahrscheinlich nur die Klammersetzung sein.

Also Beispiel:

if ((Bedingung 1 and Bedingung 2 =true) or (Bedingung 3 and Bedienung 4 = true))
{
mache irgendwas
}
else
{
mache was anderes
}

Ich hoffe ihr könnt nachvollziehen was ich meine.

Wenn ich das ganze in zwei einzelne Anweisungen schreibe,
dann gibt mir die erste Anweisung z.B. ein false und die zweite ein true
was dazu führt das in der ersten Anweisung der Ausgang abgeschaltet wird und in der zweiten Anweisung sofort
wieder an. Oder umgekehrt.

Der Ausgang soll aber anbleiben bis beide Bedingungen false sind.
und eingeschaltet werden sobald eine der Bedingungen True ist.

Vielen Dank im Voraus für Denkanstöße

Udo Bohrer

Das hat doch nix mit IPS zu tun. Dafür gibt es tolle Hilfe im Netz.

So beispielweise:


<?
if($username == "HansWurst" and $passwort == "PHP")
{
  echo "Zugriff erlaubt!";
}

if($username == "HansFleisch" and $passwort == "PHP")
{
  echo "Zugriff erlaubt!";
}
?>


Oder so?


<?
if($username == "HansWurst" and $passwort == "PHP" or $username == "HansFleisch" and $passwort == "PHP")
{
  echo "Zugriff erlaubt!";
}
?> 

http://www.peterkropff.de/site/php/normal.htm

Hallo zusammen,

ich brauche die Anweisung in einem IPS-Script
deshalb habe ich hier gepostet.

Ich hatte schon ein paar Sachen ausprobiert, aber nie kam das raus was ich wollte.

@boui versteht IPS auch die ELSEIF Anweisung ? War auch mein Gedanke, aber in der Doku zu IPS gabs nichts dazu.

@wupperi Dein Beispiel funktioniert wenn ich kein else brauche. Sonst schalte ich mit der ersten Anweisung
meinen Ausgang ein, und mit der zweiten Anweisung gleich wieder aus.

@Kronus

vielen Dank für das Beispiel

Ist das ganze Geheimnis das AND vor OR geht ? ähnlich wie Punktrechnung vor Strichrechnung ?
Dann sollte das genau so sein wie ich es brauche

Gruß Udo

Das ist PHP Standard, deshalb steht zu PHP nichts in der IPS Doku. Und PHP Standard versteht IPS, aber das kannst du doch in wenigen Sekunden testen ;).

Mit „OR“ leitest du neue eine Bedingung ein in der dann auch wieder mit „AND“ verkettet werden kann.

Schau mal den Link an. Der ist ganz verständlich.

Wie die anderen schon sagten, ist das Standard.

Keine Angst. Jeder fing mal so an. :wink:
Die genannten Seiten sind wirklich super zum Nachschaun und Lernen.
Ich selbst bin auch nicht in der PHP-Welt groß geworden und muss da öfter mal reinschauen, wenn es um Problemlösungen geht.

Und wie gesagt. Einfach mal im Skript testen, ob die Sache funktioniert. So macht das wohl jeder.
Bau Dir zum Testen ggf. einfach ein paar zusätzliche echo-Befehle rein, um Dir auch Zwischenergebnisse anzeigen zu lassen.
Dann passt das schon.

Hallo zusammen,

nochmal besten Dank für die Antworten.

Die Links sind doch sehr hilfreich für PHP Anfänger wie mich.

Ich habe auch gestern vor lauter Wald die Bäume nicht mehr gesehen.
Nachdem ich die Anweisung gefühlte 30 mal geändert hatte und immer wieder
endweder Fehlermeldungen kamen oder nicht das passierte was ich wollte
habe ich dann irgendwann aufgegeben.

Hinzu kommt, das ich auf den neuen Rechner für mein Testsystem warte.
der alte hat sich leider verabschiedet. So habe ich das gestern in meinem
Echtsystem getestet und musste halt auch noch drauf achten das ich nicht
meine Steuerung zerschieße.

PHP ist halt von der Struktur her doch etwas anders wie Simens S5 mit der ich
vor 20 Jahren gearbeitet habe.

In dem Beispiel aus dem Link sind allerdings die AND Bedingungen in Klammern gesetzt
und das ganze komplett wieder in Klammern. So wie ich es in meinem Beispiel hatte.

Aber vielleicht habe ich da irgendwo noch eine Klammer von den Variablen falsch gehabt.
Wie gesagt nach 30 Versuchen war die Luft raus.

Gruß Udo

Hallo Udo,

nu gib mal nicht so schnell auf…

Dein Beispiel aus Post #1

if ((Bedingung 1 and Bedingung 2 =true) or (Bedingung 3 and Bedienung 4 = true))
{
mache irgendwas
}
else
{
mache was anderes
}

würde ich so schreiben (nicht getestet)

if (((Bedingung 1 == true) and (Bedingung 2 == true)) or ((Bedingung 3 == true) and (Bedienung 4 == true)))
 {
 mache irgendwas
 }
 else
 {
 mache was anderes
 }

php-Experten kennen sicherlich eine bessere Schreibweise, aber so ist es für einen Anfänger wie mich übersichtlicher.

Gruß, Peter

Da AND vor OR geht (wie Punkt vor Strich) kannst Du die Klammern auch ganz weg lassen!

Also (( x AND y) or (a AND b)) ist das gleiche wie (x AND y OR a AND b)

Anders wäre es wenn Du (x AND (y OR a) AND b) haben willst, dann müssen Klammern gesetzt werden.

Aber es schadet auch nicht der besseren Übersichtlichkeit die Klammern zu setzen, mache ich auch oft :slight_smile:

Acht auf jeden Fall auf das doppelte Gleichheitszeichen! Ansonsten ist es eine Zuweisung (mit der du sicherlich nicht rechnest)

In einigen Beispielen oben ist es nicht korrekt.

Viele Grüße

Burkhard

Auch wenn and vor or geht (wusste ich tatsächlich bisher nicht), würde ich es mit Zusatz Klammer machen (allein der Übersichtlichkeit halber). Um auf das Beispiel zurückzukommen:

 <?
if(($username == "HansWurst" and $passwort == "PHP") or ($username == "HansFleisch" and $passwort == "PHP"))
{
  echo "Zugriff erlaubt!";
} else {
  echo "Zugriff nicht erlaubt!";
}
?> 

Und das ist doch genau so wie du selbst schon geschrieben hast. Wenn’s dann nicht klappt, kannst fast nur noch das schon erwähnte = statt == sein, oder du brauchst vielleicht doch eine andere Logik als du denkst, das wiederum können wir aber ohne den Hintergrund was Du machen willst nicht beurteilen :slight_smile:

Gruß,
Jan

P.s.: „== true“ kann man weglassen :slight_smile:

… siehe Post #5:rolleyes:

Geschmackssache. Bei Array befüllen okay. Bei If’s find ich das in einer Zeile übersichtlicher (solange wie man nicht scrollen muss :slight_smile: )

Jan

Ich wollte damit einfach nur ausdrücken das es für PHP durchaus gängige Formatierungsgrundsätze gibt, deshalb der Link.:wink: