Kommentar-Box -> Warnung unterdrücken?

Guten Morgen,

ich habe von folgender Seite die Kommentar-Box eingesetzt: http://www.homepage-total.de/php/kommentar-box.php.

Damit habe ich allerdings zwei Probleme:

  1. Wenn PHP noch keine Textdatei angelegt hat, wird mir im Kommentarfeld eine Warnung angezeigt. Kann man diese unterdrücken oder gibt es sonst eine Möglichkeit?
  2. Wenn der Besucher einen Kommentar abgegeben hat und er die Seite aktuallisiert, wird dieser Kommentar wiederholt an mich geschickt (wegen Freischaltung). Gibt es da eine Möglichkeit das zu unterbinden?

Hier sind die Codes:
kommentar.php

[code]

" method="POST" onSubmit="return eingaben_ueberpruefen();">
Dein Kommentar dazu:
<?php /* Kommentar-Box - Version 1.4 Das Script stammt von W. Zenk Homepage: www.homepage-total.de E-Mail: webmaster@homepage-total.de Das Script darf frei genutzt werden, solange dieser Vermerk nicht entfernt wird! */ # E-Mail-Adresse $an = "volner-reisel@freenet.de"; # Homepage-Name $homepagename = "volner-reisel.bplaced.net"; # URL (Ohne Unterverzeichnisse!) $url ="http://www.volner-reisel.bplaced.net"; /* Anmerkung: Die Datei "schreibe.php" sollte dann unter folgender Adresse zu finden sein "http://www.seite.de/kommentar/schreibe.php" */ if ($_POST) { $Kommentar = strip_tags(stripCslashes(trim($_POST["Kommentar"]))); $Kommentar = str_replace(array("\r", "\n"), " ", substr($Kommentar, 0, 500)); $betreff = "Neuer Kommentar - $homepagename "; $text = "Kommentar freischalten (Link anklicken!)\n$Kommentar\n"; $text .= "Datum: " . date("d.m.Y H:i") . " - Datei: \"" . $_POST["Kdateiname"] . "\" - Autor: " . $_POST["Kommentator"] . "\n\n"; $text .= " $url/_bausteine/kommentar/schreibe.php?Kdateiname=" . $_POST["Kdateiname"] . "&Kommentar=" . rawUrlEncode($Kommentar) . "&Kommentator=" . rawUrlEncode($_POST["Kommentator"]); @mail($an, $betreff, $text, "From: " . $an); // E-Mail versenden echo "Dein Kommentar wurde gesendet.
"; } ?>

Kommentar


<?php // Dateiname ermitteln $titel = explode("/", "$_SERVER[PHP_SELF]"); $file = explode('.', ucfirst($titel[count($titel) - 1])); echo " \n"; ?>
Der Kommentar wird erst nach Überprüfung freigeschaltet!

<?php // Kommentarausgabe wenn vorhanden! $ausgabe = "Noch keine Kommentare vorhanden."; $pfad = "_bausteine/kommentar/kommentare/" . $file[0] . ".txt"; for ($zaehler = 1; $zaehler < 6; $zaehler++) { if (file_exists($pfad)) { $ausgabe = file_get_contents($pfad); } else { $pfad = "../" . $pfad; } } echo $ausgabe; ?>


 

[/code] schreibe.php [code] Kommentar eintragen

Kommentar eintragen

<?php /* Kommentar-Box - Version 1.4 Das Script stammt von W. Zenk Homepage: www.homepage-total.de E-Mail: webmaster@homepage-total.de Das Script darf frei genutzt werden, solange dieser Vermerk nicht entfernt wird! */ # Passwort hier eintragen $Passwort = "***"; if ($_GET) { echo <<<EOT Passwort:

