martha3112: Kann eine Text-Datei nicht schreiben. Lesen ist OK

Hallo selfhtml-Helfer!
Knabbere schon 2 Tage an einem blöden Problem. Ich mache ein ganz einfaches schwarzes Brett und verwende dazu eine Text-Datei (txt). Das Formular passt, nimmt die Eingabe korrekt auf, das Auslesen des aktuellen Bretts passt auch.
Nur das Schreiben des neuen Beitrags funktioniert nicht, die Datei schaut immer so aus wie vor dem Schreib-Befehl! Fehlermeldung kommt keine.

Ganz vielen Dank für Eure Hilfe!

LG Martha

Das ist der Code:

<?PHP
//------------------------------- Beginn PHP ------------------------------------------------------------
/* Leerzeile */
$leer="\r\n";

/* Schwarzes Brett */
$schwarzbrett = "schwarzbrett.txt";

/* Aufrufparameter: */
$name=htmlspecialchars($_POST['name1']);
$message=htmlspecialchars($_POST['message1']);

/* Neuen Beitrag sichern, kommt ja an den Anfang*/
$zwischen = $message;

/* Einlesen des bisherigen schwarzen Bretts */
/* das funkt, wie mir Testausdrucke zeigen */
$Ausgabe=file_get_contents($schwarzbrett);
$message  = $zwischen . $leer . $Ausgabe . $leer;

$error=file_put_contents($schwarzbrett, $message);
echo "Testausgaben:";
echo "Error: {$error}";
/* Die Variable Error ist leer. Auch mit
file_put_contents($schwarzbrett, $message);
habe ich es schon probiert, funkt auch nicht*/

/* Folgende Variante open, write, close habe ich auch probiert, funkt auch nicht! Es kommt die FM, dass die Datei nicht zum Schreiben geöffnet werden kann */

/* Datei löschen, der alte Inhalt wurde ja gesichert */
//if (!$zeiger = fopen($schwarzbrett, "w")) {
//         print "Kann die Datei {$schwarzbrett} nicht zum Schreiben Öffnen";
//         exit;}

/* Neuen plus alten Inhalt schreiben */
//if (!fwrite($zeiger, $message)) {
//        print "Kann in die Datei $filename nicht schreiben";
//        exit; }

/* Datei wieder schließen */
//fclose($zeiger);

