Tom: Gästebuch formatierung...

Beitrag lesen

Hello Raphi,

Also ich habe mir ein Gästebuch zusammengeschrieben es funktioniert eigentlich sehr einfach. Über POST werden die eingegebenen Daten in eine Textdatei geschrieben.
Von da aus werden Sie mit diesem Script ins HTML eingefügt:

<?php
$user = $_POST["Name"];
$user = htmlentities($user);

$inhalt = $_POST["inhalt"];
$inhalt = htmlentities($inhalt);
$inhalt = str_replace("\n", "<br>", $inhalt);

$email = $_POST["EMail"];
$email = htmlentities($email);

Um auf die Post-Parameter zugreifen zu können, brauchst Du sie nicht erst umzukopieren in "lose" Variablen. Es ist immer besser, die Quelle von Parametern zu kennen und dies z.B. auch dadurch kenntlich zu machen, dass man alle Daten aus einer Quelle auch in einer Datenstruktur (hier Array) zusammengefasst hält. Du kannst direkt mit den $_POST[]-Elementen arbeiten.

if ($inhalt == "" or $user == "")
   {
   echo "Sie müssen das Feld "Namen"
   und "Inhalt" ausfüllen";
   }

else
   {
   $datum= date("d.m.Y H:i:s");

$eintrag="$email|$user|$datum|$inhalt";

$datei = fopen("content/gaestebuch.txt", "a");
   fwrite($datei, "\n".$eintrag);
   fclose($datei);

echo "<p>Ihr Eintrag wurde erfolgreich gespeichert</p>";
   }
?>

Dann fällt mir auf, dass Du ein gemischtes Format für Deine Datenspeicherung verwendest. Das bedeutet, dass Du Formatierung und Daten gemeinsam abspeicherst. Für die weitere Arbeit mit den Daten (Suchen, Sortieren, Editieren, ...) ist das recht unpraktisch. Man versucht deshalb besser, Daten und Format solange wie möglich getrennt zu halten.

Die Kontrolle der geposteten Daten sollte vor der Veränderung stattfinden.

Begrüßenswert ist allerdings, dass Du htmlspecialchars() hier verwendest. Das schützt Dich vor einer XSS-Attacke. Javascript-Code würde dadurch einfach zu in HTML darzustellenden Zeichen und nicht auszuführendem Code umgewandelt werden.

<br>
<div align="center">
<a href="?c=gaestebuch"><p>Zur&uuml;ck zum G&auml;stebuch</p></a>
</div>

Ein <p> (Blockelement) ist innerhalb eines <a> nicht erlaubt.
http://de.selfhtml.org/html/referenz/elemente.htm
http://de.selfhtml.org/html/referenz/elemente.htm#a
http://de.selfhtml.org/html/referenz/elemente.htm#p

Nun zu meinem Problem: Ich würde gerne den ausgegebenen Text bevor er im HTML angezeigt wird als mit einem <p> und somit über CSS formatieren. D.h. Bevor der Text angezeigt wird soll er speziell formatiert werden... Ist dies möglich wenn ja fände ich es toll wenn mir jemand den vollständigen Code als Antwort posten würde...

Wenn Du die übersandten Daten in Deiner Datei alle getrennt abspeicherst vom Format (HTML, CSS), dann kannst Du sie _bei_ _der_ _Ausgabe_ gezielt in HTML verpacken und dieses dann mittels CSS formatieren.

Zum Speichern kleinerer Datenmengen bietet PHP zwei elegante Möglichkeiten an, die ohne Datenbankmanagementsystem funktionieren:

- serialisierte Arrays  http://de2.php.net/manual/en/function.serialize.php
  - CSV-Datein            http://de2.php.net/manual/en/function.fputcsv.php

Das wäre dann allerdings schon ein weiterer Entwicklungsschritt. Du müsstet dich für die Verwendung dieser Speichermöglichkeiten auch mit Nebenläufigkeit beschäftigen.
http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/

Das ersparst Du dir in deinem Code bisher durch den Append-Mode, mit dem du die Datei zum Speichern öffnest.

Was aber auf jeden Fall empfehlenswert wäre, ist ein eindeutiger Datensatztrenner in der Datei mit den Gästebucheinträgen, damit Du nachher auf jeden Datensatz einzeln zugreifen kannst. Dafür eignet sich in deinem Fall ein eindeutiger HTML-Kommentar, den Du an jeden Datensatz anhägnst. Dieser darf dann allerdings in den übermittelten Daten selber nicht enthalten sein (was aber einfachst schon durch htmlspecialchars() verhindert wird).

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de