Ranksystem macht Probleme

Boeingfreak

Grünschnabel
Hallo Leute,

ich habe in einer Pilotenliste einer Airline ein Rank System eingebaut. Funktioniert alles soweit gut. Der Code:

PHP:
<?php
/* Constants */
@define ("MYSQL_CONNECT_INCLUDE", "connect_db.php");		// MySQL database connection (a sample file is included)

 
/* Database connection */
include(MYSQL_CONNECT_INCLUDE);

/* Select all pilots */
$query = "SELECT * FROM pilots_auw ORDER BY pilotID ASC";
$result = mysql_query($query);

/* Determine the number of pilots */
$number = mysql_numrows($result);

if ($number > 0) {
	/* Print roster header 
	   Change this HTML to fit your webpage layout */
	print "<table>";
	print "<tr>";
	print "<td width=20 height=12 align=left><font face=Arial size=1><b>LAND</b></font></td>";
	print "<td width=20 height=12 align=left><font face=Arial size=1><b>RANG</b></font></td>";
	print "<td width=85 height=12 align=left><font face=Arial  size=1><b>PILOTEN ID</b></font></td>";
	print "<td width=125 height=12 align=left><font face=Arial  size=1><b>NAME</b></font></td>";
	print "<td width=85 height=12 align=left><font face=Arial  size=1><b>IVAO ID</b></font></td>";
	print "<td width=85 height=12 align=left><font face=Arial  size=1><b>VATSIM ID</b></font></td>";
	print "<td width=85 height=12 align=left><font face=Arial  size=1><b>FLUGZEIT</b></font></td>";
	print "</tr>";
	
	/* Get pilots info */
	for ($i=0; $i<$number; $i++) {
     		$residence = mysql_result($result,$i,"residence");
     		$forename = mysql_result($result,$i, "forename");
     		$surname = mysql_result($result,$i, "surname");
     		$vatsimID = mysql_result($result,$i, "ivaoID");
     		$ivaoID = mysql_result($result,$i, "vatsimID");
		$pilotID = mysql_result($result,$i, "pilotID");
		
         	/* Calculate flight hours */
		$query_hours = "SELECT sec_to_time(sum(time_to_sec(t2.flightTime))) AS duration_sum FROM pilots_auw t1, flights_auw t2 WHERE t1.pilotID=$pilotID AND t1.pilotID=t2.pilotID";
    		$result_hours = mysql_query($query_hours);
    	
    		if (mysql_numrows($result_hours) > 0) {
			$time = mysql_result($result_hours,0,"duration_sum");
		}

		if($time == "")
    		{
    		$rang = "<img src=sfo.jpg>";
    		}

		if($time > "00:00:00")
    		{
    		$rang = "<img src=sfo.jpg>";
    		}

		if($time > "25:00:00")
    		{
    		$rang = "<img src=fo.jpg>";
    		}

		if($time > "50:00:00")
    		{
    		$rang = "<img src=cpt.jpg>";
    		}

		if($time > "75:00:00")
    		{
    		$rang = "<img src=fcp.jpg>";
    		}

		if($time > "90:00:00")
    		{
    		$rang = "<img src=scp.jpg>";
    		}

		if($residence =="Germany")
    		{
    		$flagge = "<img src=germany.jpg>";
    		}

		if($residence == "France")
    		{
    		$flagge = "<img src=france.jpg>";
    		}

		if($residence == "Austria")
    		{
    		$flagge = "<img src=austria.jpg>";
    		}

		if($residence == "Belgium")
    		{
    		$flagge = "<img src=belgium.jpg>";
    		}

		if($residence == "Bosnia")
    		{
    		$flagge = "<img src=bosnia.jpg>";
    		}

		if($residence == "Croatia")
    		{
    		$flagge = "<img src=croatia.jpg>";
    		}

		if($residence == "Greece")
    		{
    		$flagge = "<img src=greece.jpg>";
    		}

		if($residence == "Hungary")
    		{
    		$flagge = "<img src=hungary.jpg>";
    		}

		if($residence == "Italy")
    		{
    		$flagge = "<img src=italy.jpg>";
    		}

		if($residence == "Luxemburg")
    		{
    		$flagge = "<img src=luxemburg.jpg>";
    		}

		if($residence == "Netherland")
    		{
    		$flagge = "<img src=netherlands.jpg>";
    		}

		if($residence == "Norway")
    		{
    		$flagge = "<img src=Norway.jpg>";
    		}

		if($residence == "Romania")
    		{
    		$flagge = "<img src=Romania.jpg>";
    		}

		if($residence == "Sweden")
    		{
    		$flagge = "<img src=Sweden.jpg>";
    		}

		if($residence == "Switzerland")
    		{
    		$flagge = "<img src=switzerland.jpg>";
    		}

		if($residence == "Turkey")
    		{
    		$flagge = "<img src=Turkey.jpg>";
    		}

		if($residence == "United Kingdom")
    		{
    		$flagge = "<img src=uk.jpg>";
    		}

         	
     		/* Display roster entries */
     		print "<tr>";
     		print "<td width=32 height=12 align=left><font face=Arial size=1>$flagge</font></td>";
		print "<td width=32 height=12 align=left><font face=Arial size=1>$rang</font></td>";
     		print "<td width=85 height=12 align=left><font face=Arial size=1>AUW$pilotID</font></td>";
     		print "<td width=125 height=12 align=left><font face=Arial size=1>$forename $surname</font></td>";
     		print "<td width=85 height=12 align=left><font face=Arial size=1>$vatsimID</font></td>";     		
		print "<td width=85 height=12 align=left><font face=Arial size=1>$ivaoID</font></td>";
     		print "<td width=85 height=12 align=left><font face=Arial size=1>$time</font></td>";
     		print "</tr>";
	}
	
	print "</table>";
}

	print "<br><table>";
		print "<tr>";
		print "<td width=85>*Legende:</td>";
		print "<td width=190><img src=sfo.jpg> = Second Flight Officer</td>";
		print "<td width=170><img src=fo.jpg> = First Flight Officer</td>";
		print "<td width=110><img src=cpt.jpg> = Captain</td>";
		print "<td width=150><img src=fcp.jpg> = Flight Captain</td>";
		print "<td width=150><img src=scp.jpg> = Senior Captain</td>";
		print "</tr>";
	print "</table>";

/* Close the database connection */
mysql_close();
?>

Zu meinem Problem: Alle Piloten die über 100 Flugstunden sind haben plötzlich wieder den 1. Rank sprich:

PHP:
		if($time > "00:00:00")
    		{
    		$rang = "<img src=sfo.jpg>";
    		}
Jetzt ist die Frage warum? Trage ich nun einen neuen Teil ein:
PHP:
		if($time > "100:00:00")
    		{
    		$rang = "<img src=scp.jpg>";
    		}
Haben alle Piloten die unter dem 2. Rank sind also 0 Flugstunden bis 24:99 Stunden auch Senior Captain Rank.

Ich sitze schon seit einer Woche daran das Problem zu lösen und bin mittlerweile verzweifelt.

Ich vermute das die Lösung mal wieder ganz simpel ist. Bitte hilft mir!
 
Moin,

du vergleichst dort Strings und keine Zahlenwerte, ein String 100:00:00 ist schlicht kleiner als 25:00:00

Das sinnvollste wäre, du speicherst in der DB gleich die Sekunden, diese liessen sich einfach vergleichen.

Theoretisch könntest du dort diese Prüfung auch gleich im Query vornehmen, wenn die Spalte vom Typ TIME ist, aber der Wertebereich dieses Typs endet bei 839 Stunden...irgendwann dürfte dich das vor Probleme stellen, deswegen nimm lieber gleich die Sekunden.
 
Hallo,

da ich noch ein Newbie in Thema PHP bin und ich die Liste mit ach und krach hingekriegt habe. Wäre es nett wenn du mal genauer erläuterst wie ich das machen kann. Beziehungsweise wie das Funktioniert. Im übrigen in der SQL ist das so das wenn der Pilot ein Flug reportet (abgibt) dann wird seine ID geloggt sowie die Flugstunden reingeschrieben d.H pro Pilot und pro Flug ein extra Eintrag.

In meiner Pilotenliste werden die Stunden dann zusammen gerechnet und danach ausgegeben. Deswegen dachte ich das es so funktionieren könnte.
 
Die benötigte Mysql-Funktion verwendest du ja schon im Query:
Code:
SELECT sec_to_time(sum(time_to_sec(t2.flightTime))) AS duration_sum

Anstatt nun die Summe an Sekunden wieder mit sec_to_time() zurück umzuwandeln, lasse dir die Sekunden direkt zurückgeben.

Code:
SELECT sum(time_to_sec(t2.flightTime)) AS duration_sum

Jetzt hast du Werte, welche so verglichen werden können, wie du es brauchst....numerisch.

