PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Textdatei über php editieren


tnt1000
15.07.2003, 14:30:51
Hi,

ich bin absoluter PHP-Anfänger und weiss nischt - aber wirklich garnischt! Deshalb bitte ich euch mir für folgende Frage ggf. einen Code bereit zu stellen.

Ich habe in einem Verzeichniss auf einem Server eine Textdatei rumliegen die ich gerne ändern möchte.
Dazu brauche ich ein PHP-Script das in einem Frame (bsp IFrame) die Textdatei anzeigt sodass man sie editieren kann und über einen Button wieder speichern/überschreiben kann.

Ich glaube das ist für euch recht einfach.

Danke im Vorraus - ihr würdet mir damit wirklich sehr helfen!

mfG

toweter
15.07.2003, 14:57:40
http://www.gnuforum.de/arcmenue/projekt11/administration/projects/phpwiki_by_tobias/index.php?name=test&passwort=user&style=../../../../projekt09/css/stil01-css.css&language=deutsch&page=edit
dort auf "edit.php" klicken,
da kannst du dir das meiste rausschreiben...
hoffe, du kannst damit was anfangen;)

||EDIT:
Falls ein Admin mitliest:
Jedesmal, wenn ich die "Wer ist online?"-Site
anschaue wird angezeigt, dass ein Gast einen Beitrag meldet, ist das ein Fehler oder wird hier wirklich soviel gemeldet;)?

||EDIT2:
iframe wird wohl nicht möglich sein,
du meinst wahrscheinlich eine textarea...

tnt1000
15.07.2003, 15:05:30
au ne, da blicke ich nich durch!

lieber wäre mir ein fertiger code.... :)


Gruß

toweter
15.07.2003, 15:13:55
na gut...;)


if ($speichern) {
$fp = fopen("blablabla.txt", 'w');
$edit = $edit."n";
fputs($fp, $edit, strlen($edit));
fclose($fp);
}

if (!$speichern) {
$file = file_get_contents("blablabla.txt");
echo "<form name="filedit" action="$PHP_SELF" method="post">
<table><tr><td>
<textarea name="edit" cols="75" rows="30">$file</textarea>
</td></tr><tr><td align="right">
<input type="Submit" name="speichern" value="Speichern"></form>
</td></tr></table>";
}

tnt1000
15.07.2003, 15:17:32
danke für die schnelle Antwort

welcher chmod braucht dann die textdatei? 755 ??


Gruß!

toweter
15.07.2003, 15:19:47
ne, ich würd 777 nehmen,
755 ist ohne schreibrecht

tnt1000
15.07.2003, 15:23:39
mhhh,

ich bekomme da folgende Fehlermeldung:

"Fatal error: Call to undefined function: file_get_contents() "

toweter
15.07.2003, 15:25:48
deine php-version ist veraltet;)
du kannst statt file_get_contents auch verwenden:
$fp = fopen("blablabla.txt",'rb');
$file = fread($fp,filesize("blablabla.txt"));
fclose($fp);

tnt1000
15.07.2003, 15:28:43
also müsste alles dann so heissen:

<?
if ($speichern) {
$fp = fopen("test.txt", 'w');
$edit = $edit."n";
fputs($fp, $edit, strlen($edit));
fclose($fp);
}

if (!$speichern) {
$file = fread($fp,filesize("test.txt"));
echo "<form name="filedit" action="$PHP_SELF" method="post">
<table><tr><td>
<textarea name="edit" cols="75" rows="30">$file</textarea>
</td></tr><tr><td align="right">
<input type="Submit" name="speichern" value="Speichern"></form>
</td></tr></table>";
}
?>

oder?

toweter
15.07.2003, 15:31:38
fast;)
<?
if ($speichern) {
$fp = fopen("test.txt", 'w');
$edit = $edit."n";
fputs($fp, $edit, strlen($edit));
fclose($fp);
}

if (!$speichern) {
$fp = fopen("blablabla.txt",'rb');
$file = fread($fp,filesize("test.txt"));
fclose($fp);
echo "<form name="filedit" action="$PHP_SELF" method="post">
<table><tr><td>
<textarea name="edit" cols="75" rows="30">$file</textarea>
</td></tr><tr><td align="right">
<input type="Submit" name="speichern" value="Speichern"></form>
</td></tr></table>";
}
?>

tnt1000
15.07.2003, 15:37:48
SPITZE!!!

du weisst garnicht wieviel du mir damit geholfen hast......

DANKE nochmal!!!!!!!!!!


aber eine Frage hab ich da noch:

kann ich z.B. in das Script noch eine Funktion einbauen sodass die letzte Zeile der Textdatei nicht angezeit wird?

