Problem mit if and else

Malchor

Erfahrenes Mitglied
Hallo,

ich habe da ein Problem wo ich nicht hinterkomme.
Ich möchte ein Skript haben, dass Flüge die bereits gebucht sind mit "Allready booked" makiert statt mit der Flugnr. und wenn sie frei sind über die Flugnummer anklickbar sind.

Der Fehler der auftritt ist folgender:

OLAF-PC-2010-nov-23-001.jpg


Es werden gar keine Flüge mehr angezeigt, obwohl diverse in der DB sind.

Der Quellcode dazu:
PHP:
<?php 
$flugnummer =	 $row['flugnummer']; 
$abfrage = "SELECT
					 `piloten`.`letzter_standort` , 
					 `Flugplan`.`flughafenid1` , 
					 `Flugplan`.`dep_time` , 
					 `Flugplan`.`flughafenid2` , 
					 `Flugplan`.`arr_time` , 
					 `Flugplan`.`flugnummer`,
					 `Flugplan`.`days`,
					 `Flugplan`.`registrierung` ,
					 `Flugplan`.`hersteller_name`,
					 `Flugplan`.`gebucht` 
			FROM 
					 piloten, 
					 Flugplan
			WHERE   
			         (pilot_id = '" . mysql_real_escape_string($pilot_id) . "')
			AND 
			         (`Flugplan`.`gebucht` = 'F')
			AND
					 (`piloten`.`letzter_standort` = `Flugplan`.`flughafenid1`)
                              ORDER BY `Flugplan`.`flughafenid2`  ASC LIMIT 0 , 100;";
$ergebnis = mysql_query($abfrage)
   or die ("MySQL-Error: " . mysql_error());
if (gebucht=="F") 	{
	
	
	   print "<table border=\"0\" cellspacing=\"2\" ".
	   "cellpadding=\"5\" WIDTH=\"100\%\" class=\"tableLine\">\n";

	   print "<tr><th>Flugnummer</th><th>Abflugzeit</th><th>Zielflughafen</th>";
	   print "<th>Ankunftszeit</th><th>Flugtage</th><th>Stops</th><th>Flugzeug</th><th>Info</th></tr>\n";
	   while ($dataset = mysql_fetch_array($ergebnis))

           {
	    print "<tr>";
	    print "<td><a href=\"FPS_buchung_flug.php?flugnummer=".$dataset['flugnummer']."\">".$dataset['flugnummer']."</a>&nbsp"."</td>";;  
		print "<td>".$dataset['dep_time']."</td>";
		print "<td>".$dataset['flughafenid2']."&nbsp;"."</td>";
		print "<td>".$dataset['arr_time']."&nbsp;"."</td>";
		print "<td>".$dataset['days']."&nbsp;"."</td>";
        print "<td>".$dataset['via']."&nbsp;"."</td>";
		print "<td>".$dataset['hersteller_name']."&nbsp;"."</td>";
		print "<td><a href=\"FPS_buchung_fluginfo.php?flugnummer=".$dataset['flugnummer']."\">Info</a>&nbsp"."</td>";;  
		print "</tr>\n";
	}
	print "</td></tr>\n";
	print "</table>\n";
      }
else

	{
	   print "<table border=\"0\" cellspacing=\"2\" ".
	   "cellpadding=\"5\" WIDTH=\"100\%\" class=\"tableLine\">\n";

	   print "<tr><th>Flugnummer</th><th>Abflugzeit</th><th>Zielflughafen</th>";
	   print "<th>Ankunftszeit</th><th>Flugtage</th><th>Stops</th><th>Flugzeug</th><th>Info</th></tr>\n";


           {
	    print "<tr>";
	    print "<td>Flight allready booked</td>";;  
		print "<td>".$dataset['dep_time']."</td>";
		print "<td>".$dataset['flughafenid2']."&nbsp;"."</td>";
		print "<td>".$dataset['arr_time']."&nbsp;"."</td>";
		print "<td>".$dataset['days']."&nbsp;"."</td>";
        print "<td>".$dataset['via']."&nbsp;"."</td>";
		print "<td>".$dataset['hersteller_name']."&nbsp;"."</td>";
		print "<td><a href=\"FPS_buchung_fluginfo.php?flugnummer=".$dataset['flugnummer']."\">Info</a>&nbsp"."</td>";;  
		print "</tr>\n";
	}
	print "</td></tr>\n";
	print "</table>\n";
      }


   ?>


