Supportnet Computer
Planet of Tech

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

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.

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)

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.
return unserialize(implode("", file($filename)));

Jetzt aber :)


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: