Zum Inhalt springen

PHP Frage


Empfohlene Beiträge

Geschrieben

Hallo,

In unserem Informatikkurs in der Schule arbeiten wir gerade an einer Homepage. Jeder bekam die Aufgabe, eine Homepage zu gestalten.

 

Nun habe ich ein kleines Problem. Ich möchte gerne auf meiner Startseite als 'plus' die Special Movements von Zürich anzeigen. Dazu habe ich eine Textdatei erstellt, in die ich diese Movements eintrage.

Per PHP wird das ganze dann in einer Tabelle ausgegeben.

 

Nun zur Frage:

 

            
             <table width="440" border="0">
   	<tr>
   		<td width="440">Time</td>
   		<td width="440">To</td>
   		<td width="440">Airline</td>
   		<td width="440">Registration</td>
   		<td width="440">Type</td>
   	</tr><?
//Get data
$data = file_get_contents('sm/zrhmovementsdep.txt');
//Split data into rows
$row = split("\n",$data);
$show = array();
	foreach($row as $rows) {
	$field = split(":",$rows); 
	?><tr>
   		<td bgcolor="#CCCCCC"><? echo $field[0]; ?></td>
   		<td bgcolor="#CCCCCC"><? echo $field[1]; ?></td>
   		<td bgcolor="#CCCCCC"><? echo $field[2]; ?></td>
   		<td bgcolor="#CCCCCC"><? echo $field[3]; ?></td>
   		<td bgcolor="#CCCCCC"><? echo $field[4]; ?></td>
		</tr>
   	<? array_push($show, $field); } if(count($show) == 0) { ?><tr>
   	  <td colspan="5">No flights found</td>
   	  </tr>
   	<? } ?>
</table>

 

Wie Ihr in dem Code erkennen könnt, möchte ich bei einer leeren Textdatei ' No flights found' anzeigen lassen. Leider habe ich bisher ohne Erfolg an den Variablen und dem Code gespielt, der gewünschte Text wird auch bei einer leeren Textdatei nicht angezeigt.

 

Falls jemand einen Ansatz zur Lösung des Problems hat, bitte melden :)

 

Grueß Pierre

Geschrieben

Dein $data enthält bei leerer oder nicht vorhandener Datei einen leeren String.

Wenn du dann $row = split("\n", $data); aufrufst, wird $row ein Array mit einem Element zugewiesen, vergleiche:

http://de2.php.net/manual/de/function.split.php

Kommt pattern zum Beispiel überhaupt nicht vor, wird ein Array mit nur einem Element zurückgegeben. Das gilt natürlich auch, wenn string leer ist.

 

Demnach läuft dein foreach(...) immer mindestens ein mal durch und ruft array_push(...) mindestens ein mal auf (und schreibt in $show ein Array aus einem leeren String rein).

count($show) liefert demnach 1 zurück und ist != 0, daher auch keine Fehlerausgabe.

 

:)

 

Um die Fehlermeldung abzuprüfen würde ich statt eines $show-Arrays zu erstellen (außer du brauchst es dann noch für andere Zwecke) lieber abfragen, ob

<? strlen( trim( strtr($data, "\n", "") ) ) == 0 ?>

ist.

Das strtr ersetzt ggf. vorhandene leerzeilen, das trim entfernt alle Leerzeichen vorne und hinten und erst darauf wird dann die Länge abgefragt. Sonst bekämst du ein problem, wenn du eine Datei hast wo mehrere Zeilenumbrüche und Leerzeichen drin sind, aber kein Inhalt. :)

Geschrieben

Danke für die Antwort, die Message wird nun angezeigt, jedoch auch, wenn die Textdatei einen Eintrag enthält :S

Geschrieben

Um die Fehlermeldung abzuprüfen würde ich statt eines $show-Arrays zu erstellen (außer du brauchst es dann noch für andere Zwecke) lieber abfragen, ob

<? strlen( trim( strtr($data, "\n", "") ) ) == 0 ?>

ist.

Das strtr ersetzt ggf. vorhandene leerzeilen, das trim entfernt alle Leerzeichen vorne und hinten und erst darauf wird dann die Länge abgefragt.

 

Hallo Viktor :)

 

Nochmals Danke für deine Mühe.

Setzte ich nun den oben erwähnten Befehl ein, erhalte ich ein Error:

 

Parse error: syntax error, unexpected '{' in ..../www/photography/index.php on line 102

 

Ist das ' als Zeichen gesehen oder hat das eine bestimmte Funktion? Ich kann kein ' erkennen. :(

Geschrieben

Dazu müsste man den Code in Zeile 102 auch sehen. Du hast eine geschweifte Klammer an einer Stelle, wo keine hingehört.

Die Hochkommas (') sind teil der Fehlermeldung und schließen nur den Teil ein, der offenbar den Fehler enthält - deinem Fall die geschweifte Klammer in Zeile 102.

Geschrieben
Dazu müsste man den Code in Zeile 102 auch sehen. Du hast eine geschweifte Klammer an einer Stelle, wo keine hingehört.

Die Hochkommas (') sind teil der Fehlermeldung und schließen nur den Teil ein, der offenbar den Fehler enthält - deinem Fall die geschweifte Klammer in Zeile 102.

 

Hallo Viktor,

Ah verstehe, habe mal die überflüssige Klammer gelöscht, nun erhalte ich folgendes:

unexpected $end [...] line 191

 

Line 191 gibt es nicht. Ich denke, es hängt mit diesem hier zusammen:

 

        <? strlen( trim( strtr($data, "\n", "") ) ) == 0  ?><tr>
         <td colspan="5">No flights found</td>
         </tr>
       <? } ?> 

 

Um die Nachricht anzuzeigen, muss sie doch irgendwie mit eingebunden werden ( dazu die Klammern, richtig? ) Lösche ich nun die letzte Klammer zwischen

<? ?>

, erhalte ich ebenfalls den Fehler.

Geschrieben

Öh, der Ausdruck war ja nur ein Beispiel, kein fertiger code zum copy+paste ;)

 

Der Ausdruck kommt in dein if (...), welches die Fehlermeldung einblenden soll, falls der Ausdruck true zurückliefert...

Beispiel:

<? 
  if( strlen( trim( strtr($data, "\n", "") ) ) == 0 ) 
  { echo "Errortext"; } 
?>

 

Aber wenn es bei dir anders schon funktioniert, versteif dich nicht auf meinen Vorschlag.

Geschrieben

Hi Viktor,

Jau bestens, hat nun wunderbar geklappt :)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...