Distanzberechnung

Soweit ist die Fehlermeldung weg aber es bleibt bei "keiner Anzeige"

PHP:
<?php 
ini_set('display_errors', 1);
error_reporting(E_ALL|E_STRICT);  

function calculate_spheric_distance($lat1, $lat2, $lon1, $lon2)
{
 $faktor = 3.141592535 / 180; //umrechnungsfaktor nach bogenmass
 
 $radius = 6370; //mittlerer Erdradius
 
 $a_lat = $lat1 * $faktor; // breite
 $a_lon = $lon1 * $faktor; //länge
 
 $b_lat = $lat2 * $faktor; //breite
 $b_lon = $lon2 * $faktor; //länge
 
$distance =  round(acos(sin($b_lat)*sin($a_lat)+cos($b_lat)*cos($a_lat)*cos($b_lon - $a_lon)) * $radius, 2);

return $distance;
}  
$flugnummer = isset($_GET['flugnummer']) ? $_GET['flugnummer'] : null;  
$abfrage = "SELECT 
                                        `piloten`.`pilot_id` , 
                    `Flugplan`.`flughafenid1` , 
                    `Flugplan`.`dep_time` , 
                    `Flugplan`.`flughafenid2` , 
                    `Flugplan`.`arr_time` ,             
                    `Flugplan`.`flugnummer`,
                    `Flugplan`.`days`,
                    `Flugplan`.`registrierung`,
                    `Flugplan`.`hersteller_name`,
                    `Flugplan`.`comment_charter`,
                    `Flugplan`.`gebucht`,
                    `Flugplan`.`pilotid`,
 FROM 
                     piloten,
                    Flughafen, 
                    Flugplan 
WHERE 
                    (pilot_id = '$pilot_id')";
$ergebnis = mysql_query($abfrage);
 echo "$flugnummer";//Debug Echo 1
 
if ($ergebnis)

while ($dataset = mysql_fetch_array($ergebnis))
{
$flughafenid1 = $dataset['flughafenid1'];  
$flughafenid2 = $dataset['flughafenid2']; 


{
         // Geo-Koordinaten der Flughäfen besorgen
             $airport1Query = sprintf("SELECT lat,lon FROM Flughafen WHERE flughafenid = '%s'", $flughafenid1);
             $airport2Query = sprintf("SELECT lat,lon FROM Flughafen WHERE flughafenid = '%s'", $flughafenid2);
             
             $airport1Result = mysql_query($airport1Query) or die( mysql_error() ); 
             $airport2Result = mysql_query($airport2Query) or die( mysql_error() ); 
             
             $airport1Data   = mysql_fetch_assoc($airport1Result);
             $airport2Data   = mysql_fetch_assoc($airport2Result);
             
             $lat1 = $airport1Data['lat'];
             $lat2 = $airport2Data['lat'];
             $lon1 = $airport1Data['lon'];
             $lon2 = $airport2Data['lon'];
         // Fertig: Geo-Koordinaten der Flughäfen besorgen
         
             $entfernung = calculate_spheric_distance($lat1, $lat2, $lon1, $lon2);
		 echo "$entfernung"; //Debug Echo 3
       print "<table border=\"0\" cellspacing=\"2\" ".
       "cellpadding=\"5\" WIDTH=\"63\%\" class=\"tableLine\">\n";
       
       


           {
        print "<tr>";
        print "<td>Flugnummer:</td><td>".$dataset['flugnummer']."</td><td></td><td></td><td></td>
        </tr>";
        print "<tr>";
        print "<td>Abflug:</td><td>".$dataset['flughafenid1']."&nbsp;"."</td><td></td><td>Ankunft:</td><td>".$dataset['flughafenid2']."&nbsp;"."</td>
        </tr>";
        print "<tr>";
        print "<td>Abflugzeit:</td><td>".$dataset['dep_time']."</td><td></td><td></td><td></td>
        </tr>";
        print "<tr>";
        print "<td></td><td></td><td></td><td>Ankunftszeit:</td><td>".$dataset['arr_time']."</td>
        </tr>";
        print "<td>Flungtage:</td><td>".$dataset['days']."&nbsp;"."</td><td></td><td>Regestrierung:</td><td>".$dataset['registrierung']."&nbsp;"."</td>
        </tr>";
        print "<tr>";
        print "<td>Route:</td><td colspan=\"4\">".$dataset['route']."&nbsp;"."</td>
        </tr>";
        print "<tr>";
        print "<td></td><td></td><td></td><td></td><td></td>
        </tr>";
        print "<tr>";
        print "<td>Anmerkung:</td><td colspan=\"4\">".$dataset['comment_charter']."&nbsp;"."</td>
        </tr>";
		print "<tr>";
        print "<td>Anmerkung:</td><td colspan=\"4\">".$dataset['comment_charter']."&nbsp;"."</td>
		     </tr>"; 
 
             }
    print "</td></tr>\n";
    print "</table>\n";
     } }?>

