Werte an Hand aktueller Zeit anzeigen

Malchor

Erfahrenes Mitglied
Hallo liebe Gemeinde, ich bräuchte da mal eure Hilfe.

Ich möchte gerne Daten ausgeben, die an Hand der aktuellen Zeit mit einem Vorlauf ausgegeben werden. So möchte ich das ich Abflüge angezeigt bekomme die in Kürze stattfinden, dabei möchte ich, dass zwei Stunden vor Abflug ein grünes Lämpchen läuchtet und der Remark Checkin open, 30 min vor Abflug Boarding und eine Minute nach Abflug Closed angezeigt wird.

Leider hängt meine Idde in meiner Umsetzung denn ich bekomme immer alle drei Angaben auasgegeben und auch nicht zur aktuellen Zeit sondern zur frühsten zeit im Flugplan.


PHP:
 <?PHP
include("connect.php");
$timestamp = time();
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
echo $datum;
?>           

<?php 
$abfrage = "SELECT  `Flugplan`.`flughafenid1` , `Flugplan`.`dep_time` , `Flugplan`.`flughafenid2` , `Flugplan`.`flugnummer`,`Flugplan`.`days` FROM Flugplan WHERE `Flugplan`.`flughafenid1`  = 'KATL' ORDER BY  timestamp  ASC  LIMIT 10;";

$ergebnis = mysql_query($abfrage);
	if ($ergebnis)
	
	{
	   print "<table border=\"0\" cel lspacing=\"1\" ".
	   "cellpadding=\"4\" WIDTH=\"42\%\" class=\"tableLine\" bgcolor=\"#7C7C7C\">\n";

	   print "<tr><th>Status</th><th>Flugnummer</th><th>Abflugzeit</th><th>Zielflughafen</th>";
	   print "<th>Remarks</th></tr>\n";
	   
   $colchange = 1;
    while ($dataset = mysql_fetch_array($ergebnis)){ // <--- Klammerfehler, hier gehört die klammer auf

        // modulo ob gerade oder ungerade
        if ($colchange % 2) {
            $color = "#B6B6B6";
        } else {
            $color = "#999";
        }
		
		if ($uhrzeit +"2:0" ){  
print "<tr bgcolor=\"$color\">";
print"<td><img src=\"pictures/status_gruen.gif\" width=\"40\" height=\"20\" /></td><td>".$dataset['flugnummer']."</td><td>".$dataset['dep_time']."</td><td>".$dataset['flughafenid2']."&nbsp;"."</td><td>Check-In open</td>";
print "</tr>\n";
// Letzer ProgaMMIerstandpunkt

    }    
	else{
print "<tr bgcolor=\"$color\">";
print"<td></td><td>".$dataset['flugnummer']."</td><td>".$dataset['dep_time']."</td><td>".$dataset['flughafenid2']."&nbsp;"."</td><td></td>";
print "</tr>\n";
            
        }

		if ($uhrzeit + "0:3" ){  
print "<tr bgcolor=\"$color\">";
print"<td><img src=\"pictures/status_gelb.gif\" width=\"40\" height=\"20\" /></td><td>".$dataset['flugnummer']."</td><td>".$dataset['dep_time']."</td><td>".$dataset['flughafenid2']."&nbsp;"."</td><td>Boarding</td>";
print "</tr>\n";
// Letzer ProgaMMIerstandpunkt

    }    
	else{
print "<tr bgcolor=\"$color\">";
print"<td></td><td>".$dataset['flugnummer']."</td><td>".$dataset['dep_time']."</td><td>".$dataset['flughafenid2']."&nbsp;"."</td><td></td>";
print "</tr>\n";
            
        }
		
		if ($uhrzeit - "0:1" ){  
print "<tr bgcolor=\"$color\">";
print"<td><img src=\"pictures/status_rot.gif\" width=\"40\" height=\"20\" /></td><td>".$dataset['flugnummer']."</td><td>".$dataset['dep_time']."</td><td>".$dataset['flughafenid2']."&nbsp;"."</td><td>Flight closed</td>";
print "</tr>\n";
// Letzer ProgaMMIerstandpunkt

    }    
	else{
print "<tr bgcolor=\"$color\">";
print"<td></td><td>".$dataset['flugnummer']."</td><td>".$dataset['dep_time']."</td><td>".$dataset['flughafenid2']."&nbsp;"."</td><td></td>";
print "</tr>\n";
            
        }    
        #{ // Klammerfehler, diese klammer gehört weg!
        /* du hast den Code an der falschen stelle eingefügt,
           deshalb kam der klammerfheler
         */ 

      // ++ hinter der Variablen bewrikt das immer 1 dazugezählt wird. in einer schleife passiert das bei jedem durchgang.
        $colchange++;
    } // while ende
    
	print "</td></tr>\n";
	print "</table>\n";
      }

   ?>
Beweis.jpg
 
Erstmal würde ich an Deiner Stelle den Code aufräumen. Sorry, aber so macht das Debuggen keinen Spaß.

