PHP Administration (TXT Dateien)

Moin!

Ich hab bereits für mich ein kleines Adminlogin gemacht.
Das ist alles schön und gut, jedoch möchte ich, in dem Administrationsmenü alles auch administrieren.

Und nun der Hauptteil:
Ich möchte, dass ich mit einem ganz einfachen Feld .txt Dateien schreibe oder editiere.
Ich mache z.B. eine Datei (home.txt). Diese ist leer und wird eben online bearbeitet. Diese wird dann in eine Datei, wie home.php mit einem include eingefügt, damit dies auf meiner Webseite erscheint.
Das Login soll für meinen Kolleg sein, der sich allerdings nicht mit HTML auskennt.

Wie kann ich so was realisieren?
Ich dachte, ich brauche drei Dateien dafür.
In der einen das Textfeld, wo der Text geschrieben / editiert wird, in einer zweiten wird mit PHP alles übermittelt und in der dritten sollen alle vorhandene .txt Dateien aufgelistet werden.

Und wenn man auf eine klickt, dann wird man auf die erste Datei weitergeleitet mit dem Textfeld. Doprt kann man dann Text hineinschreiben oder editieren(falls vorher schon welcher drinn war).

Wie könnte ich das realisieren?

Also schreibt mir nicht, ich soll CMS nehmen, denn 1. entspricht das nicht dem, was ich will, und 2. ich will ja etwas dabei lernen (bin ja noch nicht so weit in PHP)

Ich freue mich schon auf Antworten.

MfG, matibaski

mit [phpnet]fopen[/phpnet]
[phpnet]fread[/phpnet]
[phpnet]fwrite[/phpnet]
[phpnet]fclose[/phpnet]

Danke. Ich habe bereits alles soweit, dass er alle Dateien aus einem bestimmten Ordner auflistet , diese sind je mit einem Hyperlink „markiert“. Wenn ich auf den Namen eines aufgelsiteten Objektes klicke, dann wird der Dateiname in ein einzeiliges Feld geschriebn, je nachdem, was angegeben ist (file=datei.txt). Unten habe ich ein Textfeld, bei dem der gewünschte Inhalt hinkommt, ach nach angabe von file=datei.txt.

Doch das Problem ist, ich muss jede Datei beim switch() angeben, die angezeigt werden soll.

Nun meine Frage.
Wie kann ich meinen $_GET Code schreiben, dass er in die Datei includiert (file=datei.txt), ohne dass ich für jede Datei einen case machen muss?

[php]

<?php $txt = $_GET['file']; switch($txt) { default: echo' Wähle oben eine Datei aus.'; break; case 'data.txt' : include("content/files/data.txt"); break; case 'data2.txt' : include("content/files/data2.txt"); break; } ?>

[/php]
Ich dachte so:
[php] case ‚$file‘ : include(„content/files/“.$file); break;[/php]
Doch es geht nicht. :frowning:

Kann mir jemand helfen?

[Soll kein Spam sein, sondern eine re-machivierung. :smiley: Dass mein Beitrag wieder fettgedruckt ist, und dass andere reinschauen. :D]

Wo definierst du denn $file?
ich würd ma sagen du meinst $_GET[‚file‘] Dann musst du beim case folgendes schreiben:
[php]case $_GET[‚file‘][/php]

PS: Pushen ist verboten :stuck_out_tongue:

Mach es doch einmal einfach so:

Anstatt eines Switches, nimmst du ein einfaches $_GET
Dieses Get hat dann den Filename drin, und dann passt das ^^
[PHP]

<?php // Link: Dateiname.txt $verzeichnis = "content/files/"; if(empty($_GET["file"])) { die("Wähle eine Datei!"); } else if(!file exists($verzeichnis.$_GET["file"])) { die("Date existiert nicht"); } else { echo ""; $file = fopen($verzeichnis.$_GET["file"],"r"); while(!feof($file)) { echo fgets($file,4069); } fclose($file); echo ""; } ?>

[/PHP]

Nicht dein Ernst, oder? Weißt du wie unsicher das ist? ein einfaches …/…/ im Dateinamen reicht, schon schreibt man z.B. die index…

ja schon klar, aber wer greift denn bitte auf das admincenter zu?
Der dem die Seite gehört, und wenn man so einfach in das Admincenter kommt, dann stimmt schon beim login was nicht

Ok, stimmt dennoch würd ich da ein paar sicherheitssperren einbauen →
Prüfen ob Endung .txt ist, ob im Dateinamen ein …/ drin is etc…

Danke für eure Antworten.
Ich habe eure Code’s angesehen und habe mir einige Ideen geholt.

@Alti

