if Schleife mit Operatoren && und ||
toson
- php
0 hombre0 Andreas Korthaus0 toson
0 Thomas Grötzner
Hallo,
Das Script git mir schon OK zuzück wenn eine der var´s aus ( 01 ) == JA ist. Alles andere ( 02 );( 03 );( 04 )wir nicht beachtet.
was mach ich falsch?
gruß toson
if(
(
// ( 01 )"EINE" der var´s MUSS == JA sein
$_POST["ka"] == "JA"
|| $_POST["sa"] == "JA"
|| $_POST["sa1"] == "JA"
|| $_POST["ka1"] == "JA"
|| $_POST["sa1a"] == "JA"
|| $_POST["sa2"] == "JA"
// ( 02 )""ALLE" var´s duerfen nicht leer sein ( müßen gesetzt sein )
&& $_POST["tel"] !=""
&& $_POST["telefax"] !=""
&& $_POST["email"] !=""
&&
// "ALLE" var´s aus ( 03 ) ODER ( 04 ) duerfen nicht leer sein ( müßen gesetzt sein )
(
// ( 03 )
(
$_POST["vnname"] !=""
&& $_POST["position"] !=""
&& $_POST["abteilung"] !=""
)
||
// ( 04 )
(
$_POST["vnname1"] !=""
&& $_POST["position1"] !=""
&& $_POST["abteilung1"] !=""
)
)
)
) {
print"OK";
} else {
print"nicht OK";
}
schreibst Du diese Abfrage in eine if-Anweisung ?!
ich habs mir zwar nur kurz angeschaut, aber wenn ja, versuch mal, dass Du diese verschachtelst ...
schreibst Du diese Abfrage in eine if-Anweisung ?!
ich habs mir zwar nur kurz angeschaut, aber wenn ja, versuch mal, dass Du diese verschachtelst ...
hi,
was meinst du mit verschachteln?
Das?
if(){
if(){
if(){
}
}
}
das wäre eine möglichkeit aber das muss auch anders gehen.
in der kürze liegt die würze ;o)
gruß toson
scheinbar benötigst Du aber ein paar Abfragen, und ob Du sie nun so verschachtelst oder in eine Abfrage packst, bleibt sich egal. Performancegewinn erreichst Du dadurch nicht ...
also ich würds einfach mal so probieren, wenns dann nicht geht, mußt Du Deine Abfragen nochmal überdenken...
MfG
Alles klar, hatt sich erledigt klapp auch ohne verschachtelung.
danke für eure mühe.
gruß toson
Hi!
Das Script git mir schon OK zuzück wenn eine der var´s aus ( 01 ) == JA ist. Alles andere ( 02 );( 03 );( 04 )wir nicht beachtet.
So wie das da steht blicke ich da nicht wirklich durch, schreib es doch mal als PHP-Code auf. Beachte die Operator-Rangfolge http://php3.de/manual/de/language.operators.php#language.operators.precedence
In der Reihenfolge werden || und && ausgewertet, wenn Dir das nicht üasst musst Du mit () evt. Ausdrücke zusammenfassen, ich denke daran liegt es irgendwie. Sowas wie a || b || c || d && e && f
weißt Du was damit passiert?
Grüße
Andreas
Hi!
Das Script git mir schon OK zuzück wenn eine der var´s aus ( 01 ) == JA ist. Alles andere ( 02 );( 03 );( 04 )wir nicht beachtet.
So wie das da steht blicke ich da nicht wirklich durch, schreib es doch mal als PHP-Code auf. Beachte die Operator-Rangfolge
Hi,
soll ich das so schreiben?
finde ich nicht unbedingt übersichtlicher.
if( ($_POST["ka"] == "JA" || $_POST["sa"] == "JA" || $_POST["sa1"] == "JA" || $_POST["ka1"] == "JA" || $_POST["sa1a"] == "JA" || $_POST["sa2"] == "JA" && $_POST["tel"] !="" && $_POST["telefax"] !="" && $_POST["email"] !="" && ( ( $_POST["vnname"] !="" && $_POST["position"] !="" && $_POST["abteilung"] !="" ) || ( $_POST["vnname1"] !="" && $_POST["position1"] !="" && $_POST["abteilung1"] !="" ) ) ) ) {
gruß toson
Hi!
soll ich das so schreiben?
_so_ nicht ;-)
finde ich nicht unbedingt übersichtlicher.
ich auch! Wie wärs mit:
if(
(
$_POST["ka"] == "JA"
|| $_POST["sa"] == "JA"
|| $_POST["sa1"] == "JA"
|| $_POST["ka1"] == "JA"
|| $_POST["sa1a"] == "JA"
|| $_POST["sa2"] == "JA"
&& $_POST["tel"] !=""
&& $_POST["telefax"] !=""
&& $_POST["email"] !=""
&& (
(
$_POST["vnname"] !=""
&& $_POST["position"] !=""
&& $_POST["abteilung"] !=""
)
|| (
$_POST["vnname1"] !=""
&& $_POST["position1"] !=""
&& $_POST["abteilung1"] !=""
)
)
)
)
Das was Ir pasiert ist vollkommen logisch, ist das selbe Problem wie bei 2 + 3 * 4, da kommt 14 raus und nichst anderes, war das mit "Punktrechnung geht vor Strichrechnung", udn solche Regeln gibt es auch für || und &&, wie es in dem Link oben beschreiben wird.
Wenn Du was anders erreichen willst brauchst Du klammern, also: (2 + 3) * 4 = 20.
Genau so musst Du das mit && und || regeln. Das was bei obigem Ausdruck rauskommt ist genau das was Du hingeschreiben hast, wenn Du was anders willst musst Du andere Klammern setzen.
Grüße
Andreas
hi,
lol. danke aber ich habs schon:
if(
(
(
$ka == "JA"
|| $sa == "JA"
|| $sa1 == "JA"
|| $ka == "JA"
|| $sa == "JA"
|| $sa1 == "JA"
)
&& (
( $vnname !=""
&& $position !=""
&& $abteilung !=""
)
|| (
$vnname !=""
&& $position !=""
&& $abteilung !=""
)
)
&& $firma !=""
&& $strasse_postfach !=""
&& $tel !=""
&& $plz !=""
&& $telefax !=""
&& $ort !=""
&& $email !=""
)
) {
jeder hatt so seine eigenen Methoden :o)
gruß toson
Hallo toson,
ich kann kein PHP aber ich würde das (egal in welcher Sprache) anders machen (ich hoffe man versteht meinen Pseudo-Code):
//Kommentar
boolean yesSet = $_POST["ka"] == "JA" || $_POST["sa"] == "JA"
|| $_POST["sa1"] == "JA" || $_POST["ka1"] == "JA"
|| $_POST["sa1a"] == "JA" || $_POST["sa2"] == "JA"
//Kommentar
boolean contactSet = ...
//Kommentar
boolean name1OK = ...
//Kommentar
boolean name2OK = ...
//Kommentar
if (yesSet && contactSet && (name1Ok || name2OK))
wahr
else
false
end if
In der Kürze liegt leider meinst auch nur kurze Zeit die Würze! Den Code hier verstehst Du auch noch in einem Jahr. Dein Monster IF vielleicht eher nicht.
Performance-mässig ist mein Code natürlich Deinem unterlegen da der Interpreter bei Dir optimieren wird und die Auswertung des Ifs abbricht sobald es nicht mehr wahr / falsch werden kann (wenn also das Ergebnis feststeht) aber lesbarer ist sicherlich das splitten in mehrere Teilkomponenten.
Ciao
Thomas Grötzner