PHP if-Abfrage mit "oder" funktioniert nicht wie gewollt

xep22

Banned
Registriert
Apr. 2018
Beiträge
395
Hallo,

ich brauche eine folgende If-Abfrage und habe das hier geschrieben, aber es funktioniert nicht richtig :

PHP:
$screen_name = 'richtigerUser';

$try0 = 'richtigerUser';
$try1 = 'falscherUser';
$try2 = '';

if(!empty($try0) || $try0 != $screen_name)
{
    echo "Falsch";
}else{
    echo "Richtig";
}
exit;


Wenn ich die Abfrage mit $try0 mache, soll "Richtig" kommen, es kommt aber "Falsch".
Wenn ich die Abfrage mit $try1 mache, soll "Falsch" kommen, das kommt auch, also das geht.
Wenn ich die Abfrage mit $try2 mache, soll "Richtig" kommen, es kommt aber "Falsch".

Ich verstehe nicht was falsch ist :/ Kann jemand helfen ?
 
Logisch OR... Prüfung auf nicht leer und oder ungleich $screen_name...

$try0 ist nicht leer, also ist die Prüfung Wahr, also wird "Falsch" ausgegeben.
$try1 ist nicht leer, also ist die Prüfung Wahr, also wird "Falsch" ausgegeben.
$try2 ist nicht gleich $screen_name, also ist die Prüfung Wahr, also wird "Falsch" ausgegeben.
 
  • Gefällt mir
Reaktionen: Timmey92
Du prüfst auf !empty(), also wenn der Wert NICHT leer ist gehst du in den Falsch Fall. Du willst aber das Gegenteil denke ich, also wenn leer, dann Falsch. Versuch mal das Ausrufezeichen zu entfernen.
 
Der erste Zweig, ist der "Wahr" Zweig !empty bedeutet, immer wenn try0 nicht leer ist, landest du im Wahr-Zweig der If Abfrage, die bei dir "falsch" ausgeübt.
 
Aber wie kann ich das umsetzen dass bei $try0 und $try2 "Richtig" kommen würde ?

Ändere ich !empty zu empty kommt ja bei $try0 Richtig, aber bei $try2 immer noch falsch :/
 
Wenn du eine if-Bedingung mit || verknüpfst, ist die Bedingung wahr, wenn min. 1 Ausdruck wahr ist. In dem Fall von !empty($try0) ist es wahr und damit bekommst du dein echo "Falsch".

Anbei ein quickfix:

PHP:
$screen_name = 'richtigerUser';

$try0 = 'richtigerUser';
$try1 = 'falscherUser';
$try2 = '';

if (!empty($try0) && $try0 == $screen_name) {
    echo 'Richtig';
} else {
    echo 'Falsch';
}
exit;
 
  • Gefällt mir
Reaktionen: Matthias2x
Aber auch wenn $try2 leer ist soll es ja Richtig sein :D nur bei $try1 soll Falsch kommen. HIntergrund ist diese Schleife aus einer API:

PHP:
$screen_name = 'richtigerUser';
$i = -1;

do {
    $i++;
    $try = json_decode($user_timeline)[$i]->entities->user_mentions[0]->screen_name;
} while (!empty($try) || $try != $screen_name);

echo $try;

die soll so lange laufen, bis $try entweder leer ist oder $try dem Wert von $screen_name entspricht. mit der Oder Abfrage läuft die Schleife jetzt endlos.
 
Zuletzt bearbeitet:
PHP:
if (empty($wert) xor $wert === $screen_name) {
    true;
} else {
    false;
}
 
Sorry habe ich übersehen :evillol:

Quickfix v2:
PHP:
$screen_name = 'richtigerUser';

$try0 = 'richtigerUser';
$try1 = 'falscherUser';
$try2 = '';

if (empty($try0) || $try0 == $screen_name) {
    echo 'Richtig';
} else {
    echo 'Falsch';
}
exit;

Anmerkung: Das || ist nun gewollt, da wir entweder nen leeres String oder gleich zu testenden String haben wollen.
 
#7 Ist halt genau falsch herum ...

PHP:
do {
...
} while (!empty($try) and $try !== $screen_name);

Solange wie $try nicht leer ist und $try nicht gleich screen_user ist.
Sobald dann eine Bedingung zutrifft (try ist leer oder entspricht screen_user) wird die Schleife beendet.
 
  • Gefällt mir
Reaktionen: xep22
Und jetzt nicht blind das "and" aus #11 auch an anderen Stellen benutzen. Das ist nicht identisch zum "&&" und sollte daher nur genutzt werden, wenn man weiß was man macht.
 
Ich benutze die Logikoperatoren überwiegend mit der niedrigsten Prio. Spart unnötiges Klammern.
Man sollte übrigens immer wissen, was man macht, egal welche Operatorrangfolge man verwendet, kann das immer zu unerwarteten Ergebnissen führen, wenn man nicht weiß, was man da zusammen klöppelt.
 
Zurück
Oben