• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Gästebuch ohne Mysql, also mit Textdatei.

xkons

Neues Mitglied
Hallo alle zusammen!
Ich arbeite im moment daran meine fähigkeiten mit dynamischen websites auszubauen, und benötige eure hilfe dabei ein Gästebuch ohne datenbank sondern mit textdatei, die dann ausgelesen wird, zu erstellen. Ich habe schoneinmal soetwas ähnliches versucht aber habs nichtmehr so drauf :S
Also hier ist die Idee:
Zuerst ist man auf „gaestebuch.html" dann geht man auf den link einen neuen beitrag zu erstellen und dann füllt man folgendes Formular aus:
HTML:
form action = "formularauswerten.php" method = "post">
        <table border="1">
              <tr>
            <td>Dein Name: <input name = "EingabeName"></td>
            </tr>
            <tr>
            <td>Dein G&auml;stebucheintrag: <input name = "EingabeEintrag"></td>
            </tr>
            <tr>
            <td><input type = "submit" value = "Teilen">
            <input type = "reset" value = "Nochmal von Vorn"></td>
            </tr>
         </table>
            </form>
Dann wird man mit dem „Teilen Button" zu „formularauswerten.php" weitergeleitet mit diesem Php Code:
PHP:
<?php
    echo "<b>".$_POST["EingabeName"]."</b><br/> \n";
    echo "<b><br>".$_POST["EingabeEintrag"]." </b><br/> \n";
    ?>    
    <a href="gaestebuch.html" style="text-decoration:none"><b>Zur&uuml;ck zum G&auml;stebuch</b></a>
Und nun möchte ich aber den Link der zurück zur gästebuch seite so modifizieren-falls es der link ist den man besonders schreiben muss- , dass die Eintrage nacheinander in einzelnen absätzen angezeigt werden.
Ich glaube dass man eben im Link sagen kann, dass der eintrag in einer textdatei gespeichert werden soll. und mit einem anderem befehl auf der gaestebuch seite angezeigt wird.
Ich hoffe ihr könnt mir folgen.
Stehe zu genaueren Auskünften zur Verfügung.
LG Kons
 
Hallo Xkons,

Ein Gästebuch basierend auf einer Textdatei zu 'bauen' ist halb so wild.

Das Eingabefeld hast du ja bereits.
In deiner 'formularauswerten.php' gibst du lediglich die Eingaben aus deinem Formular am Bildschirm wieder aus, speicherst sie jedoch nicht in einer Datei.

Anbei mal ein altes GB script das auf 2 Seiten aktuell sogar noch läuft. Besteht nur aus der gb.php und der data.gb in welcher die Einträge gespeichert werden.
PHP:
<?
$mode = $_GET["mode"];
$name = $_POST["name"];
$mail = $_POST["mail"];
$text = $_POST["text"];
$nname = $_GET["name"];
$fehler = $_GET["fehler"];
 
//// SPEICHERMODUS
if($mode == "w")
{
//FEHLER?
if(strlen(trim($name)) < 1)
{
$check=1;
echo "<meta http-equiv = \"refresh\" content = \"0; url = index.php?page=6&mode=n&cnt=$cnt&fehler=1\">\n";
}
if(strlen(trim($text)) < 1)
{
$check=1;
echo "<meta http-equiv = \"refresh\" content = \"0; url = index.php?page=6&mode=n&cnt=$cnt&fehler=2\">\n";
}
if($check<>"1" )
 {
$gb_file = file("data.gb"); $gb_file_size = sizeof($gb_file); $entry_id = explode("þ", $gb_file[$gb_file_size - 1]); $entry_id = $entry_id[0] + 1; // Neue ID herausfinden
if (strlen(trim($mail)) < 1) $mail = "ØnoØ";
$mailname = stripslashes($name); $mailtext = stripslashes($text);
$name = htmlspecialchars(stripslashes($name)); $datum = date("YmdHis");
$text = str_replace("\r\n","<br>",htmlspecialchars(stripslashes($text)));
$towrite = $entry_id . "þ$name" . "þ$mail" . "þ$text" . "þ$datum" . "þþþþþ\r\n";
echo $towrite;
//$fp = fopen("data.gb", "a"); flock($fp,LOCK_EX); fwrite($fp,$towrite); flock($fp,LOCK_UN); fclose($fp);
$fp = fopen("data.gb", "a"); fwrite($fp,$towrite); fclose($fp);
 // Hier beginnt der Mail-Abschnitt
  if ($mailq == "yes")
   {
   $mailfrom = "logfile";
   $mailmessage = "logfile new.user: $mailname. user say:\n$mailtext";
   mail($mailofwm, $mailfrom, $mailmessage);
   }
 // Hier endet der Mail-Abschnitt
 echo "<meta http-equiv = \"refresh\" content = \"0; url = index.php?page=6&mode=r&cnt=$cnt\">\n";
 ob_end_flush();
 }
}
?>
 