Außerdem soll in Zukunft (also jetzt noch nicht im Quellcode enthalten) das auch o geregelt werden, dass der jenige der schon einen Flug gebucht hat keinen weiteren mehr buchen kann.
 
item: mit diesem WHERE werden nur gebuchte Flüge ausgelsen
item: Was macht diese Zeile? if (gebucht=="F") du vergleichst da den String 'gebucht' mit dem String 'F'

Ergo:
1) das WHERE anpassen
SQL:
            WHERE   
                     (pilot_id = '" . mysql_real_escape_string($pilot_id) . "')
            AND
                     (`piloten`.`letzter_standort` = `Flugplan`.`flughafenid1`)
            ORDER BY `Flugplan`.`flughafenid2`  ASC LIMIT 0 , 100;";
2) den ganzen Ausgabeblock brauchst du nur einmal. Lass das if(gebucht == 'F') ganz weg. Lösche den ganzen else-Teil.
Jetzt hast du noch ein Ausgabeblock. Darin kannst du die Unterscheidung wie folgt machen
PHP:
        print "<td><a href=\"FPS_buchung_flug.php?flugnummer=".$dataset['flugnummer']."\">".$dataset['flugnummer']."</a>&nbsp"."</td>";;  

//Ersetzn mit
        if($dataset['gebucht'] == 'F'){
            print "<td>Flight allready booked</td>";
        }else{
            print "<td><a href=\"FPS_buchung_flug.php?flugnummer=".$dataset['flugnummer']."\">".$dataset['flugnummer']."</a>&nbsp"."</td>";;  
        }
 
Zuletzt bearbeitet von einem Moderator:
Sowas wie

