Auslesen aus Textdatei

Extremniki

Erfahrenes Mitglied
Hallo Leute,
heut mal wieder ein kleines Problem:

Ich möchte aus einer Textdatei verschiedene Termine auslesen, die in einer Tabelle vernünftig angeordnet werden. Und nun zum Problem: Es wird immer nur der erste Eintrag wiedergegeben, zwar die Anzahl angezeigt wieviele Einträge vorhanden sind, aber eben diese dann immer verdoppelt, verdrei- oder vierfacht, evben sooft, wie viele einträge drin stehen.

Zum Verdeutlichen hier mal der Code:

<?
$log = "termine.txt";
$inhalt = file($log);//In array einlesen
$anzahl = count($inhalt);//erfast die anzahl der einträge
echo "es sind bisher $anzahl einträge im kalender <p>";

$i = 0;
for ($i; $i < $anzahl ;$i++)
{

$fp = fopen("termine.txt","r");
$inhalt = fgets($fp);
$eintrag = explode("|-|",$inhalt);

?>
<table width="373" border="0">
<tr>
<td width="102"><?echo"$eintrag[0]"?></td>
<td width="261"><?echo$eintrag[1]?></td>
</tr>
<tr>
<td width="102">&nbsp;</td>
<td width="261"><?echo$eintrag[2]?></td>
</tr>
</table>
<?
}

?>

Die Einträge in der Textdatei sehen so aus:

29.08.2002|-|Party|-|33647 Bielefeld|-|
16.08.2002|-|Fussball|-|33613 Bielefeld|-|
01.10.2002|-|Geburtstag|-|33739 Bielefeld|-|
16.02.2003|-|Schule|-|33824 Werther|-|

und so weiter.

Jedoch sieht die ausgabe dann so aus:

es sind bisher 4 einträge im kalender

29.08.2002 Party
33647 Bielefeld
29.08.2002 Party
33647 Bielefeld
29.08.2002 Party
33647 Bielefeld
29.08.2002 Party
33647 Bielefeld

(Die Stadtangabe ist natürlich in der passenden Spalte der Tabelle, kann ich hier so jetzt nicht darstellen)
Wie Ihr seht, immer nur der erste Eintrag, aber sooft, wie insgesammt Einträge vorhanden sind, verry BAD:rolleyes:

Kann mir da einer sagen, wo der Fehler sitzt?

Und vielleicht noch was, wie sortiere ich das nach Datum????

Danke, Gruß Nikolaj
 
also da sind schon fehler drin :) zb brauchst du die textdatei in der for schleife nicht jedesmal neu öffnen, das macht man vorher einmalig. ausserdem brauchst du $i nicht vor der for schleife zu initialisieren. for($i=0; $i<$anzahl; $i++). und das würd ich auch noch korrigieren... echo "<p>es sind bisher $anzahl einträge im kalender </p>"; aber das sind nur formfehler *g*

öffne die textdatei einmalig vor der for schleife. vieleicht gehts dann.
 
Zuletzt bearbeitet:
mhh, jetzt hast du mich ein wenig verwirrt, was soll ich jetzt konkret weglassen? das erste oder das zweite öffnen der datei? als ich zuerst nur die erste anweisung drin stehen hatte, da hat er mir zwar die anzahl angezeigt, jedoch nicht die einträge.
und wie meinst du das mit der echo-ausgabe der anzahl? gefällt dir das optisch nicht oder gehört der code anders?
 
nicht weglassen =) probier mal das...

PHP:
$fp = fopen("termine.txt","r"); 

for ($i=0; $i<$anzahl; $i++) { 
  $inhalt = fgets($fp); 
  $eintrag = explode("|-|",$inhalt); 
}

---

wenn du anzahl der einträge mit echo ausgibst, öffnest du ein paragraph tag am ende. sieht schon komisch aus =) mach mal...
echo "<p>es sind bisher $anzahl einträge im kalender</p>";

ok?
 
ha, ach das meintest du, ist mir ja überhaupt nicht aufgefallen:-) na da haste aber recht, dat macht echt keinen sinn. html mein ich auch zu beherschen!

das andere läuft jetzt auch sehr gut, dank dir dafür!

jetzt vielleicht noch der letzte feinschliff: wie sortier ich in der ausgabe die daten nach datum des termins?
 
also irgendwie blicke ich da nicht durch, so viel ahnung habe ich von php noch nicht, leider!

das ich das nach $eintrag[0] sortiren muss, ist mir schon irgendwie klar, nur die funktion sort sortiert ja alle elemente untereinander im array wenn ich das richtig verstanden habe.

weil das problem ist ja, dass in diesen terminkalender auch später termine eingetragen werden, die vom datum her irgendwo zwischen den schon vorhandenen einträgen sitzen. und die sollen ja dann auch in der reihenfolge richtig stehe und nicht erst am ende der ganzen liste.

ich habe mich hier auch schon durch sämtliche beiträge gewühlt, jedoch nicht das gefunden, was ich suche.
 
dann...

musst du die textdatei zu einem bestimmten zeitpunkt sortieren.
zb. wenn ein neuer eintrag hinzugefügt wurde. siehe hier (abschnitt: daten in der txtfile editieren) oder du sortierst "on the fly" *g* also beim auslesen und vor der eigentlichen ausgabe in html.
ok?
 
na ich glaub jetzt entfernen wir uns ein wenig von einer guten lösung.

gibt es keinen befehl, der vielleicht so aussieht:

sort (eintrag[0]);

???

da muss sicher noch hin, wie er das sortiren soll, ob auf- oder absteigend und so weiter. aber wie?
 
ich glaube du solltest $inhalt ordnen, da ja dort erstmal alles drin steht. denn $eintrag enthält ja nur die zeile die in drei teile aufgesplittet wurde.

sort($inhalt, SORT_NUMERIC);

aber dabei wird das array nur nach der ersten zahl sortiert oder so... hm.
willste doch nicht lieber eine DB benutzen? =)
 
Zurück