Script funzt nicht ganz
andi
- php
1 Mabraham
Hallo, ich hab von ner woche etwa angefangen PHP zu lernen und sitz gerade an meinem erstren script. Leider funktioniert es nicht ganz bzw ich kapier net was ich falsch mach.
Also, mein script ist dazu gedacht das andere Leute texte auf meiner Homepage verfassen können ( es gibt eine seite die nur mit PW betreten werden kann, und eine öffentliche seite )
es ist in 3 teile gegliedert: -Homepage.php -Adminseite.html-News.php -News.php
Homepage:: Was auf der homepage steht ist glaub ich vorerst egal, jedenfalls ist die newsdatei includiert
Adminseite:: Auf ihr befinden sich mehrere formulare mit verschiedenen "iput-dingens und so", die haben verschiedene namen wie "texte", "Autor", "Datum" ect...
News:: DEr "Kern" meines scriptes, meine denkweise ist so: 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.
I hätte es aber gerne so das es funzt, und bin mit auch zhiemlich sicher das da w+ hingehört :)
Hier mal das script (Aber nicht lachen ^^): <?php
$titel = $_POST["titel"]; $date = $_POST["date"]; $autor = $_POST["autor"]; $text = $_POST["text"]; //variablen des Formulars 1.news $titel2 = $_POST["titel2"]; $date2 = $_POST["date2"]; $autor2 = $_POST["autor2"]; $text2 = $_POST["text2"]; //variablen des Formulars 2.news $titel3 = $_POST["titel3"]; $date3 = $_POST["date3"]; $autor3 = $_POST["autor3"]; $text3 = $_POST["text3"]; //variablen des Formulars 3.news $linkpic = "http://solidxxsnake.ja-nee.de/clanpage/images/www.jpg"; $news5 = "http://solidxxsnake.ja-nee.de/clanpage/images/news5.jpg"; $news6 = "http://solidxxsnake.ja-nee.de/clanpage/images/news6.jpg"; $abc = "http://solidxxsnake.ja-nee.de/clanpage/images/clannews.jpg"; $hgnews4 = "http://solidxxsnake.ja-nee.de/clanpage/images/hg-news4.jpg"; $leiste = "http://solidxxsnake.ja-nee.de/clanpage/images/leiste.jpg"; $newsmainhg = "http://solidxxsnake.ja-nee.de/clanpage/images/news3.jpg"; //variablen der Tabellengrafiken //--------------------------------------------------------------- $ttexte = fopen('news.txt', 'w+');
fwrite($ttexte, $text); $inhaltnews = fread($ttexte, 100); fclose($ttexte); //öffnen, lesen und schreiben der text Datei $ttitel = fopen('titel.txt', 'w+');
fwrite($ttitel, $titel); $inhalttitel = fread($ttitel, 100); fclose($ttitel); //öffnen, lesen und schreiben der titel Datei $tdate = fopen('date.txt', 'w+');
fwrite($tdate, $date); $inhaltdate = fread($tdate, 100); fclose($tdate); //öffnen, lesen und schrieben der date Datei $tautor = fopen('autor.txt', 'w+');
fwrite($tautor, $autor); $inhaltautor = fread($tautor, 100); fclose($tautor); //öffnen, lesen und schreiben der Autor Datei //1.NEWS --------------- //---------------------------------------------------------------- $ttexte2 = fopen('news2.txt', 'w+');
fwrite($ttexte2, $text2); $inhaltnews2 = fread($ttexte2, 100); fclose($ttexte2); //öffnen, lesen und schreiben der text Datei $ttitel2 = fopen('titel2.txt', 'w+');
fwrite($ttitel2, $titel2); $inhalttitel2 = fread($ttitel2, 100); fclose($ttitel2); //öffnen, lesen und schreiben der titel Datei $tdate2 = fopen('date2.txt', 'w+');
fwrite($tdate2, $date2); $inhaltdate2 = fread($tdate2, 100); fclose($tdate2); //öffnen, lesen und schreiben der date Datei $tautor2 = fopen('autor2.txt', 'w+');
fwrite($tautor2, $autor2); $inhaltautor2 = fread($tautor2, 100); fclose($tautor2); //öffnen, lesen und schreiben der Autor Datei //2.NEWS --------------- //----------------------------------------------------------------- $ttexte3 = fopen('news3.txt', 'w+');
fwrite($ttexte3, $text3); $inhaltnews3 = fread($ttexte3, 100); fclose($ttexte3); //öffnen, lesen und schreiben der text Datei $ttitel3 = fopen('titel3.txt', 'w+');
fwrite($ttitel3, $titel3); $inhalttitel3 = fread($ttitel3, 100); fclose($ttitel3); //öffnen, lesen und schreiben der titel Datei $tdate3 = fopen('date3.txt', 'w+');
fwrite($tdate3, $date3); $inhaltdate3 = fread($tdate3, 100); fclose($tdate3); //öffnen, lesen und schrieben der date Datei $tautor3 = fopen('autor3.txt', 'w+'); fwrite($tautor3, $autor3); $inhaltautor3 = fread($tautor3, 100); fclose($tautor3); //öffnen, lesen und schreiben der Autor Datei //3.NEWS --------------- //---------------------------------------------------------------- echo "<table>"; echo "<tr>"; echo "<td>"; echo "<img class="news1" src="".$abc."" border="0">"; echo "</td>"; echo "<td class="newslayout" background="".$hgnews4."" width="480" height="50" valign="top">"; echo "<div class="news" align="left">Titel: ".$inhalttitel."</div>"; echo "<div class="news" align="left">Date: ".$inhaltdate."</div>"; echo "<div class="news" align="left">Autor: ".$inhaltautor."</div>"; echo "</td>"; echo "</tr>"; echo "<tr>"; echo "<td colspan="2"><img src="".$leiste."" border="0"></td>"; echo "</tr>"; echo "<tr>"; echo "<td background="".$newsmainhg."" valign="top" colspan="2" width="480" height="200"><div class="newstexte">".$inhaltnews."</div></td>"; echo "</tr>"; //ausgabe auf der Homepage , 1.NEWS //---------------------------------------------------------- echo "<tr>"; echo "<td>"; echo "<img class="news1" src="".$abc."" border="0">"; echo "</td>"; echo "<td class="newslayout" background="".$hgnews4."" width="480" height="50" valign="top">"; echo "<div class="news" align="left">Titel: ".$inhalttitel2."</div>"; echo "<div class="news" align="left">Date: ".$inhaltdate2."</div>"; echo "<div class="news" align="left">Autor: ".$inhaltautor2."</div>"; echo "</td>"; echo "</tr>"; echo "<tr>"; echo "<td colspan="2"><img src="".$leiste."" border="0"></td>"; echo "</tr>"; echo "<tr>"; echo "<td background="".$newsmainhg."" valign="top" colspan="2" width="480" height="200"><div class="newstexte">".$inhaltnews2."</div></td>"; echo "</tr>"; //ausgabe auf der Homepage , 2.NEWS //-------------------------------------------------------------- echo "<tr>"; echo "<td>"; echo "<img class="news1" src="".$abc."" border="0">"; echo "</td>"; echo "<td class="newslayout" background="".$hgnews4."" width="480" height="50" valign="top">"; echo "<div class="news" align="left">Titel: ".$inhalttitel3."</div>"; echo "<div class="news" align="left">Date: ".$inhaltdate3."</div>"; echo "<div class="news" align="left">Autor: ".$inhaltautor3."</div>"; echo "</td>"; echo "</tr>"; echo "<tr>"; echo "<td colspan="2"><img src="".$leiste."" border="0"></td>"; echo "</tr>"; echo "<tr>"; echo "<td background="".$newsmainhg."" valign="top" colspan="2" width="480" height="200"><div class="newstexte">".$inhaltnews3."</div></td>"; echo "</tr>"; //ausgabe auf der Homepage , 3.NEWS //-------------------------------------------------------------- echo "<tr>"; echo "<td colspan="2" class="newslayout2" background="".$news6."" width="480" height="132" valign="top">"; echo "</td>"; echo "<tr>"; echo "<tr>"; echo "<td colspan="2"><img src="".$leiste."" border="0"></td>"; echo "</tr>"; echo "<td colspan="2" class="newslayout2" background="".$news5."" width="480" height="50" valign="top">"; echo "<a class="weiter" href="#"></a><a class="top" href="#top"></a>"; echo "</td>"; echo "</tr>"; echo "<tr>"; echo "<td colspan="2"><img src="".$leiste."" border="0"></td>"; echo "</tr>"; echo "<tr>"; echo "<td colspan="2"><img src="".$linkpic."" border="0"></td>"; echo "</tr>"; echo "</table>"; //restliche tabelle
?>
Und die Adminseite
<form method="post" action="news.php"> Titel<br><input class="log1" type="text" name="titel" size="70"></input><br> Datum<br><input class="log1" type="text" name="date" size="70"></input><br> Autor<br><input class="log1" type="text" name="autor" size="70"></input><br> News<br><textarea name="text" cols="36" rows="7"></textarea><hr> <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> Datum<br><input class="log1" type="text" name="date2" size="70"></input><br> Autor<br><input class="log1" type="text" name="autor2" size="70"></input><br> News<br><textarea name="text2" cols="36" rows="7"></textarea><hr> <input type="submit" value="bearbeiten"></input><hr> </form> </td> <td> <form method="post" action="news.php"> Titel<br><input class="log1" type="text" name="titel3" size="70"></input><br> Datum<br><input class="log1" type="text" name="date3" size="70"></input><br> Autor<br><input class="log1" type="text" name="autor3" size="70"></input><br> News<br><textarea name="text3" cols="36" rows="7"></textarea><hr> <input type="submit" value="bearbeiten"></input><hr> </form>
Noch ein paar bemerkungen zum schluss: -nein ich möchte mein problem nicht mit MySQL lösen ;) -ich weis das bei der Adminseite die HTML Tag's fehlen ^^ -ich weis das mein script keine augenweide ist^^ -ich bin Php beginner also seid bitte nicht zu steng mit mir^^
MFG
Andi ^^
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?