Einfaches Gästebuch txt mit Blattfunktion

free123

Mitglied
Hallo zusammen eine kurze frage betreffend eines einfachen Gästebuchs was auf txt basiert undzwar würde ich gerne die Seiten auf mehrere Seiten verteilen Beispiel $maxanzahl="6"; kann mir jemand weiterhelfen? Da die Einträge jetzt grösser geworden will ich eine art blattfunk. einbauen

hier mal der Code von der config.php
PHP:
<?

$deinname = $_POST["deinname"];
$deintext = $_POST["deintext"];
$mail = $_POST["mail"];
$homepage =   $_POST["homepagep"];
$betreff = $_POST["betreff"];


$date = getdate();


$dat="$date[mday].$date[mon].$date[year]";


$zeit="$date[hours]:$date[minutes]:$date[seconds]";


$daten="Name:$deinname (<a href='mailto:$mail'>mail</a>; <a href='$homepage'target='_blank'>Homepage</a>)
<br> schrieb am $dat um $zeit:<br>
$send Betreff:$betreff<p> $deintext<br><hr>  ";

$datenbank = "daten.dat";
$datei = fopen($datenbank,"a");
fwrite($datei, $daten);
?>

<meta http-equiv="refresh" content="4; URL=index.php">

<br><a href="index.php">Der Eintrag war erfolgreich<br></a>

Hier die index.php
PHP:
<form method="post" action="config.php"> 
<font face="arial" size="1">
<div align="center">
<center>
<table border="0" width="41%">
<tr><td width="40%" align="center">Name :</td>
<td width="60%" align="center"><input type="deintext" name="deinname" maxlength="50"></td></tr><!-- Ihr Name: -->
<tr><td width="40%" align="center">Email :</td>
<td width="60%" align="center"><input type="deintext" name="mail" maxlength="100"></td></tr><!-- Email:  -->
<tr><td width="40%" align="center">Homepage :</td>
<td width="60%" align="center"><input type="deintext" name="homepage" maxlength="100" value="http://"></td></tr><!-- Homepage: -->
<tr><td width="40%" align="center">Betreff</td>
<td width="60%" align="center"><input type="deintext" name="betreff" maxlength="100"></td></tr> <!-- Betreff: -->
<tr><td width="40%" align="center"></td>
<td width="60%" align="center"></td></tr>
<tr><td width="40%" align="center"></td>
<td width="60%" align="center"></td></tr>
<tr><td width="40%" align="center"></td>
<td width="60%" align="center"></td></tr>
<tr><td width="40%" align="center"></td>
<td width="60%" align="center">
<textarea name="text" rows=4 cols="20" ></textarea>
<div align="center"><table border="0" width="100%">
<tr><td width="100%"><p align="center"><input type="submit" name="Button" value=" Gästebuch eintragen"></td>
</tr></table></div></font>
</td></tr></table></center></div></form>

Habe da mal eine Funktion zusammen gestellt die in etwa so aussieht nur weiss ich nicht genau wie ich Funk* einbinden soll

PHP:
<?
       $maxanzahl="6";
        
	if(!file_exists($datei)) // Prüfen ob Eintrag vorhanden oder existiert
		echo "<center><p>Kein Eintrag vorhanden</p></center>";
	else
	{
        $indextemp=array();
		$index=file($datei);  // Die Einträge werden aufgerufen

        $seitenzahl=ceil(count($index)/$maxanzahl);
		if(!$page)
			$page=1;$startwert=($page*$maxanzahl)-$maxanzahl;
		if($page<$seitenzahl)
					{
		$endwert=($page*$maxanzahl)-1;
		}
			else
	{
		$endwert=count($index)-1;

    }

	# Schreiben der Datensatzzahlen und der seitennavigation
	echo "Gesamt Einträge:&nbsp;".count($index)."<br>";
	echo"Seitenanzahl:&nbsp;";

    for($i=1;$i<=$seitenzahl;$i++)

    {

    if($i!=$page)

	echo "<a href=".$PHP_SELF."?page=".$i.">".$i."</a>&nbsp;&nbsp;";

    else

		echo $i."&nbsp;&nbsp;";
	}
		echo "&nbsp;von&nbsp;".$seitenzahl."</span></p></center>";

wer kann mir weiterhelfen
 
Na das sieht doch so weit schon mal ganz gut aus. Als nächstes müsstest du jetzt unten eine Schleife anhängen, die Einträge zwischen $startwert und $entwert ausgibt.

PHP:
for ($i = $startwert; $i < $endwert; $i++) {
  echo $index[$i]; // in $index ist ja immer noch der Dateiinhalt
}

Das Problem an der Sache ist nur, dass die Einträge nicht immer gleich lang sind. Sie scheinen ja immer mindestens 3 Zeilen zu haben, sobald allerdings jemand ein paar Zeilenumbrüche einfügt können das auch mehr werden.

Und da ist im Moment auch noch ein kleiner Fehler in deinen Berechnungen: Die Datei wird mit file() eingelesen, wird also zeilenweise in einem Array gespeichert. Mit count($index) bekommst du dann die Anzahl der Zeilen und verwendest diese dann als Anzahl der Einträge im Gästebuch.

Lösungsmöglichkeiten:

1. Du rechnest am Anfang nicht mit $maxanzahl, sondern mit $maxanzahl * 3, dann hast du theoretisch die Anzahl der Einträge. Allerdings stimmt die Zählung nicht mehr, sobald jemand in einem Eintrag Zeilenumbrüche einfügt.

2. Du sorgst dafür, dass wirklich in jeder Zeile der Datei nur ein Eintrag steht. Dafür musst du beim Speichern die Anweisung $daten = ... in eine Zeile schreiben und zusätzlich mit nl2br() oder ähnlichen Funktionen die Zeilenumbrüche aus dem Eintrag in <br> umwandeln. Meiner Meinung nach auch nicht ideal, weil man Daten generell eher unformatiert speichern sollte, kann aber in diesem Fall gut funktionien, weil du ja sowieso schon HTML in der Datendatei stehen hast.

3. Du trägst zwischen zwei Einträgen in der Datei eine Zeile zur Trennung ein. In der sollten dann Zeichen stehen, die normalerweise in keinem Beitrag vorkommen, damit du diese Trennungszeilen eindeutig erkennen kannst. Am Anfang müsstest du dann die Datei ein mal nach diesen Trennungszeilen durchsuchen, damit du die Anzahl der Einträge hast und dann die Schleife zur Ausgabe auch noch etwas umbauen, damit immer nur von einer Trennungszeile bis zur nächsten das $i um 1 erhöht wird. Etwas aufwändiger, aber auch möglich, außerdem könntest du mit solchen Trennzeichen oder -zeilen die gesamte Datendatei so sauber halten, dass du dort kein HTML mehr benötigst und das nur in der Ausgabeschleife alles entsprechend formatierst.

Also wenn du etwas mehr Zeit dafür hast und das ordentlicher aufbauen möchtest, kann ich dir gerne noch ein Beispiel zum 3. Vorschlag schicken, aber das einfachste wäre wohl der 2.
 
Zurück