<br><br><br>
<table border="0" width="880px">
  <tr>
    <td width="4%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
    <td align="center">
 <!--Tabelle Überschrift 1-->
 <table border="0" cellpadding="0" cellspacing="0" width="100%">
   <tr>
     <td><font face="Tahoma" size="2"><b>Gästebuch</b><br<br></font>
     </td>
   </tr>
   <tr align="center">
     <td>
  <?
  if($mode == "n" || $mode == "w") echo "<a href=\"index.php?page=6&mode=r&cnt=$cnt\"><font face=\"Tahoma\" size=\"2\" color=\"#003300\" link=\"#003300\" vlink=\"#000000\">[Einträge ansehen]</font></a><br><br>";
  if($mode == "r") echo "<a href=\"index.php?page=6&mode=n&cnt=$cnt\"?><font face=\"Tahoma\" size=\"2\" color=\"#003300\" link=\"#003300\" vlink=\"#000000\">[Eintrag schreiben]</font></a><br><br><br>";
  ?>
   </tr>
 </table>

<?
//////////// EINTRAG VERFASSEN
if($mode == "n")
{
 if($fehler == 1) $fehler = "Bitte geben Sie einen Namen ein!";
 elseif($fehler == 2) $fehler = "Bitte geben Sie eine Nachricht ein!";

$form = "<table width=\"100%\"><tr><td align=\"center\"><font face=\"Tahoma\" size=\"2\" color=\"red\">$fehler</font></td></tr></table><br>" .
 "<table border=\"0\" width=\"100%\">" .
 "<td width=\"220px\">&nbsp;</td>" .
 "<td>" .
  "<form method=\"post\" action=\"index.php?page=6&mode=w&cnt=$cnt\">" .
   "<table border=\"0\" width=\"100%\">" .
   "<tr valign=\"top\">" .
    "<td width=\"70px\"><font face=\"Tahoma\" size=\"2\">Ihr Name</font></td>" . 
    "<td width=\"10px\" align=\"center\"><font face=\"Tahoma\" size=\"2\">:</font></td>" .
    "<td><input type=\"text\" name=\"name\"></td>" .
   "</tr>" .
   "<tr valign=\"top\">" .
    "<td width=\"70px\"><font face=\"Tahoma\" size=\"2\">Ihre eMail</font></td>" .
    "<td width=\"10px\" align=\"center\"><font face=\"Tahoma\" size=\"2\">:</font></td>" .
    "<td><input type=\"text\" name=\"mail\"></td>" .
   "</tr>" .
   "<tr valign=\"top\">" .
    "<td width=\"70px\"><font face=\"Tahoma\" size=\"2\">Ihr Eintrag</font></td>" .
    "<td width=\"10px\" align=\"center\"><font face=\"Tahoma\" size=\"2\">:</font></td>" .
    "<td><textarea name=\"text\"  rows=\"8\" cols=\"30\"></textarea></td>" .
   "</tr>" .
   "<tr>" .
    "<td></td>" .
    "<td width=\"10px\" align=\"center\">&nbsp;</td>" .
    "<td><br><input type=\"submit\" value=\"Eintrag speichern\"></td>" .
   "</tr>" .
   "</table>" .
  "</form>" .
  
 "</td>" .
 "</table>";
echo $form;
}
// GB LESEN  ///////SCRIPT NACH BUCH
elseif($mode == "r")
{
$gb_file = file("data.gb"); $gb_file_size = sizeof($gb_file); $numofentrys = explode("þ", $gb_file[$gb_file_size - 1]); $numofentrys = $numofentrys[0];
$seiten = ceil($gb_file_size / $numofentrys); $gb_file = array_reverse($gb_file);
 if (!$z) $z = 1; $y = $z * $numofentrys; $x = $y - $numofentrys;
 if ($y > $gb_file_size) $y = $gb_file_size;
 if ($gb_file_size > 0) {
    for ($i = 0; $i < $y; $i++)
  {
   $aktuell = explode("þ", $gb_file[$i]);
  // Beginn des Datumsformatieren
    $datum = $aktuell[4];
    $jahr = substr($datum,0,4);
    $monat = substr($datum,4,2);
    $tag = substr($datum,6,2);
    $stunde = substr($datum,8,2);
    $minute = substr($datum,10,2);
        $datum = "$tag.$monat.$jahr | $stunde:$minute";
      // Ende des Datumsformatieren
 
   ////  aktuell[2] = MAIL
   if($aktuell[2] == "ØnoØ") $aktuell[2] = "";
   else $aktuell[2] = "<a href=mailto:$aktuell[2] onfocus=\"this.blur()\"><img src=img/email2.gif height=9px width=15px border=0></a>";

   //echo $aktuell[0] . $aktuell[1] . $aktuell[2] . $aktuell[3] . $aktuell[4] . " " . $datum . "<br>";
   echo "<table class=\"tb\" width=\"90%\">" .
     "<tr><td width=\"100%\"><table class=\"txt\" width=\"100%\"><tr>" .
      "<td width=\"30px\" align=\"center\">$aktuell[0]</td>" .
      "<td width=\"400px\">$aktuell[2] $aktuell[1]</td>" .
      "<td width=\"140px\" align=\"right\">$datum</td>" .
     "</tr></table></td></tr><tr>" .
      "<td width=\"100%\">$aktuell[3]</td>" .
    "</tr></table><br>";
  }
 }
}
?>
</td></table>
 