Gruß

toweter
15.07.2003, 15:42:23
z.B. so:
nach dem einlesen von $file
$array = split("[n]",$file);
array_pop($array);
for ($x=0;$x<count($array);$x++) {
if ($x < count($array)) $ausgabe = ($ausgabe.$array[$x]."n");
if ($x >= count($array)) $ausgabe = ($ausgabe.$array[$x]);
}
$file = $ausgabe;

müsste so klappen(?)

tnt1000
15.07.2003, 15:50:47
also dann wieder alles zusammen so?

<?
if ($speichern) {
$fp = fopen("test.txt", 'w');
$edit = $edit."n";
fputs($fp, $edit, strlen($edit));
fclose($fp);
}

if (!$speichern) {
$fp = fopen("blablabla.txt",'rb');
$file = fread($fp,filesize("test.txt"));
fclose($fp);
echo "<form name="filedit" action="$PHP_SELF" method="post">
<table><tr><td>
<textarea name="edit" cols="75" rows="30">$file</textarea>
</td></tr><tr><td align="right">
<input type="Submit" name="speichern" value="Speichern"></form>
</td></tr></table>";
}

$array = split("[n]",$file);
array_pop($array);
for ($x=0;$x<count($array);$x++) {
if ($x < count($array)) $ausgabe = ($ausgabe.$array[$x]."n");
if ($x >= count($array)) $ausgabe = ($ausgabe.$array[$x]);
}
$file = $ausgabe;

?>




ODER?

toweter
15.07.2003, 15:52:15
direkt nach "fclose($fp);",
damits in der textarea auch so angezeigt wird...

tnt1000
15.07.2003, 15:57:17
weil ich mir nbich sicher war hinter welches fclose hab ichs mal hinter das 1. gesetzt, so ok??:

<?
if ($speichern) {
$fp = fopen("test.txt", 'w');
$edit = $edit."n";
fputs($fp, $edit, strlen($edit));
fclose($fp);
$array = split("[n]",$file);
array_pop($array);
for ($x=0;$x<count($array);$x++) {
if ($x < count($array)) $ausgabe = ($ausgabe.$array[$x]."n");
if ($x >= count($array)) $ausgabe = ($ausgabe.$array[$x]);
}
$file = $ausgabe;
}

if (!$speichern) {
$fp = fopen("blablabla.txt",'rb');
$file = fread($fp,filesize("test.txt"));
fclose($fp);
echo "<form name="filedit" action="$PHP_SELF" method="post">
<table><tr><td>
<textarea name="edit" cols="75" rows="30">$file</textarea>
</td></tr><tr><td align="right">
<input type="Submit" name="speichern" value="Speichern"></form>
</td></tr></table>";
}



?>

toweter
15.07.2003, 16:01:31
hinters zweite, es soll ja nach dem einlesen die letzte zeile entfernt werden...
<?
if ($speichern) {
$fp = fopen("test.txt", 'w');
$edit = $edit."n";
fputs($fp, $edit, strlen($edit));
fclose($fp);
}

if (!$speichern) {
$fp = fopen("blablabla.txt",'rb');
$file = fread($fp,filesize("test.txt"));
fclose($fp);
$array = split("[n]",$file);
array_pop($array);
for ($x=0;$x<count($array);$x++) {
if ($x < count($array)) $ausgabe = ($ausgabe.$array[$x]."n");
if ($x >= count($array)) $ausgabe = ($ausgabe.$array[$x]);
}
$file = $ausgabe;

echo "<form name="filedit" action="$PHP_SELF" method="post">
<table><tr><td>
<textarea name="edit" cols="75" rows="30">$file</textarea>
</td></tr><tr><td align="right">
<input type="Submit" name="speichern" value="Speichern"></form>
</td></tr></table>";
}



?>

tnt1000
15.07.2003, 16:14:14
hi nochmal,

funktioniert leider nicht! Die letzte Zeile wird weiterhin angezeigt.

Noch ne' Idee?


bzw. er macht bei jedem ""(=Gänsefüßchen) ein vor und ein zwischen die Gänsefüßchen, das soll auch nich sein...

toweter
15.07.2003, 16:18:37
ne, hab sonst keine idee...

wg den :
statt
if ($speichern) {
$fp = fopen("test.txt", 'w');
$edit = $edit."n";
fputs($fp, $edit, strlen($edit));
fclose($fp);
}
das:
if ($speichern) {
$edit = stripslashes($edit);
$fp = fopen("test.txt", 'w');
$edit = $edit."n";
fputs($fp, $edit, strlen($edit));
fclose($fp);
}

tnt1000
15.07.2003, 16:28:55
....das hab ich gemacht!

jetzt kommt statt jeweil ein immer gleich drei Stück davon.

muss das vielleicht beim zweiten !speichern auch hin?

kannst nochmal dann den ganzen heilen code posten, bitte!


Grüße!

tnt1000
15.07.2003, 16:36:35
so, habs jetzt hinbekommen!

Aber wie macht man jetzt noch das wenn man Speichern geklickt hat das keine leere Seite kommt, sondern man wieder auf die ausgangsseite kommt - aber die veränderungen sollten schon drin sein!

toweter
15.07.2003, 16:39:47
war grad schon dabei ne antwort für das vorhin zu schreiben;)
vielleicht so:
<?
if ($speichern) {
$edit = stripslashes($edit);
$fp = fopen("test.txt", 'w');
$edit = $edit."n";
fputs($fp, $edit, strlen($edit));
fclose($fp);
$speichern = ("");
}

chris17
15.07.2003, 16:46:03
vielleicht auch so
unset($speichern);
Bei
$speichern = ("");
existiert ja $speichern weiter, oder?

tnt1000
15.07.2003, 16:48:42
Also das ganze sieht bei mir jetzt so aus:

<?
if ($speichern) {
$edit = stripslashes($edit);
$fp = fopen("/var/www/web1/hlds_l/cstrike/server.cfg", 'w');
$edit = $edit."n";
fputs($fp, $edit, strlen($edit));
fclose($fp);
}

if (!$speichern) {
$edit = stripslashes($edit);
$fp = fopen("/var/www/web1/hlds_l/cstrike/server.cfg",'rb');
$file = fread($fp,filesize("/var/www/web1/hlds_l/cstrike/server.cfg"));
fclose($fp);
echo "<form name="filedit" action="$PHP_SELF" method="post">
<table><tr><td>
<textarea name="edit" cols="75" rows="30">$file</textarea>
</td></tr><tr><td align="right">
<input type="Submit" name="speichern" value="Speichern"></form>
</td></tr></table>";
}
?>


Kannste dann mal den ganzen Code nochmal posten wie es jetzt insgesamt sein müsste?

P.S. kannst du noch eine möglichkeit reinbringen das man erst ein passwort angeben muss bevor man zu dier "veränderungsseite" gelangt?

Gruß

toweter
15.07.2003, 16:48:56
ich glaub es reicht auch
$speichern = ("");

Test-Script:
if ($abc) {
echo "abc";
$abc = ("");
}
if (!$abc) {
echo "def";
}

Gleich hier erreichbar:
http://tpwla.de/script/pages/abc.php?abc=ja

tnt1000
15.07.2003, 16:54:17
ne, ich dachte daran das dort ein textfeld ist was man ausfüllen muss mit einem passwort.

und wenn das stimmt so wie es im quelltext is dann soll er die richtige funktion anzeigen.

wo soll ich das speichern"" einfügen?? nach dem 2. fclose direkt?

toweter
15.07.2003, 16:55:58
<?
if (!$passwort or $passwort != "wasweisich") {
echo "<form name="login" action="$PHP_SELF" method="post">
<table><tr><td>Passwort:</td><td><input type="password" name="passwort"></td></tr><tr><td></td><td align="right"><input type="submit" value="Login"></td></tr></table></form>";
exit();
}

if ($speichern) {
$edit = stripslashes($edit);
$fp = fopen("/var/www/web1/hlds_l/cstrike/server.cfg", 'w');
$edit = $edit."n";
fputs($fp, $edit, strlen($edit));
fclose($fp);
$speichern = ("");
}

if (!$speichern) {
$file = stripslashes($file);
$fp = fopen("/var/www/web1/hlds_l/cstrike/server.cfg",'rb');
$file = fread($fp,filesize("/var/www/web1/hlds_l/cstrike/server.cfg"));
fclose($fp);
echo "<form name="filedit" action="$PHP_SELF" method="post">
<table><tr><td>
<textarea name="edit" cols="75" rows="30">$file</textarea>
</td></tr><tr><td align="right">
<input type="hidden" name="passwort" value="$passwort"><input type="Submit" name="speichern" value="Speichern"></form>
</td></tr></table>";
}
?>

||EDIT:
@tnt1000: dein letztes posting kapier ich nicht...,
mein posting von 16:48 war an chris17 gerichtet, wenn du das meinst...

chris17
15.07.2003, 16:56:01
@toweter
Hast recht, funktioniert.

tnt1000
15.07.2003, 17:01:41
Jep, nun geht alles wie ich es mir vorgestelle habe. Nun kann ich mit dem Design beginnen :)

Vielen herzlichen Dank nochmal an dich!

Gruß