Oliver: Gästebuchscript ->auslesen und neu schreiben

Hallo Ihr Lieben,

in der Hoffnung doch einmal php zu verstehen, habe ich heute mal ein Gästebuch-Tutorial durchgearbeitet. Die Zusammenhänge hab ich sogar zum grössten Teil verstanden (wobei ich erst nochmal nachschauen muss für was das ein oder andere zeichen in php steht.
Aber zu meinem eigentlichen Problem:

Das Tutorial geht eigentlich extra auf den Punkt ein, an dem das auslesen und schreiben der gaestebuch.txt erfolgt.
Aber komischerweise löscht das script die alten einträge doch, ohne sie auszulesen und mit dem neuen eintrag zu verbinden.

Hier mal das Script, ich bin lkeider noch lange nicht soweit das ich den Fehler selbst erkenne :(

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

if ($name == "" || $mail == "" || $text == ""){
echo "<b>Du hast nicht alle Felder ausgefü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ür deinen Eintrag";

}

}
else{
?>
<font face="Verdana" size="1">
<b>Eintragen in mein Gästebuch</b><br>
<form action="eintragen.php?action=add" method="post">
Dein Name: <input type="text" name="name" size="24"><br>
E-Mail: <input type="text" name="mail" size="24"><br>
Homepage: <input type="text" name="www" size="24"><br>
<br>
Dein Eintrag:<br>
<textarea name="text" cols="35" rows="5"></textarea><br>
<input type="submit" value="Abschicken">
</form>
</font>
<?php
}
?>

http://s3web84.nwi-server3.de/gb2/eintragen.php ist der link zu dem mini-buch :)

Grüsse
Oliver

  1. Huhu Oliver

    ich habe gerade das Gästebuch unter dem von der geposteten Link ausprobiert. Und jetzt ist es kaputt :-(

    Tut mir leid :-'

    lulu

    btw.
    Poste doch bitte mal den Teil der den Inhalt anzeigt.

    1. Huhu Oliver

      huhu lulu :)

      Tut mir leid :-'

      macht nix :)

      lulu

      ja weis ich doch schon !

      btw.
      Poste doch bitte mal den Teil der den Inhalt anzeigt.

      <codehinklatsch>

      <b>Mein Gästebuch</b><br>
      <a href="eintragen.php">Hier</a> kannst du dich eintragen<br>
      <br>

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

      </codehinklatsch>

      Grüsse
      Olli

      1. HI,

        habs geschafft :)

        Grüsse
        Oliver

      2. Huhu Oliver

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

        Wenn Du die Einträge direkt per include einbindest solltest
        Du dafür Sorge tragen, dass man keinen SkriptCode (z.B. PHP)
        über Dein Formular eintragen kann.

        http://www.php.net/manual/en/function.strip-tags.php

        Viele Grüße

        lulu

        1. Huhu lulu

          Wenn Du die Einträge direkt per include einbindest solltest
          Du dafür Sorge tragen, dass man keinen SkriptCode (z.B. PHP)
          über Dein Formular eintragen kann.

          Darüber habe ich mir auch schon gedanken gemacht. nicht das mir da mal einer ein forum ins gästebuch baut :P

          aber wie gesagt, ich bin noch gaaaanz am anfang von php. Ich habe vorgestern angefangen mit php indem ich einen zähler nachgebastelt habe, gestern habe ich mir das gb-tutorial zu gemüte geführt. und heute, naja heute muss ich erstmal von einem hoster zum anderen umziehen und mich um meine domain kümmern (ja wer hat sie den nur ?^^)

          aber heute abend werde ich es mal versuchen.  da dann ja wieder fragen aufkommen, kann man sich ab etwa 21uhr wieder auf herrliche fragethreads by Olli freuen :)

          Grüsse
          Olli

  2. Hi Oliver,

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

    hierbei steht der Dateizeiger am Anfang des files - also wir der
    Inhal  überschrieben....
    try this:
    $fp = fopen("gaestebuch.txt","a";

    gruss Sven

    1. Hi,

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

      hab ich probiert, aber es zeigt immernoch nur den einen letzten eintrag an :(

      Grüsse
      Olli

  3. Hallo Ihr Lieben,

    hab nochmal ne Frage zu php und css:

    else{
    $eintrag = "$inhalt<a href="mailto:$mail">$name</a>
    <br><a class="book" href="$www">$www</a><p style="font-size:14px;color:red;border:1px solid #FF7C00">$text</p>
    <hr>
    <br><br>";
    }

    gibt folgende Fehlermeldung aus :
    Parse error: parse error, unexpected T_STRING in /home/www/s3web84/html/gb2/eintragen.php on line 31

    Darf ich css etwa nicht so in die php-datei schreiben ? und wenn nein, wie formatiere ich dann mein Gästebuch ?

    http://s3web84.nwi-server3.de/gb2/eintragen.php ist der link zu dem mini-buch :)

    Grüsse
    Oliver

    1. hello again,

      Dein fehler liegt hier:

      $eintrag = "$inhalt<a href="mailto:$mail">$name</a>
      <br><a class="book" href="$www">$www</a><p style="font-size:14px;color:red;border:1px solid #FF7C00">$text</p>

      das sollte dann schon so aussehen:

      $eintrag = "$inhalt<a href="mailto:$mail">$name</a><br><a class="book" href="$www">$www</a><p style="font-size:14px;color:red;border:1px solid #FF7C00">$text</p>";

      gruß,
      finn

      1. hello again,

        Dein fehler liegt hier:

        $eintrag = "$inhalt<a href="mailto:$mail">$name</a>
        <br><a class="book" href="$www">$www</a><p style="font-size:14px;color:red;border:1px solid #FF7C00">$text</p>

        das sollte dann schon so aussehen:

        $eintrag = "$inhalt<a href="mailto:$mail">$name</a><br><a class="book" href="$www">$www</a><p style="font-size:14px;color:red;border:1px solid #FF7C00">$text</p>";

        gruß,
        finn

        Hi,
        bedeutet das ich muss vor jedem " ein \ setzen ? (sofern innerhalb eines php-befehls)

        Grüsse
        Olli

        *ichhabmeinerstesphp-scriptgebastelt-freuer*

        1. Aloha!

          Hi,
          bedeutet das ich muss vor jedem " ein \ setzen ? (sofern innerhalb eines php-befehls)

          Wenn du meinst: "Gib in der Seite ein "-Zeichen aus", und dein String mit " eingeleitet wurde, dann ja.

          Wenn dein String mit ' eingeleitet wurde, dann nicht (da mußt du dann auszugebende ' mit Backslash escapen).

          Generell ist es nicht verkehrt, Anführungsstriche in Strings immer mit Backslash zu escapen, allerdings ist es aufwendiger. Wenn du den String mit der einen Sorte (' oder ") begrenzt, kannst du die jeweils andere Sorte (" oder ') problemlos im String verwenden und ausgeben. Nur bei der gleichen Sorte muß ein Backslash davor. Und wenn du den Backslash ausgeben willst, mußt du zwei davon schreiben, damit einer daraus wird.

          - Sven Rautenberg