Abfragebedingung funktioniert nicht!

preko

Erfahrenes Mitglied
Hi,

ich habe eine verschachtelte if-Abfrage, die mir ein unverständliches und meiner Meinung nach falsches Ergebnis liefert.

Die Variablendaten, die aus einer Datenbankabfrage generiert werden mal zuerst:
PHP:
$microtime = '1199874268';
$row['laufzeit'] = '4';
$row['zeit_1_start'] = '1199779200';
$row['zeit_2_start'] = '1201939200';
$row['zeit_3_start'] = '1204444800';
$row['zeit_4_start'] = '1207123200';

Die if-Schleife(n) sehen aus wie folgt:
PHP:
...
if($row['laufzeit'] == '4') {
   if($row['zeit_2_start'] > $microtime) {
      $aktuell = '1';
   }
   if(($row['zeit_2_start'] <= $microtime) || ($row['zeit_3_start'] > $microtime)) {
      $aktuell = '2';
   }
   if(($row['zeit_3_start'] <= $microtime) || ($row['zeit_4_start'] > $microtime)) {
      $aktuell = '3';
   }
   if($row['zeit_4_start'] <= $microtime) {
      $aktuell = '4';
   }
}
echo "Die Laufzeit ist gerade bei ".$aktuell." von ".$row['laufzeit'];
...

Ausgegeben wird:
Die Laufzeit ist gerade bei 3 von 4.

Irgendwie habe ich anscheinend nun ein Brett vor dem Kopf, da meiner Meinung nach die Ausgabe eigentlich 1 von 4 sein müsste, da $microtime größer ist als 'zeit_1_start' und kleiner als 'zeit_2_start'.

Hat jemand mal die rettende Idee? :confused:


Beste Grüße,
preko
 
Hi,

das liegt daran das jede if-Abfrage nacheinander abgearbeitet wird und nachdem die erste richtig ist, wird sich die nächste trotzdem angeschaut.

In deinem Beispiel wird nach der ersten Bedingung aktuell auf 1 gesetzt.

Zweite if-Abfrage wird übersprungen, da falsch.

Da bei der ditten Abfrage die Bedingung

$row['zeit_4_start'] > $microtime

richtig ist, setzt er aktuell auf 3.

und voila.
 
Hallo Miguel77,

herzlich Dank zunächst einmal für die schnelle Antwort.

Aber ist es nicht so, dass in der Abfragebedingung Nr. 3 übersetzt steht:
PHP:
if(($row['zeit_3_start'] <= $microtime) || ($row['zeit_4_start'] > $microtime)) { 
      $aktuell = '3'; 
   }
Wenn $row['zeit_3_start'] kleiner/gleich $microtime UND $row['zeit_4_start'] größer als $microtime, dann $aktuell = 3?

Grundsätzlich ist der zweite Teil der Abfrage zwar wahr, allerdings nicht der erste Teil, da ja $row['zeit_3_start'] derzeit größer als $microtime ist, insofern dann die komplette Abfrage ja false sein müsste.


Beste Grüße,
preko
 
Hi,

ja, ja, Problem gelöst.

Mann sollte statt "||" auch "&" benutzen, dann klappts auch mit der Formel.
PHP:
... 
if($row['laufzeit'] == '4') { 
   if($row['zeit_2_start'] > $microtime) { 
      $aktuell = '1'; 
   } 
   if(($row['zeit_2_start'] <= $microtime) & ($row['zeit_3_start'] > $microtime)) { 
      $aktuell = '2'; 
   } 
   if(($row['zeit_3_start'] <= $microtime) & ($row['zeit_4_start'] > $microtime)) { 
      $aktuell = '3'; 
   } 
   if($row['zeit_4_start'] <= $microtime) { 
      $aktuell = '4'; 
   } 
} 
echo "Die Laufzeit ist gerade bei ".$aktuell." von ".$row['laufzeit']; 
...


Beste Grüße,
preko
 
Zurück