verinfachte IF-Abfrage
Me
- php
0 Cheatah0 Der Martin0 Stefan
0 Alex
Hi,
man stellt sich vor man möchte 2 Variabeln prüfen, ob deren Inhalt leer ist.
$var1 = trim($_POST['abc']);
$var2 = trim($_POST['def']);
if($var1 == "" or $var2 == "") { ... } else { ... }
ist es möglich das so ähnl. zu vereinfachen:
if(($var1||$var2)=="") { ... } else { ... }
Also. Das das obenstehende erfüllt nicht so ganz seinen Zweck, wie ich es mir vorstelle...Wenn $var1 leer ist aber $var2 nicht[oder umgekehrt] dann führt er den ELSE-Bereich aus.
Werde wohl erstmal ne Funktion dafür schreiben müssen. Hoffe aber trotzdem das es einen einfacheren (Fauleren =) ) Weg gibt.
Hi,
ist es möglich das so ähnl. zu vereinfachen:
if(($var1||$var2)=="") { ... } else { ... }
nein, Operatoren funktionieren in den meisten Programmiersprachen signifikant anders als entsprechende Worte in natürlichen Sprachen. Hier würde zunächst "$var1||$var2" ausgewertet werden (müssen), \*anschließend\* kann das Ergebnis dieser Auswertung mit einem Leerstring verglichen werden.
> Werde wohl erstmal ne Funktion dafür schreiben müssen. Hoffe aber trotzdem das es einen einfacheren (Fauleren =) ) Weg gibt.
Wenn es sich bei den Variablen um etwas Iterierbares handelt, beispielsweise ein Array, gibt es mehrere Arten, damit "faul" umzugehen.
Cheatah
--
X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes
Hallo,
if (($var1||$var2)=="") { ... } else { ... }
Hier würde zunächst "$var1||$var2" ausgewertet werden (müssen), ...
... wobei man beachten muss, dass das Ergebnis dieser Oder-Verknüpfung ein Boolscher Wert ist -nämlich true, sobald einer der beiden Strings zu true ausgewertet werden kann- und der Vergleich mit einem String (auch wenn es ein Leerstring ist) eine weitere Typumwandlung bewirkt. Ich kann im Moment nicht genau sagen, ob in diesem Fall beide Werte in Strings gewandelt wird (die Ausdrücke "true"=="" und "false"="" ergeben beide false) oder direkt in Boolean (dann gäbe es eine Chance, dass der Gesamtausdruck true ergibt).
In beiden Fällen ist das Ergebnis aber sicher nicht das, was der OP erwartet.
So long,
Martin
Hi,
ist es möglich das so ähnl. zu vereinfachen:
nein, Operatoren funktionieren in den meisten Programmiersprachen signifikant anders als entsprechende Worte in natürlichen Sprachen. Hier würde zunächst "$var1||$var2" ausgewertet werden (müssen), *anschließend* kann das Ergebnis dieser Auswertung mit einem Leerstring verglichen werden.
Blödsinn, natürlich geht das:
$a = '';
$b = 'x';
if( ($a && $b) =='') {echo 'JA';} else {echo 'Nein';}
exit;
Stefan
echo $begrüßung;
Blödsinn, natürlich geht das:
Du hast vergessen, deinen Beitrag deutlich als Ironie zu kennzeichnen.
echo "$verabschiedung $name";
Hi,
Du hast vergessen, deinen Beitrag deutlich als Ironie zu kennzeichnen.
???
echo $begrüßung;
Du hast vergessen, deinen Beitrag deutlich als Ironie zu kennzeichnen.
???
Zufälligerweise ergibt das in dem Fall das gewünschte Ergebnis, aber zum einen ist das umständlich gelöst und zum anderen nicht verallgemeinerbar. Du bezogst dich ja mit deiner Antwort auf Cheatahs generalisierte Aussage. Wenn du auf etwas anderes als Leerstring testen willst, kommst du um Einzelvergleiche nicht umhin.
$a = '';
$b = 'x';
if( ($a && $b) =='') {echo 'JA';} else {echo 'Nein';}
PHP macht es Programmierern einfach, indem es automatisch zwischen verschiedenen Typ hin- und herwandelt. Es ist aber Unfug, einen boolsches Ergebnis eines Ausdrucks mit einem feststehenden String zu vergleichen, der für diesen Vergleich erst einmal nach Boolean konvertiert werden muss. Wenn du wissen willst, ob eine Variable leer (im PHP-Sinne) ist, dann nimm empty(). Damit kommt die Intention deutlicher zum Ausdruck.
echo "$verabschiedung $name";
Hi,
Zufälligerweise ergibt das in dem Fall das gewünschte Ergebnis, aber zum einen ist das umständlich gelöst und zum anderen nicht verallgemeinerbar. Du bezogst dich ja mit deiner Antwort auf Cheatahs generalisierte Aussage. Wenn du auf etwas anderes als Leerstring testen willst, kommst du um Einzelvergleiche nicht umhin.
nana, jetzt hast du gemerkt das du falsch lagst und versuchst nun deinen Fehler zu kaschieren, indem du versuchst anderweitig Recht zu bekommen.
Versuche doch ruhig mal was anderes als einen leerstring, dann wirst du Bäcker;-)
*kleine Brötchen back ;-)
Im Übrigen wende ich diese meine Vorgehensweise schon seit etlichen Jahren zufriedenstellend an und hier sind es nur 2 vars, in der Praxis sind es aber oft 6-12. Da ist das die einfachste und kompfortabelste Lösung.
Ach ja, und mal sehen was der OP sagt, ob Ihm das so reicht, denn wer heilt hat recht, ähhm andere Branche;-)
echo $begrüßung;
Zufälligerweise ergibt das in dem Fall das gewünschte Ergebnis, aber zum einen ist das umständlich gelöst und zum anderen nicht verallgemeinerbar. Du bezogst dich ja mit deiner Antwort auf Cheatahs generalisierte Aussage. Wenn du auf etwas anderes als Leerstring testen willst, kommst du um Einzelvergleiche nicht umhin.
nana, jetzt hast du gemerkt das du falsch lagst und versuchst nun deinen Fehler zu kaschieren, indem du versuchst anderweitig Recht zu bekommen.
Nein, du hast Cheatahs allgemeiner Aussage widersprochen und hast das an einem die Aussage nicht komplett widerlegenden Einzelfall belegt. Und der machte das auch noch auch nicht sehr sinnvolle Weise.
Versuche doch ruhig mal was anderes als einen leerstring, dann wirst du Bäcker;-)
Es war dein "Blödsinn", also bist du in derjenige, der sich verteidigen muss.
Im Übrigen wende ich diese meine Vorgehensweise schon seit etlichen Jahren zufriedenstellend an und hier sind es nur 2 vars, in der Praxis sind es aber oft 6-12. Da ist das die einfachste und kompfortabelste Lösung.
Wenn man eine 1 baucht kann man auch $foo = (int)(bool)'Stefan'; notieren. Man bekommt das gewünschte Ergebnis, aber unsinnig ist diese Vorgehensweise trotzdem.
Wenn du auf $_GET/$_POST-Werte testest, ist empty() die einfachste Möglichkeit. Wenn du in deinem if( ($a && $b) =='') statt $a und $b Einträge aus $_GET oder $_POST verwendest, kassierst du bei nicht übergebenen Parametern Notice-Meldungen[1], wenn du darauf zugreifst. Ein empty() beschwert sich hingegen nicht.
[1] das error_reporting auf E_ALL gestellt
echo "$verabschiedung $name";
Hi,
Versuche doch ruhig mal was anderes als einen leerstring, dann wirst du Bäcker;-)
Es war dein "Blödsinn", also bist du in derjenige, der sich verteidigen muss.
»»
liess dir doch nochmal deine Aussage durch, du sagtest es geht nur bei einem Leerstring. Aber klar das du deine eigene Aussage nicht selbst widerlegen möchtest.
Zitieren werde ich deinen Rest jetzt nicht, aber anscheinend hast du hier etwas falsch verstanden. Es geht hier nicht um Leerstrings, es könnte zwar sein, dann kann man mein Beispiel aber natürlich auch mit empty nutzen.
Es geht hier um einen Denk-Fehlers des OP und wenn du mein Beispiel mal genau anschaust, siehst du das es beliebig nutzbar ist. Es geht hier um den Unteraschied wenn man eine OR Abfrage will, und diese in einer Gruppe zusammen fassen möchte(in Klammern), dann wird das zu "&&" anstatt "||".
Jetzt alles verstanden?
echo $begrüßung;
liess dir doch nochmal deine Aussage durch, du sagtest es geht nur bei einem Leerstring. Aber klar das du deine eigene Aussage nicht selbst widerlegen möchtest.
Das Anliegen des OP war, sich Tipparbeit zu sparen, und mehrere Werte effektiv mit einem anderen Wert zu vergleichen. Sein Versuch, das gemäß menschlichem Sprachgebrauch zu notieren, wurde von Cheatah zu Recht einkassiert, was nun von dir als Blödsinn ohne nähere Erklärung abgetan wurde.
Es geht hier nicht um Leerstrings, es könnte zwar sein, dann kann man mein Beispiel aber natürlich auch mit empty nutzen.
Dem OP ging es in dem speziellen Fall um den Vergleich mehrerer Variablen mit einem Leerstring. Nur für den Fall der Leerstrings (oder "0"-Strings) lässt sich das vereinfachen, indem man auf PHPs automatische Typumwandlung setzt, die bei boolschen Operatoren die Werte gemäß den bekannten Regeln nach boolean konvertiert und dann gemäß den logischen Operatoren auswertet. Wenn man auf diese PHP-Verhaltensweise baut, muss man die implizit nach boolean konvertierten String mit and oder && verknüpfen - soweit liegst du richtig - aber das anschließende Vergleichen mit einem Leerstring ist unsinnig. Eine Negation reicht. Es bleibt aber dabei, dass dieses Vorgehen, Strings per Typecast nach Boolean zu testen, nicht intuitiv ist. Es war auch nach meiner Lesart nicht das Anliegen des OP speziell diese Verhaltensweise verwenden zu wollen, sondern einfach nur ein paar »= ""« einzusparen. Deine Kurzantwort suggeriert, dass dies (prinzipiell) möglich sein. Mit anderen String-Werten als Leerstrings geht das nicht.
Es geht hier um einen Denk-Fehlers des OP
Nein, darum geht es mir nicht nur. Es geht auch darum, dass man das nicht _generell_ so zusammenfassen kann, wie sich der OP das vorgestellt hat.
und wenn du mein Beispiel mal genau anschaust, siehst du das es beliebig nutzbar ist.
Eben nicht, sondern nur bei einem Test auf Leerstrings.
echo "$verabschiedung $name";
Blödsinn, natürlich geht das:
$a = '';
$b = 'x';
if( ($a && $b) =='') {echo 'JA';} else {echo 'Nein';}
exit;
Blödsinn, für den Fall $a='0'; $b='0';
gibt deine Lösung 'JA' aus, obwohl beide Strings nicht leer sind. Damit macht deine Lösung etwas anderes als das, was der OP möchte.
$var1 = trim($_POST['abc']);
$var2 = trim($_POST['def']);
if($var1 == "" or $var2 == "") { ... } else { ... }
>
> ist es möglich das so ähnl. zu vereinfachen:
>
> ~~~php
> if(($var1||$var2)=="") { ... } else { ... }
>
Mein erster Gedanke:
if(isset($_POST['abc']) && isset($_POST['def'])) {
tuwas;
} else {
tuwiederwas;
}
Mein erster Gedanke:
ist ein falscher.
if(isset($_POST['abc']) && isset($_POST['def'])) {
funzt nur, wenn die Dinger nicht gesetzt sind, sind sie leer, evtl. hilft empty eher weiter.