/* Ausgaben: */
echo $leer1;
echo "Hallo {$name}! Folgende Info wurde ins schwarze Brett eingefügt:";
echo $leer1;
echo "{$message1}";
//------------------------------- Ende PHP ------------------------------------------------------------
?>

  1. Hallo,

    Knabbere schon 2 Tage an einem blöden Problem. Ich mache ein ganz einfaches schwarzes Brett und verwende dazu eine Text-Datei (txt). Das Formular passt, nimmt die Eingabe korrekt auf, das Auslesen des aktuellen Bretts passt auch.
    Nur das Schreiben des neuen Beitrags funktioniert nicht, die Datei schaut immer so aus wie vor dem Schreib-Befehl! Fehlermeldung kommt keine.

    du fragst sie nicht korrekt ab.

    $name=htmlspecialchars($_POST['name1']);
    $message=htmlspecialchars($_POST['message1']);

    Das ist logisch falsch. Die Funktion htmlspecialchars ist für die *Ausgabe* von Strings im HTML-Kontext gedacht. Bei der Eingabe bzw. Speicherung hat sie nichts verloren; damit verhinderst du wirksam, dass der Dateiinhalt irgendwann mal in einem anderen Kontext ausgegeben werden könnte, beispielsweise als reiner Text, oder in ein PDF-Dokument.

    Beim Speichern solltest du nur die Maskierungen vornehmen, die für das gewählte Speicherformat erforderlich sind - bei einer einfachen Textdatei eventuell gar keine.

    /* Neuen Beitrag sichern, kommt ja an den Anfang*/

    An den Anfang?? Ich würde den neuen Beitrag ans Ende setzen.

    $error=file_put_contents($schwarzbrett, $message);
    echo "Testausgaben:";
    echo "Error: {$error}";
    /* Die Variable Error ist leer. Auch mit
    file_put_contents($schwarzbrett, $message);
    habe ich es schon probiert, funkt auch nicht*/

    Das Handbuch sagt, dass file_put_contents() im Erfolgsfall die Anzahl der geschriebenen Bytes, im Fehlerfall ein boolsches FALSE liefert. Was enthält $error bei dir also wirklich? Gib den Wert beispielsweise mit var_dump() aus, das sagt dir mehr als ein echo.

    /* Folgende Variante open, write, close habe ich auch probiert, funkt auch nicht! Es kommt die FM, dass die Datei nicht zum Schreiben geöffnet werden kann */

    /* Datei löschen, der alte Inhalt wurde ja gesichert */
    //if (!$zeiger = fopen($schwarzbrett, "w")) {
    //         print "Kann die Datei {$schwarzbrett} nicht zum Schreiben Öffnen";
    //         exit;}

    Hat PHP denn Schreibrechte in dem Verzeichnis, in dem die Datei liegt? Teste das im Zweifelsfall mit is_writable(), zunächst angewendet auf das Verzeichnis. dann auf die Datei selbst. Du musst sowohl für das eine, wie auch für das andere Schreibrechte haben.

    /* Ausgaben: */
    echo $leer1;
    echo "Hallo {$name}! Folgende Info wurde ins schwarze Brett eingefügt:";
    echo $leer1;
    echo "{$message1}";

    Die geschweiften Klammern sind bei einfachen Variablen übrigens nicht nötig; ebensowenig wie es nötig oder sinnvoll ist, eine einzelne Stringvariable nochmal in einen String einzubetten.

    So long,
     Martin

    --
    Chef zum Bewerber: Es gibt zwei Dinge, auf die ich allergrößten Wert lege. Das eine ist Sauberkeit! Haben Sie übrigens die Schuhe auf der Matte abgetreten? - Ja, selbstverständlich. - Gut. Das andere ist uneingeschränkte Ehrlichkeit. Übrigens, draußen liegt gar keine Fußmatte.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hallo Martin,
      danke für Deine vielen Tipps! Habe herausgefunden, dass ich weder auf die Datei, noch auf das Verzeichnis Schreibrechte habe. Habe mit der Funktion "var_dump" jeweils "false" zurückbekommen.

      Muss mir also was überlegen.

      Nochmals danke!

      LG Martha

      P.S.: Den neuesten Beitrag möchte ich auf jeden Fall oben haben, wen freut schon das runterblättern :-)

      1. Hallo,

        danke für Deine vielen Tipps! Habe herausgefunden, dass ich weder auf die Datei, noch auf das Verzeichnis Schreibrechte habe. Habe mit der Funktion "var_dump" jeweils "false" zurückbekommen.

        das kann natürlich passieren, wenn du ein Verzeichnis verwenden möchtest, das dein Webhoster nicht zum allgemeinen Gebrauch vorgesehen hat.

        P.S.: Den neuesten Beitrag möchte ich auf jeden Fall oben haben, wen freut schon das runterblättern :-)

        Geschmackssache. Ich bin es gewöhnt, dass fortlaufende Aufzeichnungen, Listen usw. von oben nach unten geschrieben bzw. gelesen werden. Ich lass mir auch das Forum hier von oben nach unten sortiert anzeigen, also den neuesten Beitrag ganz unten.

        Ciao,
         Martin

        --
        Zwei Politiker auf dem Weg zum Sitzungssaal: "Was sagten Sie in ihrer Rede neulich noch zur Rentenreform?" - "Nichts." - "Ja, schon klar. Aber wie haben Sie es formuliert?"
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(