Kommentar Beitrag
Name:
Dateiname:
$_GET[Kommentar]

  EOT; } if ($_POST) { if ($_POST["password"] == $Passwort && $_POST["Kommentator"] != "" && $_POST["Kdateiname"] != "" && $_POST["Kommentar"] != "") { $file = "kommentare/" . $_POST["Kdateiname"] . ".txt"; $handler = fOpen($file, "a+"); fPuts($handler, "

" . $_POST["Kommentator"] . ":
" . $_POST["Kommentar"] . "

\n"); fClose($handler); echo "
Der Kommentar wurde in die Datei \"" . $_POST["Kdateiname"] . ".txt\" eingetragen.
"; } else { echo "
Der Kommentar wurde nicht eingetragen.
"; } } ?> [/code]

Und hier eine Beispielseite: http://www.volner-reisel.bplaced.net/galerie/fotografie/galerie_02/f02-002_stopp.php

Schon mal danke im Voraus.

Gruß Elsner

PS: Ich würde gerne noch das Datum/Uhrzeit bei den Kommentare dabei stehen haben. Wenn mir da einer Hinweise zum Code geben kann, wäre ich auch dankbar.

Um die Fehlermeldung zu unterdrücken kannst du 1. mit is_file() prüfen ob eine Datei vorhanden ist und ggf. die weitere Verarbeitung abbrechen, oder vor die Fehlerverursachende Funktion ein @ machen. (zweiteres ist nicht so empfehlenswert, weil es dadurch auch im tatsächlichen Fehlerfall umständlicher ist den Fehler zu lokalisieren.

Und mittels der date()-Funktion kannst du dir das aktuelle Datum und Uhrzeit in dem von dir gewünschten Format ausgeben lassen.

Danke freggle. Die Warnungsunterdrückung werde ich mal ausprobieren, sobald ich zu Hause bin.

Kann mir den Code jemand so umbauen, dass über dem Kommentar folgendes steht?
Am … (aktuelles Datum) schrieb … (eingegebener Name): …

Das wäre sehr nett. Danke.

Gruß Elsner

[quote=“elsner”]Kann mir den Code jemand so umbauen, dass über dem Kommentar folgendes steht?
Am … (aktuelles Datum) schrieb … (eingegebener Name): …[/quote]
Da das Script die Daten ja offenbar direkt schon im Ausgabeformat in die Datei schreibt, musst du eigentlich nur die eine Zeile anpassen, wo in die Datei geschrieben wird.

Ich würde dir empfehlen das ganze mit mysql zu machen statt mit dateien in den die daten gespeichert werden.
Ein gutes mysql TUT gibs auf http://www.php-einfach.de
und auf http://www.php-kurs.com
und DATE bekomst du auf phpbox.de erklärt.

Vielen Dank für die Tips und Hilfestellungen. Aber die zwei oben genannten Probleme bleiben weiterhin bestehen.

Wo muss ich denn @ für die Unterdrückung der Warnung einsetzen? Hab es an mehreren Stellen erfolglos probiert.

Gewöhne dir bitte ab, solche Statements abzugeben - sie helfen weder dir noch uns weiter.

Du hast einen Vorschlag bekommen - wenn du bereits versucht hast, diesen umzusetzen, dann beschreibe auch wie, und was dabei passiert ist.

Derzeit kommt auf deiner Seite folgende Meldung:

Laut Meldung ist dein Script
/users/volner-reisel/www/_bausteine/kommentar/kommentar.php
und die Kommentar-Datei befindet sich wohl ebenfalls im Verzeichnis
/users/volner-reisel/www/_bausteine/kommentar/

Also wieso machst du eine derart unsinnige Pfadangabe wie
…/…/…/…/_bausteine/kommentar/kommentare/F02-002_stopp.txt
? Wenn Script und Datei sich im gleichen Verzeichnis befinden, kannst du den Dateinamen ganz ohne Pfad angeben.

de.selfhtml.org/html/allgemein/referenzieren.htm durchzulesen, riet ich dir glaube ich letzte Tage schon mal. Das bezieht sich zwar auf Referenzierung in HTML und damit vornehmlich auf Zugriffe über HTTP - aber im Dateisystem ist es ganz analog, …/ geht ein Verzeichnis weiter nach oben.

Wie wär’s mit da, wo sie auftritt?
Script und Zeilennummer stehen bei solchen Meldungen immer dabei.

Eine einzelne Warnung zu unterdrücken reicht natürlich nur dann aus, wenn nachfolgende Funktionsaufrufe nicht darauf angewiesen sind, das eine vorherige Operation geklappt hat.

Das ist schon wieder so eine Nullaussage, die absolut nicht weiterhilft. Lass das bitte!

if (file_exists($pfad)) { $ausgabe = file_get_contents($pfad); } else { $pfad = "../" . $pfad; } }
Stand das vorher auch schon so drin im Script?

Das ist unsinnig; wenn $pfad auf keine existente Datei zeigt, wird …/ davor gehangen - aber anschliessend mit der Variablen $pfad überhaupt nichts mehr gemacht.

Die übliche und einfachste Lösung ist, nach dem Eintragen per header() auf eine andere Seite umzuleiten, bspw. wieder auf die Anzeigeseite. Dadurch, dass der neue Request vom Browser dann per GET erfolgt, kann dann so oft aktualisiert werden, wie der Nutzer möchte - es werden aber keine POST-Daten erneut übertragen.

Dass du das jetzt versuchst, und dabei in die “headers already sent”-Falle rennst, ist vorhersehbar - deshalb lies bitte die Beschreibung zur Funktion header im PHP-Manual aufmerksam durch, bevor du das probierst.

OK, mein Statement kam wohl etwas falsch rüber. Dafür entschuldige ich mich an dieser Stelle. Ich bin der Hilfesuchende und ich weiß, dass ich dadurch auf euch angewiesen bin.

Um die Fehlermeldung zu unterdrücken, habe ich bei der Zeile 112 das @ vorangestellt. Ohne Erfolg. Dann habe ich es mal vor die Zeilen 113, 115 und 116 gestellt. Ebenfalls ohne Erfolg. Der einzige Effekt war, dass mir die Kommentarbox nicht mehr angezeigt wurde.

Die Kommentardateien befinden sich nicht im gleichen Ordner wie die Skripte, sondern nochmals in einem Ordner “kommentare”.

Warum bei der Warnung ein Pfad mit vielen …/ angegeben wird, weiß ich auch nicht. So etwas habe ich in den Skripten nicht angegeben (siehe erster Beitrag).

Der Code mit file_exists($pfad)… stand vorher schon im Skript. Daran habe ich nichts geändert.

Es tut mir leid, dass es jetzt so viel Text ist. Mit dem Zitat habe ich es nicht hinbekommen.

Ich möchte mich noch für eure Bemühungen bedanken. Das weiß ich sehr zu schätzen.

@fwrite("",’’);
Das @ einfach vor den befehl !
@print();

Danke asshare. Mit deinem Tip habe ich es geschafft.

So siehts jetzt in der kommentar.php aus (Auszug):

if (@file_exists($pfad)) { $ausgabe = file_get_contents($pfad); }

Du hattest auch gemeint, dass ich es besser mit MySQL machen soll. Aber ich habe mich für das Speichern in Textdateien entschieden, da ich die Kommentarbox auf unterschiedlichen Seiten anwenden wollte. Trotzdem Danke für den Hinweis.

Gruß Elsner