Ich weiß langsam echt nicht mehr wo da meine (Denk)Fehler sind

EDIT: Zeile 199: war die While Schleife. Ich habe nur das aktuelle Skript kopiert in der Seite befinden sich noch diverse andere Codes.
 
Zuletzt bearbeitet:
Also ich habe versucht anhand von echos zu sehen ob die Variablen
$flughafenid1 und $flughafenid2 überhaupt egefüttert werden. Die Ausgabe bleibt ebenfalls leer, verdammt wo ,liegt denn der blöde Fehler
 
Da du dich wirklich bemühst, hier eine vorläufige Lösung für dein Problem. Ich habe das SQL auf die notwendigen Spalten und Tabellen bereinigt und dabei den Fehler entdeckt. Außerdem habe ich Debugging-Steps eingebaut, aus denen du lernen kannst, wie man das macht. Die musst du natürlich entfernen, wenn sie nicht mehr gebraucht werden:

PHP:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL|E_STRICT);

function calculate_spheric_distance($lat1, $lat2, $lon1, $lon2)
{
	$faktor = 3.141592535 / 180; //umrechnungsfaktor nach bogenmass

	$radius = 6370; //mittlerer Erdradius

	$a_lat = $lat1 * $faktor; // breite
	$a_lon = $lon1 * $faktor; //länge

	$b_lat = $lat2 * $faktor; //breite
	$b_lon = $lon2 * $faktor; //länge

	$distance =  round(acos(sin($b_lat)*sin($a_lat)+cos($b_lat)*cos($a_lat)*cos($b_lon - $a_lon)) * $radius, 2);

	return $distance;
}

// Parameter aus Link holen
$flugnummer = isset($_GET['flugnummer']) ? mysql_real_escape_string($_GET['flugnummer']) : null;

// Select-SQL zusammen bauen
$abfrage = "SELECT
	`Flugplan`.`flughafenid1` , 
	`Flugplan`.`dep_time` , 
	`Flugplan`.`flughafenid2` , 
	`Flugplan`.`arr_time` ,             
	`Flugplan`.`flugnummer`,
	`Flugplan`.`days`,
	`Flugplan`.`registrierung`,
	`Flugplan`.`hersteller_name`,
	`Flugplan`.`comment_charter`,
	`Flugplan`.`gebucht`,
	`Flugplan`.`pilotid`
FROM 
	Flugplan
WHERE 
	flugnummer = '$flugnummer'";

// Debugging SQL
echo "Folgender Query wird gesendet: <pre>$query</pre>";

// Abfrage an die DB
$ergebnis = mysql_query($abfrage) or die(mysql_error());

// Debug
echo "$flugnummer";//Debug Echo 1

