Supportnet / Forum / Anwendungen(Java,C++...)
PHP - Einträge in .txt-Datei editieren u. löschen
Frage
Um mal ein paar Einblicke in PHP zu bekommen habe ich mir ein kleines Newssystem zusammengecodet. Bisher kann ich auf einer Admin-Seite neue Beiträge eingeben, die in eine .txt-Datei geschrieben und beim Aufruf in eine Webseite eingebunden werden. Soweit, so gut. Nun aber habe ich Probleme mit der Umsetzung weiterer Features. Zum einen sollte die Möglichkeit bestehen, bestehende Einträge zu ändern und ggf. zu löschen. Darüber hinaus sollen nur die letzten zehn 10 Einträge gespeichert und auf der Webseite angezeigt werden. Wie ist das zweckmäßig umzusetzen?
Antwort 1 von semi
Du mußt alles auslesen und die Datei neu überschreiben, um etwas zu löschen oder zu ändern.
Gruß,
Michael
Gruß,
Michael
Antwort 2 von sutadur
Das hab ich befürchtet ... danke, aber geht's etwas detailierter? Datei auslesen ist kein Problem, aber wie trenne ich z.B. die letzten 10 Einträge vom Rest, also wie werden die ältesten entfernt?
Antwort 3 von Floooooo
Speichere doch die letzten 10 Einträge in 10 verschiedenen Dateien, wie wärs?
Dann kann jeweils die älteste mit dem neuesten Eintrag überschrieben werden.
Oder, zum Tipp von Semi: Du liest alle Einträge in ein Array, sortierst das nach Datum und schreibst entsprechend nur die 10 neuesten in die Datei zurück.
Dann kann jeweils die älteste mit dem neuesten Eintrag überschrieben werden.
Oder, zum Tipp von Semi: Du liest alle Einträge in ein Array, sortierst das nach Datum und schreibst entsprechend nur die 10 neuesten in die Datei zurück.
Antwort 4 von semi
Wenn Du dich noch für kein spezielles Format der Ausgabedatei entschieden hast, dann würde ich Dir die Funktionen serialize und unserialize empfehlen.
z.B.
(Daten aus Datei lesen)
Die News selbst würde ich als Objekte bzw. Klassen definieren
Eine View-Klasse (z.B. NewsEntryView), die ein Objekt vom Typ NewsEntry formatiert ausgeben kann (als Tabellenzeile, Combo-Zeile etc.)
Das gleiche dann auch für die komplette Liste.
Gruß,
Michael
z.B.
(Daten aus Datei lesen)
function readData($filename) {
if(file_exists($filename))
return unserialize(file($filename));
else
return array(); // hier statt array new LIFO(); oder ähnliches
}
(Daten in Datei schreiben)
function writeData($filename, $data) {
$file = fopen($filename, "w");
fputs($file, serialize($data));
fclose($file);
}
Die News selbst würde ich als Objekte bzw. Klassen definieren
class NewsEntry {
var $id;
var $headline;
var $text;
...usw
function NewsEntry($id, $headline, $text) {
$this->id = $id;
$this->headline = $headline;
$this->text = $text;
}
function getId() {
return $this->id;
}
function setId($id) {
$this->id = $id;
}
...usw mit anderen Getter-/Setter-Methoden
}
Dann noch die Liste der News als eine Klasse (LIFO mit 10 Einträgen)Eine View-Klasse (z.B. NewsEntryView), die ein Objekt vom Typ NewsEntry formatiert ausgeben kann (als Tabellenzeile, Combo-Zeile etc.)
Das gleiche dann auch für die komplette Liste.
Gruß,
Michael
Antwort 5 von semi
Ups! Kleiner Fehler. Das Lesen sollte so aussehen.
Jetzt aber :)
return unserialize(implode("", file($filename)));
Jetzt aber :)