Mabraham: Script funzt nicht ganz

Beitrag lesen

Damit die news, die ich auf der Adminseite verfasse, nicht bei jedem reload gelöscht werden, speichere ich sie in dateien(die eben durch die Adminseite bearbeitet werden sollen) und gebe sie dann auf der HP aus. Die datei soll, wenn sie durch die Adminseite editiert wird, "sich leeren/löschen" und durch neuen text ersetzt werden (ich dachte da an Modus "w+").
Mit w+ machts jedoch garnix, einfach nichts, keine fehlermeldung, kein text-nix. Mit r+ hingegen gehts am besten, machmal funzt es, manchmal nicht.

Es wäre überaus hilfreich, wenn Du das Wort "funzen" aus Deinem Sprachschatz streichen und stattdessen eine ordentliche Fehlerbeschreibung liefern würdest. "Macht nichts, geht am Besten, manchmal funzt es, manchmal nicht" ist jedenfalls wenig aussagekräftig.

$titel = $_POST["titel"];
$date = $_POST["date"];
$autor = $_POST["autor"];
$text = $_POST["text"];

Mit dem Anlegen von zwei Variablen für denselben Zweck verbaust Du Dir gute Namen für andere Zwecke und verschleierst zudem die Herkunft der Daten. Sicher ist $a kürzer als $_POST["a"], aber erfahrungsgemäß wirst Du diese paar eingesparten Zeichen früher oder später in anderer Form bereuen.

01 $ttexte = fopen('news.txt', 'w+');
02 fwrite($ttexte, $text);
03 $inhaltnews = fread($ttexte, 100);
04 fclose($ttexte);

Das ist etwas umständlich. Du löscht erst den Inhalt der Datei (01), schreibst $text rein (02) und liest dann $text wieder raus (03, bzw. glaubst vermutlich, dies zu tun). Du könntest genauso gut $inhaltnews über Bord kippen und stattdessen $text weiter nutzen. Analog bei allen anderen Daten.

Davon unabhängig: Eine geöffnete Datei besitzt einen sogenannten Dateizeiger, eine Position, ab der die nächste Aktion ausgeführt wird. In 01 wird die Datei auf 0 Byte gekürzt, also geleert, der Zeiger steht auf 0. In 02 schreibst Du x Bytes in die Datei, ab Position 0, bis Position x; der Zeiger bleibt bei x stehen, also am Ende des geschriebenen Blocks. In 03 liest Du, und zwar ab Position x. Wo steht x zu diesem Zeitpunkt und was lässt sich ab dort lesen?

echo  "<div class="news" align="left">Titel: ".$inhalttitel."</div>";

Benutze für solche Zeilen einfache Anführungszeichen, es spart massenhaft Rückstriche und erhöht die Les- und Bearbeitbarkeit enorm.

Gib zweitens niemals (!) Daten, die von Dritten kommen, ohne Absicherung durch htmlspecialchars() oder htmlentities() aus. So, wie es da oben steht, kann jeder, der schreiben darf, allen Besuchern beliebigen HTML-, CSS- und Javascript-Code unterjubeln, inklusive Verweise auf Viren und anderes Ungemach.

Diese und alle Zeilen mit ähnlicher Funktionalität sollten so aussehen:

echo '<div class="news" align="left">Titel: ' . htmlspecialchars($inhalttitel) . '</div>';

<form method="post" action="news.php">
Titel<br><input class="log1" type="text" name="titel" size="70"></input><br>

<input type="submit" value="bearbeiten"></input><hr>
</form>
</td>
<td>
<form method="post" action="news.php">
Titel<br><input class="log1" type="text" name="titel2" size="70"></input><br>

<input type="submit" value="bearbeiten"></input><hr>
</form>

Du benutzt drei separate Formulare, bearbeitest in news.php aber die Daten aller Formulare.
Von HTML-Seiten wird immer nur das Formular geliefert, dessen submit-Feld gedrückt wurde, Eingaben in anderen Formularen werden nicht übermittelt. Schickst Du also zum Beispiel den Block news1 ab, bekommt news.php auch nur den Block news1, nicht news2 und news3. Dadurch, dass Du trotzdem news2 und news3 schreibst, gehen deren Einträge verloren. Benutze nur einen <form>-Block.

"Bearbeiten" ist übrigens kein kluger Name, die Daten sind schon bearbeitet worden, mit dem Klick werden sie gespeichert.

-nein ich möchte mein problem nicht mit MySQL lösen ;)

Vielleicht möchtest Du Dein Problem stattdessen mit einer CSV-Datei lösen; PHP bietet sogar eine eigene Funktion zum Einlesen von CSV-Daten an, fgetcsv(). 15 Dateien für drei Meldungen ist definitiv zu viel.

die HTML Tag's

Kennst Du eigentlich deppenapostoph.de und deppenleerzeichen.de?