Gästebuch: Er zeigt immer den letzten eintrag am ende an !

wurstkuchen

Grünschnabel
Nabend...

wenn jemand in meine gaestebuch schreibt, dann schreibt er den letzten eintrag immer ans ende ... das is ja auch logisch, aber ich dachte ich haette das problem geloest... schautma bidde hier:

PHP:
<?php
if ($action == "add"){

if ($name == "" || $mail == "" || $text == ""){

echo "<b>Du hast nicht alle Felder ausgef&uuml;llt !</b><br>";
echo "Klicke auf den Backbutton deines Browsers";

}
else{

$fp = fopen("gaestebuch.txt","r+"); 


$inhalt= fread($fp,filesize("gaestebuch.txt"));


fclose($fp);

if ($www == ""){
$eintrag = "$inhalt<a href=\"mailto:$mail\">$name</a><br>$text";
}
else{
$eintrag = "$inhalt<a href=\"mailto:$mail\">$name</a><br><a href=\"$www\">$www</a>$text<hr><br><br>";
}

$datei = fopen("gaestebuch.txt","w+");
fputs($datei,$eintrag);
fclose($datei);


echo "Danke <i>$name</i> f&uuml;r deinen Eintrag";


}

}
else{
?>
</font>

                  <font face="Verdana" size="1"> <br>
                  <form action="eintragen.php?action=add" method="post">
                    <input type="text" name="name" size="24">
                    <font color="#FFFFFF">name<br>
                    <input type="text" name="mail" size="24">
                    e-mail<br>
                    <input type="text" name="www" size="24">
                    homepage</font><br>
                    <font color="#FFFFFF"><br>
                    Dein Eintrag:</font><br>
                    <textarea name="text" cols="37" rows="5"></textarea>
                    <br>
                    <input name="submit" type="submit" value="Abschicken">
                  </form>
                  </font> 
                  <?php
}
?>

und dann zeige ich das ganze mit dem befehl an,bzw werfe es aus:

PHP:
<?php include("gaestebuch.txt"); ?>

wo is das verdammte prob?
 
Original geschrieben von wurstkuchen

$inhalt= fread($fp,filesize("gaestebuch.txt"));
$datei = fopen("gaestebuch.txt","w+");
fputs($datei,$eintrag);
fclose($datei);

Du musst das file leer machen bzw. überschreiben und dann $eintrag, danach $inhalt reinschreiben... du machst hier ja gar nix mit $inhalt, außer es anlegen... so versteh ich's jedenfalls, lasse mich hier aber gerne eines besseren belehren.
 
$eintrag = "$inhalt<a href=\"mailto:$mail\">$name</a><br>$text";


es wird der neue eintrag nach wie vor hintendran gehängt....

$eintrag = "<a href=\"mailto:$mail\">$name</a><br>$text" . $inhalt;

versuch mal die version ...
 
Du könntest es auch ein bisschen komplizierter machen, in dem du die Datei, wenn du sie ausgeben willst, nicht einfach includest, sondern mit entsprechender trennzeichen berücksichtigung, ausliest, und per for-schleife in umgekeherter reihenfolge ausgibst (setzt voraus, dass du beim erstellen eines eintrages diese trennnzeichen dann mit reinschreibst, z.B. ...>name</a><br>|Trennzeichen|$text...
 
das mit den trennzeichen ist immer so ne sache... ich wette, irgendein bösartiger user versucht dann, dieses zeichen zu knacken. sicherer gehts einfach, indem du jeden eintrag auf eine neue zeile schreibst. mit file() (glaub war das) kannst du einen array erzeugen, der als inhalt alle zeilen der datei hat - dann brauchst du auch das trennzeichen nicht mehr. und dann machst du einfach:

PHP:
for($i=0;$i<count($array_guestbook);$i++)
{
  $j = count($array_guestbook) - $i;
  echo $array_guestbook[$j];
}

oder so ähnlich... must glaub ich den array-inhalt noch in string umwandeln, aber das dürfte ja nicht das problem sein.;)
 
dann muss man aber vorher (beim eintraqgen) alle zeilen umrüche in irgendwelche andere zeichen umwandelen (z.B. <br>)
 
erstma danke für eure beiträge...

was ich aber halt machen will, ist die datei öffnen, dann alles platt machen und dann den neuen eintrag rein und dann die alten drunter!

Gans einfach eigendlich, aber ich binne wurst .(

MFG
 
Zurück