Tom: Datenbank für GB

Beitrag lesen

Hello,

hab nicht allzu viel erfahrung in PHP hab es aber trotzdem zu einem GB für meine Seite geschafft, doch nun hab ich das Problem, dass die Alten Einträge zuerst erscheinen, weil die neuen Einträge immer ans Ende der Datenbank geschrieben werden, wie kann ich das ändenr?

Da gibt es noch mehr Probleme!

1. Du hast einen Spammailer gebaut
2. Du bringst namens- und handlebasierte Dateifunktionen durcheinander
3. Du hast Dich nicht um den konkurrierenden Betrieb gekümmert (-> File locking)
4. Du kümmerst Dich nicht um den Kontext, in dem ausgegeben wird.
5. Du hast das Formular nicht benutzerfreundlich aufgebaut, -> Affenformular
   solange die Einträge nicht korrekt sind, werden sie dem Benutzer immer wieder
   vorgelegt, damit er nicht immer alles neu tippen muss.
6. Array-Element-Bezeichner sind Literale (Strings) oder Variablen, aber keine Konstanten
   Du hast die Häkchen vergessen, um ein Literal von einer Konstante zu unterscheiden
7. Du greifst auf Elemente desdes $_POST-Arrays zu, ohne vorher zu prüfen, ob diese auch
   vorhanden sind. Robots senden nicht immer alle Formular-Paramter zurück oder auch mal
   mehr, als ein human user. Das solltest Du nutzen für deinen eigenen Spamschutz

Das Problem mit der Reihenfolge der Ausgabe ist da das geringste.
Außerdem würde ich bei aller Großzügigkeit eine einzelne Datei nicht als Datenbank bezeichnen, womit wir aber bei deinem Thema sind. Wie macht man das, dass ältere Einträge zuerst ausgegeben werden?

Dafür gibt es verschiedene Konzepte.
Entweder man benutzt tatsächlich eine Datenbank und halst dieser das Problem auf. Das halte ich aber angesichts der Größe des Projektes (kleiner geht es fast nicht mehr) für übertrieben und außerdem lernst Du nichts dabei. Dass Du das aber willst, nehem ich stark an, denn sonst hättest Du ja ein fertiges Script benutzt.

Mach weiter so! :-)

Zweite Möglichkeit ist, ide Datei so aufzubauen, dass sie komplett in den Speicher passt. Dann kann man die Datensätze der Datei umsortieren nach jedem gewünschten Feld und erst dann ausgeben.

Dritte Möglichkeit, und die halte ich für die eleganteste für die Praxis und zum Lernen: man baut sich einen Index auf, in dem nur die Metadaten und die kumulierten Daten (Nummer, Poster, Zeit, Subject, Dateiname) drinstehen und legt den eigentlichen Eintrag als Datei im Dateisystem ab.

Das hat den Vorteil, dass der Index klein bleibt, einfach aufgebaut bleiben kann (Liste genügt) und daher auch wieder in den Speicher passt. Dort kann er bequem umsortiert werden und dann seiten- oder auch auszugsweise ausgegeben udn mit den dazugehörigen Dateien ergänzt werden.

Das hat den Vorteil, dass man auch bequem Antworten auf Einträge schreiben kann. Man muss dann nur im Index eine Zeile einfügen, was aber sehr leicht möglich ist, weil er ja in den Speicher passt.

Wenn Du diesen Weg gehen möchtest, können wir das gerne zusammen tun.

Eine vierte Möglichkeit ist es, immer eine neue Datei aufzumachen, in die der neue Eintrag geschrieben wird und die alte dann anschließend hinten anzuhängen. Dann wird die alte Datei gelöscht (oder umbenannt auf *.BAK und die neue umbenannt auf den Namen der alten.

Dabei muss man aber bei den unterschiedlichen Betriebssystemen (meistens Linux / manchmal Windows) auf die unterschiedliche Handhabung des Dateisystems achten. Es gibt große Unterschiede aufgrund des unterschiedlich voreingestellten Sperrverhaltens usw. der Systeme.

if (empty($_POST['name']) or empty($_POST['email']) or empty($_POST['eintrag']))
{
   echo "<p class="message">Bitte alle Felder ausfüllen!</p>";

So wäre es besser. Allerdings darf 0 (numerisch oder digital Null) kein gewünschter wert sein dabei, denn das würde ebenfalls unter "empty" fallen.

Liebe Grüße aus Syburg bei Dortmund

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de