$file wurde hier definiert (auf der gleichen Seite wo das Textfeld ist).
[php]<?php
if(!isset($file))
{
echo’ Wähle aus, welche Datei du bearbeiten möchtest.

';
if ($handle = opendir(‚content/files/‘))
{
while (false !== ($file = readdir($handle))) {
if ($file != „.“ && $file != „…“) {
echo „-<a href=admin.php?site=content_bearbeiten&file=$file>$file
\n“;
}
}
closedir($handle);
}

}
?>[/php]Doch nun habe ich mein include eben so:
[php]<?php if(!isset($_GET['file'])) { $_GET['file'] = include("content/default.txt"); } switch($_GET['file']) { case $file : include("content/files/".$file); break; } ?>[/php]Oben sind $handle (der Pfad content/files/) und $file bestimmt. Diese werden per Post übergetragen.
So:
[html][/html]und die content_insert.php ist die Datei, die alles schreibt.

[php]<?php
$fileid = ($_REQUEST[‚dataid‘]);
$filename = ‚content/files/‘.$fileid;
$somecontent = ($_REQUEST[‚text‘]);

if (is_writable($filename))
{
if (!$handle = fopen($filename, „r+“))
{
print „Die Datei $filename konnte nicht geöffnet werden.“;
exit;
}

if (!fwrite($handle, $somecontent))
{
print „Die Datei $filename konnte nicht geöffnet werden.“;
exit;
}
print „Die Datei $filename ist nicht schreibbar.“;
fclose($handle);

}
else
{
print „Die Datei $filename wurde nicht verarbeitet“;
}
?> [/php]Hier fällt dir vielleicht auf hier wird die Datei content/files/$fileid verarbeitet.
In meinem Tool habe ich ein einzeiliges Feld, indem ein echo hervorgerufen wird. echo($file);
Und diese wird auch mit post gesendet.
Und untent ist ein iFrame, dass wenn die content_insert.php ins Spiel kommt, unten Sagt, datei wurde verarbeitet oder nicht.

Das ist alles gut.
Doch wenn ich eine Datei anklicke, diese bearbeite (Inhalt kommt schon, der geladenen Datei) und auf Speichern klicke, dann kommt jedes mal die Meldung,

Die Datei content/files/ausgewaehlte_datei.txt ist nicht schreibbar.

MfG, matibaski

[php]

<?php switch($_GET['file']) { case $file : include($handle.$file); break; } ?>

Versuchs mal so
[/php]

Danke.
Include hat vorher auch gefunzt, aber deine Lösung ist praktischer.

Wenn ihr wollt, dann probiert mal mein provisorisches Tool aus.
Hier:
http://habboville.paradoxe.de/Baska/admin/

Passwort ist: vitez

Und dann Links auf content bearbeiten.
Die Liste von 2 Dateien kommt. (Diese sind im FTP Ordner files/)

Klickt die data.txt an. Dort kommt der ursprüngliche Inhalt Start hinein und in das einzeilige Textfeld der Name der Datei.

Die data.txt ist in meiner Homepage includet.
Hier ist der direktlink zu der data.txt includition:
http://habboville.paradoxe.de/Baska/index.php?site=aktuelles&navig=aktuelles&lang=de

Hier erscheint auch Start.
Und nun wenn man etwas bearbeitet und speichert, dann sollte etwas anderes stehen.

Und ich denke, dass das Problem, „die Datei ist nicht schreibbar“, an der übermittlung liegt.
Hier ist nochmals meine content_insert.php:
[php]<?php
$filename = ‚content/files/‘.$_REQUEST[‚dataid‘]; // Dateiname wird bestimmt
$somecontent = ($_REQUEST[‚text‘]); // Übermittelter Inhalt

if (is_writable($filename))
{
if (!$handle = fopen($filename, „r+“))
{
print „Kann die Datei $filename nicht öffnen“;
exit;
}

if (!fwrite($handle, $somecontent))
{
print „Kann in die Datei $filename nicht schreiben“;
exit;
}

print „Fertig, die Datei $filename wurde erfolgreich verarbeitet.“;

fclose($handle);

} else {
print „Die Datei $filename ist nicht schreibbar“;
}
?>[/php]Seht ihr an diesem Code Fehler?
Es sollte eigentlich gehen.

Haben die Dateien data.txt denn chmod 777 oder 666?

777 haben sie, und es geht trotzdem nicht.

Das komische ist, dass es gestern noch funktioniert hat.
Ich habe aber an meinem content_insert.php nichts geändert sonder nur bei der editorseite.

Habe mein Problem selbst gelöst.
Es war nur ein Denkfehler.

Ich habe ja in der cotnent_insert.php den Pfad vom Ordner admin genommen anstatt vom Ordner content/

Denn content_insert.php ist ja im iFrame schlussendlich.

Danke für eure Hilfe.