Hello,
Danke für deine Ideen!
Ich bin leider noch eher Newbie in PHP, und würde mir genügen, wenn mein Gästebuch immer zB 10 Einträge pro Seite auflistet und man zwischen den Seiten blättern kann, weil das ist finde ich sehr wichtig!
Was meinst du mit
- Sperren (Filtern) von Datensätzen
- Suchen von Datensätzen
Wenn Dir ein Eintrag nicht gefällt, kannst Du ihn löschen, oder aber auch nur die Anzeige sperren. Und filtern heißt eben, dass man nach bestimmten Einträgen suchen kann, und die dann in einer Seite (oder mehreren) dargestellt werden.
Das Blättern geht eigentlich relativ einfach, wenn man sich die Daten vernünftig bindet. Das macht man ja üblicherweise in Datensätzen. Die stehen entweder immer in einem mehrdimensionalen Array, oder noch verpackt in einer Zeile einer CSV-Datei.
Wenn Du jetzt blättern willst, legst Du erstmal eine Konstante fest, die die Anzahl der datensätez pro Seite angibt.
Dann gibst Du mit dem Anzeigeformular ein hidden-Feld mit aus, das die Nummer der aktuellen Seite enthält. Das Formular enthält außerdem einen submit-Button für rückwärts blättern und einen für vorwärts blättern.
Im Modus "Anzeigen" fragst Du nun ab, welcher Button übertragen wurde:
<?php
## Post-Daten auswerten
if (isset($_POST['mode']) and ($_POST['mode'] == 'anzeigen'))
{
## Datei öffen
## Datei readlock (LOCK_SH)
## Anzahl der Datensätze ermitteln ggf. mittels Satzgröße, Dateigröße
## oder bei Textdateien durch vollständiges Einlesen
if (isset($_POST['btn']['next']))
{
if ($pageno < $maxpage) $pageno++;
}
elseif(isset($_POST['btn']['prev']))
{
if ($pageno > 1) $pageno--;
}
## Aus $rec_per_page und $pageno den Dateibereich bestimmen
## Alle Datensätze holen bei Textdateien
## Nur die gewünschten Datensätze holen bei Random Access Dateien
## Datei schließen und freigeben
## Aus $rec_per_page und $pageno ermittelten Dateibereich
## als HTML-String $showpage berechnen
}
?>
<form .....>
<?php $showpage; ?>
<input type="hidden" name="pageno" value="<?php echo $pageno; ?>">
<input type="hidden" name="mode" value="<?php echo $mode; ?>">
<input type="submit" name="btn[prev]" value="zurück">
<input type="submit" name="btn[next]" value="weiter">
</form>
Wie das nun genau umgesetzt werden muss, hängt von der Art der Datei ab. Wenn Du in Textdateien oder CSV-Dateien mit wahlfreier Satzlänge speicherst (spart Speicherplatz auf der Festplatte), dann musst Du die Datei immer von vorne und mindestens bis hinter die gewünschte Seite einlesen. Wenn Du auch die Anzahl der Datensätze wisen willst, die insgesamt drinstehen, dann wahrscheinlich sogar ganz. Wenn Du mit einer Random-Access-Datei arbeitest (feste Satzlänge), dann kannst Du gezielt die gewünschten Datensätze einlesen. Das geth erstens schneller, braucht zweitens weniger Arbeitsspeicher und benötigt aber leider drittens mehr Speicherplatz auf der Festplatte. Sie ist aber am ehesten vergleichbar mit der Funktionalität einer Datenbank, da man beliebig Saätze darin austauschen oder überschreiben kann, oder den INHALT des Platzes für den Satz löschen und zur wiederverwendung bereithalten.
Nähere Erläuterungen, wenn Du dich für eine Fileart entschieden hast.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau