PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Txt Datei anzeigen und speichern...?



Armitage2k
31.08.2006, 05:06
ich hab da mal kurz ne frage:

ich moechte gerne eine TXT datei auf meinem server in einem textfeld auf einer seite anzeigen lassen, diese dann nach belieben editieren und auch speichern koennen. alles von einer html seite aus.
jetzt isses aber so, dass ich in der txt einen html quelltext stehen hab, daher is PHP include() schon mal hinfaellig. aber wie wuerde ich dass dann anstellen? kann mir vielleicht da jemand ein kleines beispiel posten wie ich das am besten mache?

thx alot,
A2k

ice cold killa
31.08.2006, 09:44
Zum anzeigen Stimmt include();...

Könntest ja acuh php sachen reinschreiben aber nicht auf die


<?php
//code
?>

vergessen xD

Zum editieren machste dann fwrite()

Guck am besten mal auf php.net (http://at.php.net/manual/de/function.fwrite.php)

Ich hoff das ich helfen konnte

mfg

edit();

Öhm machs mal so:

Du machst ne Textarea (<textarea>)
Dazwischen machste das include()
Und dann </textarea>

Dann bleibt der Text so wie er in der .txt steht und man kann ihn auch gleich bearbeiten =P

DFYX
31.08.2006, 11:13
Include ist nicht sonderlich toll, weil dann php Code ausgeführt wird. Folgendes würde ich vorschlagen (vereinfacht dargestellt)



<?php
if($_POST['text'])
file_put_contents('datei.txt', $_POST['text']);
?>
<form action="textedit.php" method="post">
<textarea name="text"><?php echo file_get_contents('datei.txt'); ?></textarea>
<input type="submit" name="submit" value="Speichern" />
</form>

In einem Textfeld sollte HTML-Code eigentlich nicht geparst werden und wenn doch, packste noch htmlentities() um das file_get_contents().

mitaki
31.08.2006, 13:25
In einem Textfeld sollte HTML-Code eigentlich nicht geparst werden [...]
Falsch. In einer <textarea> befinden sich geparste Zeichendaten, wie beispielsweise auch im <title> Tag. Obwohl HTML darin nicht erlaubt ist müssen die Sonderzeichen &, <, >, " und ' maskiert werden (&amp;, &lt;, &gt;, &quot; und &#39;). Vor allem '</' ist dabei gefährlich. Aber ja, htmlentities() oder htmlspecialchars() sorgt für Abhilfe.

Weitere Anmerkung:
file_get_contents() gibt es erst ab PHP 4.3 und
file_put_contents() erst ab PHP 5.
Glaube aber, dass es für PHP 4 eine PEAR Klasse gibt die letztere Funktion emuliert (Wo hatte ich das nur gelesen, glaube hier im Forum x.x).

Dingsi
31.08.2006, 14:36
Glaube aber, dass es für PHP 4 eine PEAR Klasse gibt die letztere Funktion emuliert (Wo hatte ich das nur gelesen, glaube hier im Forum x.x).Notfalls macht man einfach...
if(!function_exists("file_put_contents"))
{
function file_put_contents($filename, $data)
{
$f=fopen($filename, "w");
fwrite($f,$data);
fclose($f);
}
}

Armitage2k
03.09.2006, 20:19
<?php
if($_POST['text'])
file_put_contents('news_index.txt', $_POST['text']);
?>
<form action="textedit.php" method="post">
<textarea name="text"><?php echo file_get_contents('news_index.txt'); ?></textarea>
<input type="submit" name="submit" value="Speichern" />
</form>


hab mir das alles mal bisher so zusammengebastelt, lediglich eine sache ist mir noch unklar. bei <form action="textedit.php"> wird der inhalt des textfelds diese datei weitergeleitet (zum parsen), jedoch will ich nicht das da irgendwas geparst wird. ich will das der inhalt des textfelds genauso wie er ist in die textdatei (index_news.txt) geschrieben wird, und wenn notwendig, sollte der inhalt der textdatei überschrieben werden.

thx alot
A2k

Dingsi
03.09.2006, 20:25
<?php
if($_POST['text'])
file_put_contents('news_index.txt', $_POST['text']);
?>
<form action="textedit.php" method="post">
<textarea name="text"><?php echo file_get_contents('news_index.txt'); ?></textarea>
<input type="submit" name="submit" value="Speichern" />
</form>


hab mir das alles mal bisher so zusammengebastelt, lediglich eine sache ist mir noch unklar. bei <form action="textedit.php"> wird der inhalt des textfelds diese datei weitergeleitet (zum parsen), jedoch will ich nicht das da irgendwas geparst wird. ich will das der inhalt des textfelds genauso wie er ist in die textdatei (index_news.txt) geschrieben wird, und wenn notwendig, sollte der inhalt der textdatei überschrieben werden.

thx alot
A2kWas genau meinst du mit "das wird weitergeleitet zum parsen"? Wenn du im Script nichts tust als das ganze zu speichern wird auch nichts "geparst". http://mistburg.de/smilr/out/phpbb_neutral.png

Armitage2k
03.09.2006, 20:43
ich hab da ein bisschen umständlich ausgedrückt. hier ist mal alles was ich bisher so alles am ursprünglichen code gedreht hab:



<?php
if($_POST['text'])
file_put_contents('index_news.txt', $_POST['text']);
?>
<form method="post" action="textedit.php" name="source_edit" id="formular">
<table>
<tr>
<td style="padding:2px"><strong>News_Index.txt Source Inhalt:</strong></td>
</tr>
<tr>
<td style="padding:2px">
<textarea cols="140" rows="15" name="text">

<?php echo file_get_contents('index_news.txt'); ?>

</textarea>
</td>
</tr>
<tr>
<td style="padding:2px">•</td>
<td style="padding:2px">
<br />
<center>
<input name="submit" type="submit" id="speichern" value="Speichern" />
<input name="loeschen" type="reset" id="loeschen" value="Zur&uuml;cksetzen" />
</center>
</td>
</tr>
</table>
</form>


Mein Problem ist jetzt diese Zeile


<form method="post" action="textedit.php" name="source_edit" id="formular">


Der Inhalt des Textfeldes wird an die Datei Textedit.php geposted, welche normalerweise einen PHP Code zum parsen beinhaltet. Da ich aber keine solche Datei erstellt habe, kann er den Post-Befehl nicht ausführen, ergo wird nichts in die Textdatei geschrieben.
Also bleibt mir nur die Frage, wenn ich die Textedit.php Datei erstellt habe, was ich da reinschreiben muss damit der Inhalt des Textfelds genauso in der Textdatei gespeichert wird wie er ist?

Ich hoffe das ist jetzt ein bisschen verständlicher.
Thx,

A2k

Dingsi
03.09.2006, 20:46
2. Was soll ich da reinschreiben damit der Inhalt des Textfelds genauso in der Textdatei gespeichert wird wie er ist?Die Datei in der
<?php
if($_POST['text'])
file_put_contents('index_news.txt', $_POST['text']);
?> Der Code zum speichern steht.

Irgendwie hab ich das Gefühl, dass du nicht ganz verstanden hast, was der bewirkt. Das ist nicht gut. o.o

Armitage2k
03.09.2006, 21:08
Die Datei in der
<?php
if($_POST['text'])
file_put_contents('index_news.txt', $_POST['text']);
?> Der Code zum speichern steht.

Irgendwie hab ich das Gefühl, dass du nicht ganz verstanden hast, was der bewirkt. Das ist nicht gut. o.o


Da hast du absolut recht :D

Hab jetzt den file_put_contents und file_get_contentsCode mal in meinem PHP Buch nachgeschlagen und langsam krieg ich ne Vorstellung davon was eigentlich los ist ;)
Aber dann erlaub mir noch schnell ne N00B Frage: Wofür brauch ich dann den <form action="textedit.php"> Tag und was soll dann der Verweis auf diese Datei?

Sorry für derartige Fragen, aber irgendwie hab ich grad nen Knoten im Hirn.

Dingsi
03.09.2006, 21:18
Hab jetzt den file_put_contents und file_get_contentsCode mal in meinem PHP Buch nachgeschlagen und langsam krieg ich ne Vorstellung davon was eigentlich los ist ;)Gut so. http://mistburg.de/smilr/out/smile2.png
Aber dann erlaub mir noch schnell ne N00B Frage: Wofür brauch ich dann den <form action="textedit.php"> Tag und was soll dann der Verweis auf diese Datei?Mit FORM erstellt man ein HTML-Formular, eine Ansammlung von Informationen, die an ein Skript o.a. geschickt werden kann. Das ACTION-Attribut gibt an, wohin die Informationen geschickt werden sollen. In deinem Fall müssen sie an das Script, welches sie in die Datei schreibt geschickt werden. Also das Script mit dem file_put_contents(). http://mistburg.de/smilr/out/smile.png

Armitage2k
03.09.2006, 21:47
Merci.

Das einzige was mir jetzt also zum Einzug in den PHP Himmel feht ist eine lauffähige Textedit.php Datei.
Hab mir deine Vorgabe mal kurz angesehen und sie in die Datei eingebunden. Herausgekommen ist das und die Tatsache dass es nicht geht ;)



<?php

if (!function_exists("file_put_contents"))
{
function file_put_contents($filename, $data)
{
$f=fopen($filename, "w");
fwrite($f,$data);
fclose($f);
}
}

echo "<script>self.location=\"news_success.php\";</script>";
?>


Variablen müsste ich noch definieren, aber handelt es sich jetzt um die textdatei oder um die datei selber...? Werd aus dem Script echt nicht schlau... (was daran liegt dass ich erst vor ner stunde ausm bett bin ^_^" ).
Sorry für die schwere Geburt,

A2k

drunken monkey
03.09.2006, 23:09
Du brauchst nicht unbedingt eine eigene Textedit.php-Datei. Wenn deine ursprüngliche Datei so aussieht wie du's hier (http://www.multimediaxis.de/showpost.php?p=1560707&postcount=8) beschrieben hast, dann genügt es, ins form-Tag als Aktion die Datei selbst reinzuschreiben. Also wenn die Datei mit dem Textfeld z.B. "index.php" heißt, schreibst du das Form-Tag so: <form method="post" action="index.php" name="source_edit" id="formular">

Dadurch wird dann die Seite nochmal aufgerufen, und zwar mit den Daten aus dem Textfeld in der $_POST['text']-Variablen. Am Anfang der PHP-Datei wird dann überprüft, ob diese Variable vorhanden ist. Da's sie's ist, wird ihr Inhalt in die Datei "index_news.txt" gespeichert.

Ich hoffe, jetzt ist's verständlich. ^^
Den Code, den du für die "textedit.php"-Datei nehmen wolltest bewirkt etwas völlig anderes, er ist nämlich nur dazu da, die Funktion "file_put_contents ()" zu definieren (nicht auszuführen), falls sie nicht vorhanden ist. Das müsstest du (ohne das "echo ..." am Ende)in eine zusätzliche PHP-Datei schreiben und diese dann per include () in die Haupt-Datei einfügen, falls du eine ältere PHP-Version benutzt. Aber probier's erstmal ohne. ^^''

Armitage2k
03.09.2006, 23:20
Du brauchst nicht unbedingt eine eigene Textedit.php-Datei. Wenn deine ursprüngliche Datei so aussieht wie du's hier (http://www.multimediaxis.de/showpost.php?p=1560707&postcount=8) beschrieben hast, dann genügt es, ins form-Tag als Aktion die Datei selbst reinzuschreiben. Also wenn die Datei mit dem Textfeld z.B. "index.php" heißt, schreibst du das Form-Tag so: <form method="post" action="index.php" name="source_edit" id="formular">

Dadurch wird dann die Seite nochmal aufgerufen, und zwar mit den Daten aus dem Textfeld in der $_POST['text']-Variablen. Am Anfang der PHP-Datei wird dann überprüft, ob diese Variable vorhanden ist. Da's sie's ist, wird ihr Inhalt in die Datei "index_news.txt" gespeichert.

Ich hoffe, jetzt ist's verständlich. ^^
Den Code, den du für die "textedit.php"-Datei nehmen wolltest bewirkt etwas völlig anderes, er ist nämlich nur dazu da, die Funktion "file_put_contents ()" zu definieren (nicht auszuführen), falls sie nicht vorhanden ist. Das müsstest du (ohne das "echo ..." am Ende)in eine zusätzliche PHP-Datei schreiben und diese dann per include () in die Haupt-Datei einfügen, falls du eine ältere PHP-Version benutzt. Aber probier's erstmal ohne. ^^''

Jo, jetzt hauts hin, und endlich kapier ich auch warum ^_^
Hab mich am anfang gewundert warum ich die aktion an die textedit.php posten sollte, wenn ich doch nix parsen wil.. jetz weiss ich warum. dingsy/fu is davon ausgegangen dass da den namen der PHP datei mit dem formular reinschreib :D

Vielen Dank an alle.
A2k

@drunken_monkey warum hat das so lange gedauert?? bei php fragen bist du ja sonst immer der erste der ne wunderlösung postet ;)

drunken monkey
03.09.2006, 23:50
Jo, jetzt hauts hin, und endlich kapier ich auch warum ^_^
Na super! :D

@drunken_monkey warum hat das so lange gedauert?? bei php fragen bist du ja sonst immer der erste der ne wunderlösung postet ;)
Naja, ich dachte eigentlich immer, es ist schon alles klar. ^^' Aber beim letzten Post habe ich dann gemerkt, dass du das insgesamt noch nicht wirklich verstanden hast und mich eingeklinkt. ^^
Außerdem bin ich gerade bei PHP eher einer der schlechteren im Forum, keine Ahnung, wie ich zur Ehre deiner Einschätzung komme. o_O' http://www.multimediaxis.de/images/smilies/old/szuck.gif