php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
vergleichsoperator ungleich


 
devas
17-01-2009, 19:16 
 
Hi,


ich habe folgendes Problem. Auf meinem System mit PHP 5.2.0 geht diese Zeile

if ( $row['za']>=$_POST['za']&& ($_POST['x2'] != $xs || $_POST['y2'] != $ys) )

Auf einem System mit PHP 5.2.5 geht sie nicht. Der Ungleichopperator != wird ignoriert bzw als gleich gewertet.

Gibt es den Operator != nicht merh in der PHP Version?

Was muß ich ändern damit es geht?

 
PHP-Desaster
17-01-2009, 19:23 
 
Der Ungleichopperator != wird ignoriert bzw als gleich gewertet.Kann ich mir kaum vorstellen. Was steht in den ganzen Variablen und Arrayelementen drin?

 
devas
17-01-2009, 19:27 
 
stehen Ganzzahlen drinnen.

In einem anderen Teil des Skript konnte ich die Abfrage umstellen. Daher bin ich mir sicher das ungleich nicht geht. Ist die PHP Version schadhaft ?

Gibt es noch andere Möglichkeiten auf ungleich zu prüfen?

 
PHP-Desaster
17-01-2009, 19:33 
 
Das hat weder was mit dem Operator, noch mit der PHP-Version zu tun. Du wendest die Operatoren nur falsch an bzw. erwartest ein anderes Ergebnis. Vielleicht sind dir auch die Typumwandlungsregeln von PHP nicht vertraut.

Poste doch mal das Ergebnis von diesem Aufruf:
var_dump( $row['za'], $_POST['za'], $_POST['x2'], $xs, $_POST['y2'], $ys );

 
devas
17-01-2009, 19:39 
 
string(1) "9" string(1) "2" string(1) "2" string(1) "1" string(1) "1" string(1) "1"

 
PHP-Desaster
17-01-2009, 20:12 
 
Ja, dann überleg doch mal, wie PHP das sieht:

if ( "9">="2"&& ("2" != "1" || "1" != "1") )Jetzt alles klar, oder?

 
devas
17-01-2009, 20:32 
 
nicht wirklich, ausser das ich keine Zahlen habe, obwohl ich welche haben wollte.
Selbst das was aus der DB kommt kommt als String und nicht als Integer

Wie änder ich das ganze nun ?

Und warum gehst auf dem einem System und auf dem anderen nicht?


Ich habe jetzt die Variablen mit settype behandelt.

 
Blackgreetz
17-01-2009, 20:41 
 
Was heißt eigentlich "geht nicht" ?

Kommt deine Abfrage am Ende immer true raus (was du nicht haben willst) oder immer false (was du nicht haben willst) ?

mfg

 
Permafr0st
17-01-2009, 20:53 
 
if ( "9">="2"&& ("2" != "1" || "1" != "1") )
.. strings, ok, aber != müsste dennoch korrekt auswerten ob(daß) die Strings verschieden sind!?

 
combie
17-01-2009, 21:02 
 
Natürlich ist es in dem Fall egal ob man != oder !== einsetzt!
Mit != kann man Strings und Integers mischen.

So:
Ich habe noch kein PHP System gesehen bei dem != kaputt ist.
Der Fehler liegt entweder im logischen Verständniss oder in unerwarteten/falschen Daten.

 
PHP-Desaster
17-01-2009, 21:12 
 
Was willst du überhaupt erreichen? Klar sollte ja inzwischen sein, dass der erste Teil der Oder-Verknüpfung zu true evaluiert und der Rumpf des if-Statements ausgeführt wird. Meinst du das mit "geht nicht"? Sonst hast du einfach einen riesen Denkfehler.

 
devas
17-01-2009, 21:17 
 
Auf meinem System liefert das Skript das erwartet Ergebnis. Lade ich es auf ein anderes System liefert es nicht das erwartete Ergebnis. Lediglich die PHP Versionen sind unterschiedlich.

 
combie
17-01-2009, 21:19 
 
Lediglich die PHP Versionen sind unterschiedlich.
!= hat sich von PHP3 bis PHP6 nicht geändert!
Zumindest nicht in Bezug auf Strings und integers.

Der Fehler liegt GANZ sicher woanders.

if ( "9">="2"&& ("2" != "1" || "1" != "1") )
Liefert unter allen PHP Versionen das gleiche Ergebnis.

 
PHP-Desaster
17-01-2009, 21:20 
 
Wie ich schon sagte, du hast da einen Denkfehler. Irgendwo steht in irgendeiner Variablen irgendetwas anderes, wie du denkst. An dem Operator liegt es aber definitiv nicht. Guck dir doch mal die var_dump-Ausgabe analog zu oben auf dem anderen Rechner an. Passen die Werte?


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:34 Uhr.