Du musst jetzt nur noch die Vergleichskriterien ändern, bspw.:
alt:
Code:
if($time > "25:00:00")
neu:
Code:
if($time > 90000)
(25 Stunden entsprechen 90000 Sekunden)

Das wars eigentlich mit den Vergleichen.

Jetzt brauchst du nur noch was für die formatierte Ausgabe.
PHP scheint kein Pendant zu der Mysql-Funktion sec_to_time() zu besitzen, hier ne kleine Hilfsfunktion:
PHP:
function sec_to_time($sec)
{
  $hh=$sec/3600;
  $sec=$sec%3600;
  $mm=$sec/60;
  $sec=$sec%60;
  return sprintf("%d:%02d:%02d", $hh, $mm, $sec); 
}

Ausgabe:
PHP:
print "<td width=85 height=12 align=left><font face=Arial size=1>".sec_to_time($time)."</font></td>";
 
Habe ich jetzt so gemacht, danke dafür. Jetzt hab ich das Problem das er nur noch ein Pilot anzeigt. Aber es funktioniert. Was ist da jetzt Faul? Hier der aktuelle Code:

PHP:
<?php
/* Constants */
@define ("MYSQL_CONNECT_INCLUDE", "connect_db.php");		// MySQL database connection (a sample file is included)

 
/* Database connection */
include(MYSQL_CONNECT_INCLUDE);

/* Select all pilots */
$query = "SELECT * FROM pilots_auw ORDER BY pilotID ASC";
$result = mysql_query($query);

/* Determine the number of pilots */
$number = mysql_numrows($result);

