Frage von lucatas, 54

PHP Gästebuch (Kleiner code)?

Hi ,ich finde einfach kein Gästebuch script das so klein wie möglich sein sollte, den ehrlich gesagt sind mir die meisten zu groß. Ein Simples Script also so klein wie möglich! (Habe heute schon eine ähnliche frage gestellt allerdings kann ich mit den codes nichts anfangen!

Antwort
von TeeTier, 16

Auf die Schnelle, in Form einer Shoutbox, vielleicht:

<strong>Kommentare:</strong>
<?php
if (isset($_GET['c'])) {
$c = '<li>' . htmlentities($_GET['c']) . "</li>\n";
file_put_contents('gb.txt', $c, FILE_APPEND | LOCK_EX);
}

echo "<ol>\n";
readfile('gb.txt');
echo "</ol>\n";
?>
<form action="./guestbook.php" method="POST">
<input type="text" value="Neuer Kommentar" name="c" />
<input type="submit" value="Absenden" />
</form>

Das umgeht zwar das Problem mit dem Escaping aus der Antwort von "Minilexikon", hat aber immer noch viele Ecken und Kanten:

- Jemand sendet einen leeren oder ungültigen Kommentar ab

- Der Kommentar enthält Newlines (schadet in diesem Falle zwar nichts, aber die zeilenweise Formatierung in gb.txt gerät durcheinander)

- So ganz ohne Schutz ein leichtes Ziel für Spammer

- Keine Anzeige, falls es noch keine Kommentare gibt

Und so weiter ...

Ich schätze, wenn man die Länge des Skripts um 50% verlängert (sprich weitere 10 Zeilen), kann man obige Probleme streichen. Trotzdem bleiben noch einige unschöne Sachen wie eine (zugegebene sehr unwahrscheinliche) Schreib-/Lese-Race-Condition, die Speicherung der Formatierung in der Daten-Datei (sollte man nicht mischen), etc.

Kommentar von lucatas ,

wäre schön wenn das Script auch funktionieren würde

Kommentar von TeeTier ,

Es funktioniert fehlerfrei. Und es ist so klein und übersichtlich, dass ich darum wetten würde. :)

Und das Skript von der Konkurrenz (von Minilexikon) funktioniert übrigens auch tadellos.

Wenn alle Skripte, die die so findest, aus mysteriösen Gründen nicht zu funktionieren scheinen, dann würde ich vielleicht mal einen Blick in die Log-Dateien werfen, anstatt rum zu orakeln. :)

Ich tippe auf eine Art Problem mit Berechtigungen im Dateisystem (da ja Schreibrechte auf Dateien benötigt werden, und evtl. neue Dateien in Verzeichnissen angelegt werden müssen). Oder du hast eine exotische PHP-/Apache-Konfiguration.

Antwort
von Minilexikon, 23

Du machst dir ein simples Formular und speicherst das in einer json-Datei:

guestbook.php:

<?php
    if($_GET['action'] == 'post') {
        $post = [];
        $post['message'] = $_POST['message'];
        $post['sender']  = $_POST['sender'];
        file_put_contents('guestbook.json',json_encode($post),FILE_APPEND);
    }
    else {
        $posts = json_decode(file_get_contents('guestbook.json'));
        echo '<div id="guestbook">';
            echo '<table>';
                foreach($posts as $post) {
                    echo '<tr>';
                        echo '<th>Name:</th>';
                        echo '<td>'.$post['sender'].'</td>';
                        echo '<th>Nachricht:</th>';
                        echo '<td>'.$post['message'].'</td>';
                    echo '</tr>';
                }
            echo '</table>';
        echo '</div>';
    }
?>
<form id="postform" action="guestbook.php?action=post" method="post">
    <textarea id="message"></textarea>
    <input type="text" id="sender" placeholder="Absender" />
    <input type="submit" />
</form>

Natürlich musst du jetzt noch (Sicherheits-)überprüfungen und dergleichen einbauen. Ich habe den Code nicht getestet! Wenn Fehler auftauchen sollten, schaue ich nochmal drüber ;)

Kommentar von TeeTier ,

Und was passiert, wenn ich ins "message" Feld ...

<script>alert("Au weia!");</script>

... schreibe? :)

Kommentar von Minilexikon ,

Wie du da oben lesen kannst, handelt es sich dabei um ein Beispiel handelt und der Fragesteller sich Sicherheitsüberprüfungen und dergleichen selber einbraune muss.

Kommentar von lucatas ,

Geht leider auch nicht ,frag mich warum alle Scripte die ich finde nicht funktionieren :(

Kommentar von Minilexikon ,

Was genau funktioniert denn nicht? Wie lautet die Fehlermeldung?

Keine passende Antwort gefunden?

Fragen Sie die Community