PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : logisches Problem


Sunny
07.07.2003, 10:32:43
Hallöchen,
komme mit einem logischen Problem nicht weiter, in folgendem Code bringt er immer ein "N" aus, auch wenn eine der beiden oder-Bedingungen erfüllt ist....

<?php /*START_BRB_PHP_SIRFIV*/if ($row_grundschule['zeits_id']!="10" || $row_grundschule['id']!="32"){ ?>
<input name="klassenst" type="hidden" id="klassenst" value="N">
<?php } /*END_BRB_PHP_SIRFIV*/?>


Dieses /*START...... schreibt der Dreamweaver rein, um es zu verbergen, wenn die Bedingung erfüllt ist, habe es aber auch schon rausgenommen mit dem selben Ergebnis....

Merkwürdig ist auch, bevor es ein oder war, also mit nur einer Bedingung hat es noch funktioniert. habe es auch schon mit else if probiert - nix....

Vielen Dank für eure Hilfe

Grüße Sunny

Ben20
07.07.2003, 10:43:41
Naja, er macht schon dass was im gesagt wurde, nur wenn das erste gleich 10 und das zweite gleich 32 ist, dann gibt er nix aus! Wenn entweder das eine oder das erfüllt ist, (d.h. das erste ungleich 10 oder das zweite ungleich 32) dann gibt er das Inputfeld aus. Ich weiß ja nicht ganz genau was Du eigentlich bezwecken willst, aber ich vermute mal die Bedingungen sind falsch verknüpft!

Sunny
07.07.2003, 10:49:52
Naja, erreichen möchte ich, dass er nichts ausgibt, wenn der erste Wert 10 ist oder der zweite Wert 32 - dass beide Bedingungen erfüllt sind, kommt gar nicht vor - und wenn eine dieser Bedingungen erfüllt ist, soll nichts ausgegeben werden. (Habe in PHP noch nichts über ein exklusives Oder zumindest als logischen Operator gefunden.....)

Grüße Sunny

Ben20
07.07.2003, 11:00:15
So sollte es gehen:

if (! ($row_grundschule['zeits_id'] == "10" || $row_grundschule['id'] == "32"))


Der logische Operator für exklusives Oder ist wie in andern Sprachen auch XOR (einfach stat || dazwischen hauen!)

Sunny
07.07.2003, 11:05:52
Danke dir!!!

Bei der Logik scheine ich wohl das Klischee für Frauen zu erfüllen ;))

Grüße Sunny

Sunny
08.07.2003, 01:15:07
Muss trotzdem nochmal nachfragen -
was ist der Unterschied zwischen diesen beiden if-Abfragen?

if (var1 !=10 || var 2 !=2) {......}

if (!(var1==10 || var2 ==2)) {.......}

verstehe es überhaupt nicht, warum sich die unterschiedlich verhalten.....

viele Grüße Sunny

c4
08.07.2003, 06:46:52
var1!=10 || var2!=2
--> Wenn Bedingung1 oder Bedingung2 erfüllt ist, dann ist der Ausdruck erfüllt. 'Oder' im mathematischen Sinne, heißt, dass beide Ausdrücke erfüllt sein können, um den Ausdruck zu erfüllen.

!(var1==10 || var2==2)
--> Innerer Ausdruck: Wenn Bedingung1 oder Bedingung2 erfüllt ist, dann ist der Ausdruck erfüllt.
--> !(innerer Ausdruck) das Ergebnis des inneren Ausdruckes wird negiert. Sprich aus wahr wird falsch und umgekehrt.
--> Aus der Sicht der Mathematik musst Du den Verkettungsoperator || gegen && austauschen. Jede Negierung (!) eines Gesamtausdruckes erfordert die Umkehrung dieser Verkettungsoperatoren.

Ein Unterschied der beiden Abfragen ist rein von der natürlichen Logik her nicht vorhanden. Aber Dein Ausdruck ist mathematisch schlicht falsch. Darum:
--> var1!=10 || var2!=2 == !(var1==10 && var2==2)


Aus Faulheit den Apachen zu starten, hab ich es mal kurz mit Javascript gemacht:<html>
<head>
<script type='text/javascript' language='javascript'>
<!--
var var1=10, var2=2;
if (var1!=10 || var2!=2) {
alert('a1');
}
if (!(var1==10 || var2==2)) {
alert('a2');
}
if (!(var1==10 && var2==2)) {
alert('a3');
}

var1=10, var2=5;
if (var1!=10 || var2!=2) {
alert('b1');
}
if (!(var1==10 || var2==2)) {
alert('b2');
}
if (!(var1==10 && var2==2)) {
alert('b3');
}
//-->
</script>
</head>
</html> Er zeigt 2 Meldungen an: b1 und b3.


Naja, hoffe, dass das ein wenig verständlich und vor allem auch, dass es richtig ist.... :)



Edit: ein anderer Versuch, der es vielleicht treffender aber auf alle Fälle kürzer beschreibt.
Du willst den Ausdruck var1!=10 || var2!=2 negieren: !(var1==10 && var2==2) Also wird alles, was Du in einer Klammer zusammenfasst negiert. Aber wirklich ALLES!! Darum wird aus != ein == und aus dem || (oder) ein && (und)
So kurz könnte man es auch erklären. :)