Alex: Gästebuch - Programm

Hallo liebe PHP Profies.
Ich hoffe , dass mir jemand von euch helfen kann.
ich bin ein ziemlicher Anfänger in sachen programmieren, und ich wollte ein Programm erstellen, das mir mein Gästebuch ersetzen koennte.
Mit hilfe dieses Forums habe ich ein halbwegs Funktionierendes programm, aber nur halbwegs.
Der Eintrag zaehlär klappt nicht richtig, und die Eintraege werden nicht gespeichert.
Wenn mal schreibt und Ok drueckt, sieht es aus, als obt alles geklappt hat, aber wenn man nochmal auf die Seite Geht, sind die Einträge nicht mehr da.
Ihr koennt es selbst testen unter
http://mitglied.lycos.de/pandaemonium/

Hier ist der Script. Ich hoffe ihr blickt da durch.

Vielen Dank, Alex

<html>

<style type="text/css">
<!--
.author {  font-size: 10px; font-weight: bold; color: #FFFFFF}
.eintr { color: #DDDDDD }
.text { font-size: 12px }
.extra {font-size:16pt ; font face="Comic Sans MS; color :#00FFF4 }
-->
</style>

<body bgcolor="#FFFFFF">

<font face="Verdana" size="1px" color=#000099>

<?php

$g=file("gaestebuch.txt");

$max=799;  // 1 weniger setzen, weil beim Einlesen, nach loeschen 1 Eintrag zugefuegt wird
if(isset($g))
 {
  $eintraege = count($g);
  }
 else
     $eintraege = 0;

if($eintraege>$max)
 {
   for($q=$max;$q<$eintraege;$q++)
    {
     unset($data[$q]);
    }
 }

if (isset($_POST["text"]))
{

if (trim($_POST["text"])=="")
  {
   echo "<b>Du hast kein Text eingegeben !</b><br>";
   echo "Klicke auf den Backbutton deines Browsers";
  }

else
    {

$d=fopen("gaestebuch.txt","w+");       // Datei zum Anhängen öffnen
     if ($d)                                // Öffnen hat geklappt, $d ist ein Dateizeiger
   {
      $neu= "<table border=0 width=350>";
      $neu.= "<tr><td bgcolor=#00CCFF><div class=author>";
      $neu.="Von: ".htmlentities($name);
         $neu.= "</div></td></tr>";

$neu.="<tr><td bgcolor=#F4F4F4><div class=text>";
      $neu.=strtr(nl2br(htmlentities(trim($text))."<br>"),"\n\r"," ");
         $neu.="</div></td></tr></table><br><br>";
      $neu.="\n"; //Ablschluss

fputs($d,$neu); // neuen Eintrag speichern
      for ($i=0;$i<$max;$i++) // alte Einträge speichern
        {
         fputs($d,$g[$i]);
        }
       fclose($d);

array_unshift($g,$neu); // neuen Eintrag für den noch folgenden
                               // Code in $g einfügen
  }

}
}

// Auch im Weiteren gaestebuch.txt _nicht_ laden, die aktuellen
  // Daten stehen allesamt korrekt in $g.

$g=file("gaestebuch.txt"); //Auslesen

if ((! isset($_GET["start"])) || (! is_numeric($_GET["start"])))
   $start=0; // URL-Variable start ist nicht angegeben oder keine Zahl, Standardwert einsetzen
 else
   $start=$_GET["start"]; // URL-Variable start ist brauchbar, Wert übernehmen

if ((! isset($_GET["$eintraege_pro_seite"])) || (! is_numeric($_GET["$eintraege_pro_seite"])))
   $eintraege_pro_seite=10; // URL-Variable start ist nicht angegeben oder keine Zahl, Standardwert einsetzen
 else
   $eintraege_pro_seite=$_GET["$eintraege_pro_seite"]; // URL-Variable start ist brauchbar, Wert übernehmen

for ($i=$start;$i<$start+$eintraege_pro_seite;$i++)
   {
    if (isset($g[$i])) // existiert überhaupt etwas an $g[$i]?
      {
       $z=$i+1;
       echo "<center><div class=eintr>Eintrag $z.</div>$g[$i]";    // ja, eintrag ausgeben
       echo "\n";      // kosmetik, ein bißchen luft tut immer gut
      }
   }

if ($start !=0)

{
     echo "<a href="index.php?";
     echo "start=".($start-$eintraege_pro_seite);
     echo "&eintraege_pro_seite=".$eintraege_pro_seite;
     echo ""><center>zurück</a>";
    }

else
    {
     echo "<center>zurück ";
    }

if ($start+$eintraege_pro_seite<sizeof($g))
    {
     echo "<a href="index.php?";
     echo "start=".($start+$eintraege_pro_seite);
     echo "&eintraege_pro_seite=".$eintraege_pro_seite;
     echo ""><center>Weiter</a>";
    }
else
    {
     echo "<center>weiter";
    }

echo "<br><br><center>$eintraege Einträge";
?>

<br><br>

<div class=extra>
<center>Eintragen<br></div>

<form action="index.php" method="post">
  Dein Name: <center>
  <input type="text" name="name" size="24" maxlength="24">
  <br><br><br>

Dein Eintrag:<br>

<center><textarea name="text" cols="35" rows="5"></textarea><br>
<input type="submit" value="Abschicken">

</form>
</font>
</body>

</html>

  1. Das ist eine Ergänzung :
    Anscheinend wenn man einen Eintrag gemacht hat, und eine andere Seite eingeschaltet hat, und dann wieder zurückgekehrt ist, dann sieht man den Eintrag nicht. Sobald man aber auf Aktualisieren klickt ist der Eintrag wieder da.

    versucht es mal :

    - Eintrag auf  "http://mitglied.lycos.de/pandaemonium/" machen
     - weggehen, auf die Startseite z.B
     - zurueck auf "http://mitglied.lycos.de/pandaemonium/" gehen

    hin und zurueckgehn kann man sooft man will, man sieht den letzten Eintrag nicht.

    - auf http://mitglied.lycos.de/pandaemonium/  gehen und
       aktualisieren klicken

    Danach erscheint der letzte Eintrag bei mir.
    Sehr komisch.

    1. Bei mir gehts ohne Probleme. Ich tipp den Text ein, klicke auf Abschicken und schon ists drinne! Soweit erstmal ;)

      1. versuch mal von der Seite wegzugehn, und wieder zurueck.
        Ob es dann immer noch zu sehn ist ?

        1. versuch mal von der Seite wegzugehn, und wieder zurueck.
          Ob es dann immer noch zu sehn ist ?

          Jup es bleibt drin ;)

          1. Ich meine wenn du von der Seite weggehst, und dann wieder zurueck.
            Tipp eine andere Internetadresse ein, und dann
            http://mitglied.lycos.de/pandaemonium/
            Es kann doch nicht sein dass nur mein PC so blöd ist
            ( oder liegt das an mir ?! )

            1. Ach die blöde Bug ist mir eigentlich egal. Dann soll es von mir aus so sein. Ich habe ein unterprogramm geschrieben, sowas wie die adminrechte fuer das gästebuch. Damit man Nachrichten loeschen kann.
              Das loeschen klappt aber nicht . Warum?

              Ich glaube das programm ist ziemlich einfach, weil sogar ich da ziemlich gut durchblicke.

              Dankscheschoen

              <?php

              $pass="abc";

              if (isset($_POST[nummer]) AND isset($_POST[text]))

              {
               ?>
               $nummer=$_POST[nummer];
               $g=file("gaestebuch.txt");
               $d=fopen("gaestebuch.txt","w+");
               unset($g[$nummer]);
               fclose($d);
               <?php
                     }

              if (isset($_POST[passwort]))
              {

              if ($_POST[passwort]==$pass)
                    {
               ?>
               <form action="pass.php" method="post">
               <input type="text" name="nummer" size="5" maxlength="5">  //Nummer des Eintrages
               <input type="submit" value="Loeschen">
               </form>
               <?php
                    }
                else
                    {
               ?>
               <b>FALSCH<b>
               <?php
                    }
              }

              else
                     {
               ?>
               <form action="pass.php" method="post">
               <input type="text" name="passwort" size="24" maxlength="24">
               <br>
               <br>
               <input type="submit" value="Abschicken">
               </form>
               <?php
                     }
              ?>
              </body></html>

              1. Hallo alex,

                $nummer=$_POST[nummer];

                ich glaube das in den eckigen Klammern muss in Anführungszeichen stehen.

                $g=file("gaestebuch.txt");
                 $d=fopen("gaestebuch.txt","w+");
                 unset($g[$nummer]);
                 fclose($d);

                wie soll hier was gelöscht werden? erst liest du die Datei in einen Array ein, dann öffnest du die Datei, anschließend löschst du ein Element des Arrays und machst die Datei dann wieder zu. btw: ich vermute mal, dass du so den falschen Eintrag löschen würdest, da die arrays mit 0 anfangen und nicht mit 1.
                zum Löschen könntest du es mal etwa so versuchen (deine Version etwas ergänzt):
                $loschnummer = $nummer-1;
                $g=file("gaestebuch.txt");
                unset($g[$loeschnummer]);
                $neuerinhalt = implode("\n",$g);
                //evtl musst du noch \n\n durch \n ersetzen:
                str_replace("\n\n","\n",$neuerinhalt)
                $d=fopen("gaestebuch.txt","w+");
                fwrite($d,$neuerinhalt);
                fclose($d);

                Grüße aus Nürnberg
                Tobias

                1. also ich habe meinen Fehler verstanden, ich habe vergessen die Änderung in die Datei gaestebuch.txt zu schreiben.
                  Ich habe den Script geändert, es hat aber trotzdem keine Wirkung gebracht.

                  das passwort findest du unter
                  http://mitglied.lycos.de/pandaemonium/pass.php
                  und das Gästebuch unter
                  http://mitglied.lycos.de/pandaemonium/

                  Hier ist noch mal der Script.

                  Danke, alex

                  <?php

                  $pass="abc";

                  if (isset($_POST[nummer]) AND isset($_POST[text]))

                  {
                   ?>
                   $nummer=$_POST["nummer"];
                   $g=file("gaestebuch.txt");
                   $loeschnummer=$nummer-1;
                   unset($g[$loeschnummer]);
                   $neuerinhalt=$g;
                   $neuerinhalt = implode("\n",$neuerinhalt);
                   str_replace("\n\n","\n",$neuerinhalt);
                   $d=fopen("gaestebuch.txt","w+");
                   fwrite($d,$neuerinhalt);
                   fclose($d);
                   <?php
                         }

                  if (isset($_POST[passwort]))
                  {

                  if ($_POST[passwort]==$pass)
                        {
                   ?>
                   <form action="pass.php" method="post">
                   <input type="text" name="nummer" size="5" maxlength="5">  //Nummer des Eintrages
                   <input type="submit" value="Loeschen">
                   </form>
                   <?php
                        }
                    else
                        {
                   ?>
                   <b>FALSCH<b>
                   <?php
                        }
                  }

                  else
                         {
                   ?>
                   <form action="pass.php" method="post">
                   <input type="text" name="passwort" size="24" maxlength="24">
                   <br>
                   <br>
                   <input type="submit" value="Abschicken">
                   </form>
                   <?php
                         }
                  ?>
                  </body></html>

                  1. Huhu Alex

                    nein, ich habe den Thread nicht wirklich gelesen, aber hier springt
                    mir gleich ein kleiner Schnitzer ins Auge

                    <?php

                    1. hier wechselst Du in den PHP-Bereich

                    $pass="abc";

                    if (isset($_POST[nummer]) AND isset($_POST[text]))

                    {
                     ?>

                    2. hier verlässt Du ihn wieder

                    $nummer=$_POST["nummer"];
                     $g=file("gaestebuch.txt");
                     $loeschnummer=$nummer-1;
                     unset($g[$loeschnummer]);
                     $neuerinhalt=$g;
                     $neuerinhalt = implode("\n",$neuerinhalt);
                     str_replace("\n\n","\n",$neuerinhalt);
                     $d=fopen("gaestebuch.txt","w+");
                     fwrite($d,$neuerinhalt);
                     fclose($d);

                    <?php

                    3. hier beginnt wieder einen PHP-Abschnitt
                    die Zeilen zwischen 2. und 3. sind kein HTML oder?

                    [...]

                    vielleicht bringt Dich das weiter ...

                    Viele Grüße

                    lulu

                    --
                    bythewaythewebsuxgoofflineandenjoytheday
  2. Es ist da!!

    Also bei mir erscheint der Eintrag. Auch beim Aktualisieren und oder zwischenzeitlichen Seitenwechsel.

    Gruß Marc