if ($number > 0) {
	/* Print roster header 
	   Change this HTML to fit your webpage layout */
	print "<table>";
	print "<tr>";
	print "<td width=20 height=12 align=left><font face=Arial size=1><b>LAND</b></font></td>";
	print "<td width=20 height=12 align=left><font face=Arial size=1><b>RANG</b></font></td>";
	print "<td width=85 height=12 align=left><font face=Arial  size=1><b>PILOTEN ID</b></font></td>";
	print "<td width=125 height=12 align=left><font face=Arial  size=1><b>NAME</b></font></td>";
	print "<td width=85 height=12 align=left><font face=Arial  size=1><b>IVAO ID</b></font></td>";
	print "<td width=85 height=12 align=left><font face=Arial  size=1><b>VATSIM ID</b></font></td>";
	print "<td width=85 height=12 align=left><font face=Arial  size=1><b>FLUGZEIT</b></font></td>";
	print "</tr>";
	
	/* Get pilots info */
	for ($i=0; $i<$number; $i++) {
     		$residence = mysql_result($result,$i,"residence");
     		$forename = mysql_result($result,$i, "forename");
     		$surname = mysql_result($result,$i, "surname");
     		$vatsimID = mysql_result($result,$i, "ivaoID");
     		$ivaoID = mysql_result($result,$i, "vatsimID");
		$pilotID = mysql_result($result,$i, "pilotID");
		
         	/* Calculate flight hours */
		$query_hours = "SELECT sum(time_to_sec(t2.flightTime)) AS duration_sum FROM pilots_auw t1, flights_auw t2 WHERE t1.pilotID=$pilotID AND t1.pilotID=t2.pilotID";
    		$result_hours = mysql_query($query_hours);
    	
    		if (mysql_numrows($result_hours) > 0) {
			$time = mysql_result($result_hours,0,"duration_sum");
		}

		if($time == "")
    		{
    		$rang = "<img src=sfo.jpg>";
    		}

		if($time > "0")
    		{
    		$rang = "<img src=sfo.jpg>";
    		}

		if($time > "90000")
    		{
    		$rang = "<img src=fo.jpg>";
    		}

		if($time > "180000")
    		{
    		$rang = "<img src=cpt.jpg>";
    		}

		if($time > "360000")
    		{
    		$rang = "<img src=fcp.jpg>";
    		}

		if($time > "720000")
    		{
    		$rang = "<img src=scp.jpg>";
    		}

		if($residence =="Germany")
    		{
    		$flagge = "<img src=germany.jpg>";
    		}

		if($residence == "France")
    		{
    		$flagge = "<img src=france.jpg>";
    		}

		if($residence == "Austria")
    		{
    		$flagge = "<img src=austria.jpg>";
    		}

		if($residence == "Belgium")
    		{
    		$flagge = "<img src=belgium.jpg>";
    		}

		if($residence == "Bosnia")
    		{
    		$flagge = "<img src=bosnia.jpg>";
    		}

		if($residence == "Croatia")
    		{
    		$flagge = "<img src=croatia.jpg>";
    		}

		if($residence == "Greece")
    		{
    		$flagge = "<img src=greece.jpg>";
    		}

		if($residence == "Hungary")
    		{
    		$flagge = "<img src=hungary.jpg>";
    		}

		if($residence == "Italy")
    		{
    		$flagge = "<img src=italy.jpg>";
    		}

		if($residence == "Luxemburg")
    		{
    		$flagge = "<img src=luxemburg.jpg>";
    		}

		if($residence == "Netherland")
    		{
    		$flagge = "<img src=netherlands.jpg>";
    		}

		if($residence == "Norway")
    		{
    		$flagge = "<img src=Norway.jpg>";
    		}

		if($residence == "Romania")
    		{
    		$flagge = "<img src=Romania.jpg>";
    		}

		if($residence == "Sweden")
    		{
    		$flagge = "<img src=Sweden.jpg>";
    		}

		if($residence == "Switzerland")
    		{
    		$flagge = "<img src=switzerland.jpg>";
    		}

		if($residence == "Turkey")
    		{
    		$flagge = "<img src=Turkey.jpg>";
    		}

		if($residence == "United Kingdom")
    		{
    		$flagge = "<img src=uk.jpg>";
    		}

		function sec_to_time($sec)
		{
  		$hh=$sec/3600;
  		$sec=$sec%3600;
  		$mm=$sec/60;
  		$sec=$sec%60;
  		return sprintf("%d:%02d:%02d", $hh, $mm, $sec); 
		}  

         	
     		/* Display roster entries */
     		print "<tr>";
     		print "<td width=32 height=12 align=left><font face=Arial size=1>$flagge</font></td>";
		print "<td width=32 height=12 align=left><font face=Arial size=1>$rang</font></td>";
     		print "<td width=85 height=12 align=left><font face=Arial size=1>AUW$pilotID</font></td>";
     		print "<td width=125 height=12 align=left><font face=Arial size=1>$forename $surname</font></td>";
     		print "<td width=85 height=12 align=left><font face=Arial size=1>$vatsimID</font></td>";     		
		print "<td width=85 height=12 align=left><font face=Arial size=1>$ivaoID</font></td>";
     		print "<td width=85 height=12 align=left><font face=Arial size=1>".sec_to_time($time)."</font></td>";
     		print "</tr>";
	}
	
	print "</table>";
}

	print "<br><table>";
		print "<tr>";
		print "<td width=85>*Legende:</td>";
		print "<td width=190><img src=sfo.jpg> = Second Flight Officer</td>";
		print "<td width=170><img src=fo.jpg> = First Flight Officer</td>";
		print "<td width=110><img src=cpt.jpg> = Captain</td>";
		print "<td width=150><img src=fcp.jpg> = Flight Captain</td>";
		print "<td width=150><img src=scp.jpg> = Senior Captain</td>";
		print "</tr>";
	print "</table>";

/* Close the database connection */
mysql_close();
?>
 
Yep

PHP:
        function sec_to_time($sec)
        {
          $hh=$sec/3600;
          $sec=$sec%3600;
          $mm=$sec/60;
          $sec=$sec%60;
          return sprintf("%d:%02d:%02d", $hh, $mm, $sec); 
        }   

/* Display roster entries */
             print "<tr>";
             print "<td width=32 height=12 align=left><font face=Arial size=1>$flagge</font></td>";
        print "<td width=32 height=12 align=left><font face=Arial size=1>$rang</font></td>";
             print "<td width=85 height=12 align=left><font face=Arial size=1>AUW$pilotID</font></td>";
             print "<td width=125 height=12 align=left><font face=Arial size=1>$forename $surname</font></td>";
             print "<td width=85 height=12 align=left><font face=Arial size=1>$vatsimID</font></td>";             
        print "<td width=85 height=12 align=left><font face=Arial size=1>$ivaoID</font></td>";
             print "<td width=85 height=12 align=left><font face=Arial size=1>".sec_to_time($time)."</font></td>";
             print "</tr>";
    }
 
Zuletzt bearbeitet:
Ahso, da isse versteckt :-)

schreibe die Funktion mal woanders hin, ausserhalb der Schleifen, z.B. als ganz erstes ins Skript.

Andernfalls wird bei jedem Schleifendurchlauf versucht, die Funktion neu zu erstellen...was einen Fehler erzeugt, weil sie schon existiert.
 
Zurück