Distanzberechnung

ich weiß jetzt nicht ganz ob er überhaupt die Werte von den Flughafen Ids übernimmt denn ich kann mit dem %s an der Stelle nichts anfangen
 
sprintf() formatiert den String. %s steht für String, %d für eine Ganzzahl, %f für Kommazahlen, etc...

Du hast recht, du bist auf der richtigen Spur. $flughafenid1 und $flughafenid2 sind nicht definiert. Die sollten ja eigentlich aus der Datenbank kommen.
 
Richtig, der SELECT beinhaltet eine Abfrage auch auf die Ids. Eigentlich sollten sie innerhalb der while-Schleife im Array $dataset zu finden sein.
 
Du willst ja was lernen, oder? Wenn ich es dir jetzt haarklein zeige, was du machen sollst, lernst du nichts daraus. "Später" selektierst du nicht flughafenid sondern lat bzw. lon, die flughafenid ist lediglich die Bedingung, nach der ausgewählt wird. Ich versuche mal zu umschreiben, was du hier machst:

- Es wird ein Query abgesendet, der verschiedene Daten aus 3 verschiedenen Tabellen holt (hier hast du übrigens schon einen Fehler drin: flughafenid kann nicht 'flughafenid' sein, außerdem macht es an der Stelle keinen Sinn, flughafenid hier als Bedingung heranzuziehen)
- Alle Datensätze auf die WHERE-Bedingung zutrifft, wird in die Ergebnismenge $ergebnis geholt.
- Es wird geprüft ob überhaupt etwas abgeholt wurde.
- Jetzt müsste das abholen der Datensätze aus der Ergebnismenge kommen (mysql_fetch_array() oder ähnliches)
- In den Datensätzen hast du die flughafenid1 und flughafenid2 drin stehen.
- Die beiden flughafenid kannst du verwenden, um die lat und lon des jeweiligen Flughafen zu besorgen.
- Die lat und lon kannst du für die Distanz-Berechnung verwenden.

Versuch noch mal, diesen Ablaufplan einzubauen. Außerdem versuche den ersten Query mal in deine eigene Muttersprache zu übersetzen (ja, das geht), dann wirst du feststellen, dass dort der Hund begraben liegt.
 
Also die sql Abfragwe habe ich angepasst sprich die Ands entfernt. Allerdings verstehe ich nicht wo die weiteren Fehler sind.
Ich habe auch die fehlenden Variablen mit Dataset eingefügt, allerdings sagt mein Programm es gabe dort Fehler, allerdings verrät er nicht welche?

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
 
$flughafenid1 = .$dataset['flughafenid1'].;  //Hier wird ein Skriptfehler angezeigt nur warum?
$flughafenid2 = .$dataset['flughafenid2'].;  //Hier wird ein Skriptfehler angezeigt nur warum?

if ($ergebnis)
{
         // 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 "$distance"; //Debug Echo 2
		 echo "$entfernung"; //Debug Echo 3
       print "<table border=\"0\" cellspacing=\"2\" ".
       "cellpadding=\"5\" WIDTH=\"63\%\" class=\"tableLine\">\n";
       
       
       while ($dataset = mysql_fetch_array($ergebnis))

           {
        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 poste hier mal die Struktur der Flughafen Tabelle.
PHP:
`Flughafen` (
  `flughafenid` varchar(5) NOT NULL default '',
  `flughname` varchar(25) NOT NULL,
  `sid` text NOT NULL,
  `scenery` text NOT NULL,
  `landekosten` varchar(10) NOT NULL default '',
  `kateringkostenA` varchar(5) NOT NULL default '3.78',
  `kateringkostenB` varchar(5) NOT NULL default '5.88',
  `kateringkostenC` varchar(5) NOT NULL default '8.08',
  `kategorieindex` varchar(5) NOT NULL default '',
  `paxe` varchar(10) NOT NULL default '5000',
  `cargo` varchar(10) NOT NULL default '500000',
  `gatepax` varchar(10) NOT NULL COMMENT 'Gate Pax',
  `gatecargo` varchar(10) NOT NULL COMMENT 'Gate Cargo',
  `benutzung_arr` int(10) NOT NULL default '0',
  `benutzung_dep` int(10) NOT NULL default '0',
  `bemerkung` varchar(10) NOT NULL default '',
  `lat` varchar(100) NOT NULL COMMENT 'Breite',
  `lon` varchar(100) NOT NULL COMMENT 'Länge',
  PRIMARY KEY  (`flughafenid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
PHP:
$flughafenid1 = .$dataset['flughafenid1'].;  //Hier wird ein Skriptfehler angezeigt nur warum?
$flughafenid2 = .$dataset['flughafenid2'].;  //Hier wird ein Skriptfehler angezeigt nur warum?

// Weil das Array $dataset erst durch die Funktion mysql_fetch_array() mit Daten gefüllt wird und bis dahin undefiniert ist. Siehe in deinem Code Zeile:

while ($dataset = mysql_fetch_array($ergebnis))....

Edit: Außerdem hast du Syntax-Fehler drin. Richtig würde es lauten

PHP:
$flughafenid1 = $dataset['flughafenid1'];  // Achtung! Punkte vor und nach $dataset['flughafenid1'] entfernt
$flughafenid2 = $dataset['flughafenid2'];  // dito

Aber wie gesagt, $dataset ist erst mit Werten gefüllt, wenn mysql_fetch_array() oder etwas vergleichbares ausgeführt wurde. Das hättest du mit Debuggen mittel var_dump($dataset); aber auch selbst herausfinden können.
 
Zuletzt bearbeitet:
Ich habe das jetzt alles mal etwas umgestellt und dann kommt folgende Fehlermeldung
"Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/americanblue-va.com/httpdocs/FPS/FPS_buchung_fluginfo.php on line 199"

Das würde bedeuten das die mysql nich passen würde aber mir sind nur die läufigsten bekannt (row,object,array)bekannt.

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
 



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

{
         // 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";
      }?>

EDIT: Ich habe mich auf PHP.net schon über diverse andere mysql fetch informiert, allerdings würde ich auch nachdem lesen das array benutzen.
 
Zuletzt bearbeitet:
Da ich nicht weiß, was in Zeile 199 steht, kann ich das schlecht analysieren, du hast hier offensichtlich nicht alles gepostet. mysql_fetch_row() seh ich schon mal gar nicht.

Die if-Prüfung auf Ergebnis war schon an der richtigen Stelle. Du hast jetzt korrekterweise das Abholen der flughafenid in die while-Schleife aufgenommen. Also würde der Code so schon mal funktionieren?

PHP:
if ($ergebnis)
{
       while ($dataset = mysql_fetch_array($ergebnis))
       {
         $flughafenid1 = $dataset['flughafenid1'];  
         $flughafenid2 = $dataset['flughafenid2']; 
         // Geo-Koordinaten der Flughäfen besorgen
 
Zurück