(A) Du machst in quasi allen if's die gleiche Ausgabe. Speicher die essentiellen Daten aus der DB in Variablen, und gib sie nach den if-Abfragen am Ende in einem echo/print aus.

(B) diese if-Abfragen sind sinnlos. So, wie sie geschrieben sind, werden sie immer true sein und ausgeführt werden. $var+"0:3" wird im Endeffekt immer ein String werden, dass immer mindestens "0:3" zu stehen hat. if($var+"0:3){} wird immer true sein, ergo wird immer ausgeführt, was drin steht.

(C) Den table-Tag gibst Du am besten außerhalb des php-Bereichs aus, und vor Allem nimmst Du alle Stylingsachen raus und packst sie in eine CSS-Anweisung mit id.

mfg chmee
 
Zuletzt bearbeitet:
Du hast in deiner Tabelle die Abflugszeit als timestamp gespeichert, benutzt sie aber nicht. Doch damit lässt sich leichter arbeiten, als mit formatierten Datums- und Zeitangaben.
Außerdem, wie schon von chmee angemarkert, sind deine if-Anweisungen ziemlich sinnfrei, da sie immer true sein werden.
 
@erik ich habe kein Timstamp in der DB nur die Uhrzeit so formatiert

@chmee Aber wie soll ich das umgehen mit der If Abfrage

EDIT:

Also ich habe das mal in eine feste tabelle umgewandelt:
PHP:
 <?php 
 <?php 

$abfrage = "SELECT
                     flughafenid1 , 
                     dep_time ,
                     flugnummer,
					 flughafenid2
                     
            FROM 
                     Flugplan
            WHERE   
                    flughafenid1 = 'KATL'
             ORDER BY 
 dep_time  ASC LIMIT 10;";
$ergebnis = mysql_query($abfrage) or die ("MySQL-Error: " . mysql_error());
$flughafenid1 = $row['flughafenid1']; 
$dep_time = $row['dep_time']; 	
$flugnummer = $row['flugnummer']; 
?>
  <table WIDTH="50%" border="0" "cellpadding="1" cellspacing="1" bgcolor="#666666" class="tableLine" align="center">
    <tr>
      <th>Status</th>
      <th>Flugnummer</th>
      <th>Abflugzeit</th>
      <th>Zielflughafen</th>
      <th>Remarks</th>

      </tr>
    <?php 
 $colchange = 1;
    while ($dataset = mysql_fetch_array($ergebnis)){ // <--- Klammerfehler, hier gehört die klammer auf

        
        // modulo ob gerade oder ungerade
        if ($colchange % 2) {
            $color = "#B6B6B6";
        } else {
            $color = "#999";
        }

        #{ // Klammerfehler, diese klammer gehört weg!
        /* du hast den Code an der falschen stelle eingefügt,
           deshalb kam der klammerfheler
         */ 

    print "    <tr bgcolor=\"$color\" align=\"center\">\n";
    print "        <td></td>\n";
    print "        <td>{$dataset['flugnummer']}</td>\n";
    print "        <td>{$dataset['dep_time']}</td>\n";
    print "        <td>{$dataset['flughafenid2']}&nbsp;</td>\n";
    print "        <td></td>\n";
    print "    </tr>\n";
        
        // ++ hinter der Variablen bewrikt das immer 1 dazugezählt wird. in einer schleife passiert das bei jedem durchgang.
        $colchange++;
    } // while ende
    
?>
  </table>
 
Zuletzt bearbeitet:
Ich sehe da könnte mein erster Fehler liegen, denn es liegt gar keine Formatierung vor
# // Column // Type // Collation // Attributes // Null // Default // Extra
11 // dep_time // time // // // No // // None
 
Dein erster Fehler liegt im Ausdruck in der if-Klammer. Du musst die aus der DB gelesene Zeit mit der aktuellen Zeit + Puffer (2h, 30min, -1min) vergleichen. Bisher steht in deinen Klammer als Ergebnis des jeweiligen Ausdrucks ein String und kein bool'scher Wert.
Was für Werte stehen in der Spalte dep_time (konkrete Werte)? Vom Typ TIME kannst du nichts anderes als eine Zeit erwarten. Da fehlt das Datum. Bestenfalls änderst du den Typ in TIMESTAMP oder INT(11) für den Unix-Timestamp (Anzahl der Sekunden seit 1.1.1970).
 
Also in der Dep_Time spalte steht eine exakte Zeit z.B. 06:05, das Datum benötige ich eigentlich nicht, weil die Abfluigzeit kein Datum hat sondern nur maximal Wochentag gebunden wird, was aber erst später implementiert wird!

Das mit dem umschreiben, verstehe ich nicht!
 
Zuletzt bearbeitet:
(1) Rechne diese ominöse Zeitangabe in timestamp um
(2) Nimm die aktuelle Zeit und ziehe das Ergebnis aus (1) ab
Ergebnis: Dauer bis Zeit X in Einheit Sekunden
(3) if Abfragen anpassen..

mfg chmee
 
Zurück