Wofür im ersten Beitrag im Forumlar eine Tabelle?
Wofür im zweiten Beitrag eine Tabelle? Die Anpassbarkeit ist grauenhaft und semantisch ist es falsch..

Wenn du PHP lernen willst guck dir die entsprechenden Funktionen zu Dateioperationen an, anfangen kannst du hier: PHP: file - Manual
 
Ich hab ja nicht behauptet das mein Script perfekt ist, optisch passt es in die Seite und die funktionen die er braucht findet er darin.
Ich würde es selbst so auch nicht wieder verwenden aber ein Anstoss für nen blutgen anfänges ist es allemal.
 
@Seyonne: Also verstehe ich richtig, dass deine textdatei „data.gb" ist und „gb.php" die anweisung zum speichern des eintrages auf der textdatei ist?
Wenn ja: wie lautet dann der code auf meiner gästebuch seite um die textdatei auszulesen?
Vielen Dank
 
Ja, data.gb enthält sämtliche Einträge. Die gb.php hat den Modus 'w' wie write zum speichern der Einträge, den Modus 'n' wie new zum Verfassen/Eintragen von Einträgen sowie den Modus 'r' wie read um die Einträge aus der data.gb auszugeben.

Ich habe dir das script gepostet da mir anfangs auch fertige scripte halfen um die funktionen kennen und anwenden zu lernen.

zB hast du jetzt beispiele wie du Dateien öffnest oder in Strings nach bestimmten Teilen/Werten suchst.

Copy und paste bringt rein gar nichts.
 
Ich hab mein GB auch vor Jahren selbst geschrieben, um etwas PHP zu lernen und unabhängig vom Provider oder kostenlosen Lösungen zu sein. Meine 'Datenbank' besteht aus n+1 Dateien. Datei1 = Liste der Einträge, 1 Eintrag mit eindeutiger ID pro Zeile. Pro Eintrag dann eine Datei, Name = ID.htm, in dem ich den HTML-Formatierten Eintrag in einem DIV speichere. Dann kann man einstellen, wieviel Einträge angezeigt werden und ich lese dann diese Anzahl Zeilen aus der Liste und baue die HTML-Seite zusammen. So kann man im GB hin- und her blättern. Mit der Geschwindigkeit bin ich zufrieden, kannst ja mal schaun unter Rainer-Gästebuch
 
Dass ich hier einen an meine seite angepassten code bekomme fände ich auch nicht gerade berauschend...
Ich bin dir sehr dankbar für den hilfreichen Kommentar.
 
Wie meinst du das? Du kannst die Datei auch anders nennen..
Das kann dann zB so aussehen:

Peter;Hallo tolles gästebuch;20.4.2011
Hans;Das ist ein Test;10.4.2011
 
ja ich weiß aber welcher dateityp muss die textdatei sein, damit der php code den inhalt ausgeben kann?
 
Und nochwas: in dem oben genannten Php Code ist folgendes zu finden:
PHP:
//$fp = fopen("data.gb", "a"); flock($fp,LOCK_EX); fwrite($fp,$towrite); flock($fp,LOCK_UN); fclose($fp);
$fp = fopen("data.gb", "a"); fwrite($fp,$towrite); fclose($fp);
 echo "<meta http-equiv = \"refresh\" content = \"0; url = index.php?page=6&mode=r&cnt=$cnt\">\n";
 ob_end_flush();[PHP]
insgesamt glaube ich dass sich der php code von Seyonne auf eine einzige seite nämlich index.php bezieht und alles auf dieser seite stattfindet. In meinem Fall ist es jedoch so, dass ich einmal die seite gaestebuch.html und die seite gaestebucheintrag.php, mit link zu gaestebuch.html habe. Am Ende soll auf gaestebuch.html der inhalt von data.gb wie zum beispiel  im muster seyonne's php codes angezeigt werden. Und da ich meine, dass dieser abschnitt dazu da ist, den vo besuchern geposteten text auf der seite anzuzeigen, frage ich mich nun wie genau ich ihn umzuschreiben habe dass es sich auf gaestebuch.html bezieht.
 
Diese Datei wird vom Typ her eine reine Textdatei sein. Sie enthält die Daten die Du ihr gibst, in dem von dir über das PHP-Script vorgegebene Format. Wo und wie Du die Datei ausliest ist völlig dir überlassen. Du kannst sie in einer Datei einlesen und in der anderen zum darin Schreiben verwenden.
 
RTF halte ich für ungünstig. Das ist ein Markup/Ausgabe-Format, kein semantisch eindeutiges Speicherformat in dem Sinne.
 
Zurück
Oben