// Haben wir was gefunden?
if ($ergebnis)
{
	// Ja, laufe über aller gefundenen Datensätze
	while ($dataset = mysql_fetch_assoc($ergebnis))
	{
		// Debug: Das Ergebnis als Array
		echo "Jetzt geben wir mal dataset aus:<pre>";
		var_dump($dataset);
		echo "<pre/>";
		
		// Flughafen-ID's abholen
		$flughafenid1 = $dataset['flughafenid1'];
		$flughafenid2 = $dataset['flughafenid2'];

		// Geo-Koordinaten der Flughäfen besorgen
		$airport1Query = sprintf("SELECT lat,lon FROM Flughafen WHERE flughafenid = '%s'", $flughafenid1);
		$airport2Query = sprintf("SELECT lat,lon FROM Flughafen WHERE flughafenid = '%s'", $flughafenid2);
			
		$airport1Result = mysql_query($airport1Query) or die( mysql_error() );
		$airport2Result = mysql_query($airport2Query) or die( mysql_error() );
			
		$airport1Data   = mysql_fetch_assoc($airport1Result);
		$airport2Data   = mysql_fetch_assoc($airport2Result);
			
		$lat1 = $airport1Data['lat'];
		$lat2 = $airport2Data['lat'];
		$lon1 = $airport1Data['lon'];
		$lon2 = $airport2Data['lon'];
		// Fertig: Geo-Koordinaten der Flughäfen besorgen
		
		// Entfernung berechnen
		$entfernung = calculate_spheric_distance($lat1, $lat2, $lon1, $lon2);
		
		echo "$entfernung"; //Debug Echo 3
		print "<table border=\"0\" cellspacing=\"2\" ".
       "cellpadding=\"5\" WIDTH=\"63\%\" class=\"tableLine\">\n";
			
		print "<tr>";
		print "<td>Flugnummer:</td><td>".$dataset['flugnummer']."</td><td></td><td></td><td></td>
        </tr>";
		print "<tr>";
		print "<td>Abflug:</td><td>".$dataset['flughafenid1']."&nbsp;"."</td><td></td><td>Ankunft:</td><td>".$dataset['flughafenid2']."&nbsp;"."</td>
        </tr>";
		print "<tr>";
		print "<td>Abflugzeit:</td><td>".$dataset['dep_time']."</td><td></td><td></td><td></td>
        </tr>";
		print "<tr>";
		print "<td></td><td></td><td></td><td>Ankunftszeit:</td><td>".$dataset['arr_time']."</td>
        </tr>";
		print "<td>Flungtage:</td><td>".$dataset['days']."&nbsp;"."</td><td></td><td>Regestrierung:</td><td>".$dataset['registrierung']."&nbsp;"."</td>
        </tr>";
		print "<tr>";
		print "<td>Route:</td><td colspan=\"4\">".$dataset['route']."&nbsp;"."</td>
        </tr>";
		print "<tr>";
		print "<td></td><td></td><td></td><td></td><td></td>
        </tr>";
		print "<tr>";
		print "<td>Anmerkung:</td><td colspan=\"4\">".$dataset['comment_charter']."&nbsp;"."</td>
        </tr>";
		print "<tr>";
		print "<td>Anmerkung:</td><td colspan=\"4\">".$dataset['comment_charter']."&nbsp;"."</td>
             </tr>"; 

		print "</td></tr>\n";
		print "</table>\n";
	}
}
else {
	echo "Kein Ergebnis gefunden!";
}
?>
 
Das ist ja ganz phantastisch, aber wo lag der Fehler, ich finde den immer noch nicht! Ich habe dein Skript auch gleichmal gespeichert um das mit dem Debugging zu vertiefen.

EDIT: Die Angbe der Entfernung ist jetzt in Km oder? kann man überhaupt das in nm umrechnen?
 
Zuletzt bearbeitet:
Vergleiche dein SQL mit meinem. Dann wirst du den Fehler sicher finden. Tipp: Es wird nicht mehr nach pilot_id stattdessen nach flugnummer gesucht. Denn das ist das einzige Kriterium, was durch den GET-Parameter variabel ist. Es wird nirgends eine Piloten-ID übergeben, also kann auch nicht danach gesucht werden.

Außerdem hilft es ganz ungemein, wenn man seinen Code anständig formatiert. Dann fallen auch Klammer-Fehler leichter auf.

Die Entfernung sollte nach dem verwendeten Algorhythmus in KM angegeben sein, ja. Wozu willst du das in nm (Nanometer) umrechnen? Was meinst du damit genau?
 
Ich habs gelöst ist mit nem funktionablen Quelltext ganz einfach. nm sind Seemeilen aber auch Flugmeilen. Und da das ein Flugportal wird benötige ich es in nm :-)

Die Lösung
$distance = round(acos(sin($b_lat)*sin($a_lat)+cos($b_lat)*cos($a_lat)*cos($b_lon - $a_lon)) * $radius /1.852, 2);
 
Danke, da hab ich auch wieder was dazu gelernt, eigentlich logisch, nautische Meilen. Wenn man weiß, was es ausgeschrieben heißt, erklärt es sich selbst. Prima das du es selbst lösen konntest. Viel Erfolg weiterhin.

PS: Danke das wir das Thema jetzt abschließen können. Bitte betätige doch noch den "Erledigt"-Haken. *Puuh* :-)
 
Zurück