PHP:
if (gebucht=="F")     {

kann nur schief gehen. gebucht wird hier als Konstante interpretiert, die sicherlich nicht belegt ist. Dann interpretiert PHP das als String -> schlägt fehl. Dass das ganze logisch keinen Sinn macht, lass ich mal außen vor...

Du musst dir nach deinem Query erst das Resultset holen und dann innerhalb deiner schleife Abfragen, ob das Feld auf 'F' steht oder nicht und dementsprechend die Ausgabe handeln.

Beispielsweise so:

PHP:
while ($dataset = mysql_fetch_array($ergebnis)) {
  if ($dataset['gebucht'] == 'F') {
    print 'bereits gebucht';
  } else {
    print $dataset['flugnummer']
  }
}
 
Habe das mal gemacht wie yaslaw gemacht hat:
PHP:
<?php 
$flugnummer =	 $row['flugnummer']; 
$abfrage = "SELECT
					 `piloten`.`letzter_standort` , 
					 `Flugplan`.`flughafenid1` , 
					 `Flugplan`.`dep_time` , 
					 `Flugplan`.`flughafenid2` , 
					 `Flugplan`.`arr_time` , 
					 `Flugplan`.`flugnummer`,
					 `Flugplan`.`days`,
					 `Flugplan`.`registrierung` ,
					 `Flugplan`.`hersteller_name`,
					 `Flugplan`.`gebucht` 
			FROM 
					 piloten, 
					 Flugplan
WHERE   
                     (pilot_id = '" . mysql_real_escape_string($pilot_id) . "')
            AND
                     (`piloten`.`letzter_standort` = `Flugplan`.`flughafenid1`)
            ORDER BY `Flugplan`.`flughafenid2`  ASC LIMIT 0 , 100;";
$ergebnis = mysql_query($abfrage)
   or die ("MySQL-Error: " . mysql_error());
       print "<td><a href=\"FPS_buchung_flug.php?flugnummer=".$dataset['flugnummer']."\">".$dataset['flugnummer']."</a>&nbsp"."</td>";;  

//Ersetzn mit
        if($dataset['gebucht'] == 'F'){
            print "<td>Flight allready booked</td>";
        }else{
            print "<td><a href=\"FPS_buchung_flug.php?flugnummer=".$dataset['flugnummer']."\">".$dataset['flugnummer']."</a>&nbsp"."</td>";;  
        
		print "<td>".$dataset['dep_time']."</td>";
		print "<td>".$dataset['flughafenid2']."&nbsp;"."</td>";
		print "<td>".$dataset['arr_time']."&nbsp;"."</td>";
		print "<td>".$dataset['days']."&nbsp;"."</td>";
        print "<td>".$dataset['via']."&nbsp;"."</td>";
		print "<td>".$dataset['hersteller_name']."&nbsp;"."</td>";
		print "<td><a href=\"FPS_buchung_fluginfo.php?flugnummer=".$dataset['flugnummer']."\">Info</a>&nbsp"."</td>";;  
		print "</tr>\n";
	
	print "</td></tr>\n";
	print "</table>\n";
      }
   ?>


Das kam raus. Alle anderen Flüge sollen aber auch sichtbar sein.

FPS...nov-23-001.jpg
(Updated)
 
item: Die Grafik funktioniert nicht
item: Hab ich nicht gesagt, dass du das while() entfernen sollst

Lehn dich mal zurück und geh die PHP-Doku durch wie man mysql-Resultate auswertet. In deinem Fall fehlt jetzt das Auslesen der Daten. $dataset wird nirgends gesetzt.

Irgendwie beschleicht mich das Gefühl, dass der Code nicht von dir ist und du eine Anpassung machen musst. Aber du hast sehr wenig Erfahrung mit PHP.

PS: Dein Code macht in der Headerzeile ein tr-Tag zuviel und am Ende schliesst du ein TD- und ein TR-Tag zuviel=
 
Zuletzt bearbeitet:
Ich habe noch mal gebastel, aber es klappt weiterhing nicht unten wiederein Pic!

PHP:
<?php 
$flugnummer =	 $row['flugnummer']; 
$abfrage = "SELECT
					 `piloten`.`letzter_standort` , 
					 `Flugplan`.`flughafenid1` , 
					 `Flugplan`.`dep_time` , 
					 `Flugplan`.`flughafenid2` , 
					 `Flugplan`.`arr_time` , 
					 `Flugplan`.`flugnummer`,
					 `Flugplan`.`days`,
					 `Flugplan`.`registrierung` ,
					 `Flugplan`.`hersteller_name`,
					 `Flugplan`.`gebucht` 
			FROM 
					 piloten, 
					 Flugplan
			WHERE   
			         (pilot_id = '" . mysql_real_escape_string($pilot_id) . "')
			AND 
			         (`Flugplan`.`gebucht` = 'F')
			AND
					 (`piloten`.`letzter_standort` = `Flugplan`.`flughafenid1`)ORDER BY `Flugplan`.`flughafenid2`  ASC LIMIT 0 , 100;";
$ergebnis = mysql_query($abfrage)
   or die ("MySQL-Error: " . mysql_error());
   
//Ersetzn mit
	   print "<table border=\"0\" cellspacing=\"2\" ".
	   "cellpadding=\"5\" WIDTH=\"100\%\" class=\"tableLine\">\n";

	   print "<tr><th>Flugnummer</th><th>Abflugzeit</th><th>Zielflughafen</th>";
	   print "<th>Ankunftszeit</th><th>Flugtage</th><th>Stops</th><th>Flugzeug</th><th>Info</th></tr>\n";
	   while ($dataset = mysql_fetch_array($ergebnis))
	   
        if($dataset['gebucht'] == 'F'){
            print "<td>Flight allready booked</td>";
        }else{
            print "<td><a href=\"FPS_buchung_flug.php?flugnummer=".$dataset['flugnummer']."\">".$dataset['flugnummer']."</a>&nbsp"."</td>";;  
        
		print "<td>".$dataset['dep_time']."</td>";
		print "<td>".$dataset['flughafenid2']."&nbsp;"."</td>";
		print "<td>".$dataset['arr_time']."&nbsp;"."</td>";
		print "<td>".$dataset['days']."&nbsp;"."</td>";
        print "<td>".$dataset['via']."&nbsp;"."</td>";
		print "<td>".$dataset['hersteller_name']."&nbsp;"."</td>";
		print "<td><a href=\"FPS_buchung_fluginfo.php?flugnummer=".$dataset['flugnummer']."\">Info</a>&nbsp"."</td>";;  
		print "</tr>\n";
	
	print "</td></tr>\n";
	print "</table>\n";
      }

   ?>

OLAF-PC-2010-nov-23-001.jpg
 
item: Die else-Klammer muss geschlossen sein
item: Sauberes Einrücken macht das ganze übersichtlich - Dann sieht man solche Fehler sofort
item: ein ; am Ende einer Zeile reicht
item: "text"."nochmehr Text" ist iene Sinnlose verknüpfunge
item: grosse Textpassagen kann man auch als HTML direkt ausgeben. Macht es einfacher lesbar
item: Hast du zu viele schliessende Tags in deiner Tabelle
item: Sauber formatiertes HTML lässt sich nachher in der Source-Ansicht besser lesen und man sieht schneller wo zu viele und wo zu wenige Tags sind.

Hier mal eine überarbeitet und ungetestete Version
PHP:
<?php 
$flugnummer =  $row['flugnummer']; 
$abfrage = "SELECT
                     `piloten`.`letzter_standort` , 
                     `Flugplan`.`flughafenid1` , 
                     `Flugplan`.`dep_time` , 
                     `Flugplan`.`flughafenid2` , 
                     `Flugplan`.`arr_time` , 
                     `Flugplan`.`flugnummer`,
                     `Flugplan`.`days`,
                     `Flugplan`.`registrierung` ,
                     `Flugplan`.`hersteller_name`,
                     `Flugplan`.`gebucht` 
            FROM 
                     piloten, 
                     Flugplan
            WHERE   
                     (pilot_id = '" . mysql_real_escape_string($pilot_id) . "')
            AND
                     (`piloten`.`letzter_standort` = `Flugplan`.`flughafenid1`)
            ORDER BY `Flugplan`.`flughafenid2`  ASC LIMIT 0 , 100;";
$ergebnis = mysql_query($abfrage) or die ("MySQL-Error: " . mysql_error());
?>
<table border="0" cellspacing="2" "."cellpadding="5" WIDTH="100%" class="tableLine">
    <tr>
        <th>Flugnummer</th>
        <th>Abflugzeit</th>
        <th>Zielflughafen</th>
        <th>Ankunftszeit</th>
        <th>Flugtage</th>
        <th>Stops</th>
        <th>Flugzeug</th>
        <th>Info</th>
    </tr>
<?php 
while ($dataset = mysql_fetch_array($ergebnis)) {
    if($dataset['gebucht'] == 'F'){
        $gebucht = 'Flight allready booked';
    }else{
        $gebucht="<a href='FPS_buchung_flug.php?flugnummer={$dataset['flugnummer']}'>{$dataset['flugnummer']}</a>&nbsp";
    }
    print "    <tr>\n";
    print "        <td>{$gebucht}</td>\n";
    print "        <td>{$dataset['dep_time']}</td>\n";
    print "        <td>{$dataset['flughafenid2']}&nbsp;</td>\n";
    print "        <td>{$dataset['arr_time']}&nbsp;</td>\n";
    print "        <td>{$dataset['days']}&nbsp;</td>\n";
    print "        <td>{$dataset['via']}&nbsp;</td>\n";
    print "        <td>{$dataset['hersteller_name']}&nbsp;"."</td>\n";
    print "        <td><a href='FPS_buchung_fluginfo.php?flugnummer={$dataset['flugnummer']}'>Info</a>&nbsp</td>\n";
    print "    </tr>\n";
}
?>
</table>
 
Zurück