PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ein Problem mit php



deniz1
13.10.2008, 22:55
Hallo liebe gmod.de Community,

ich bin beim aufbau eines kleinen Admin Panels.
Ich habe mit php und HTML versucht Templates bzw. .txt Dateien zu öffnen, Editieren und abzuspeichern. Doch anscheinend mache ich etwas dabei falsch.
Die .txt Datei wird geöffnet in der "textarea" und ich kann sie ändern doch nicht abspeichern...



<form action=" <? $PHP_SELF; ?>" method ="post">
<textarea name="inhalt" rows=20 cols=80 wrap="virtual">


<?php include("test.txt"); ?>

</textarea>
<input name="submit" type="submit" id="submit" value="Abschicken">
<input type="reset" name="Submit2" value="Reset">


<?php if ($submit == "Abschicken")
{
$fp = fopen("../klongb.css","w");
$data ="$inhalt";
$data = str_replace("\r","",$data);
fputs($fp,$data);
fclose($fp);

$check_ok = "<font color = 'red'>Ihre Datei wurde erfolgreich geändert!</font>";
echo "$check_ok";
}
?>

</form>



<form action="<?php $_SERVER['PHP_SELF']; ?>" method ="post">
<textarea name="inhalt" rows=20 cols=80 wrap="virtual">
<?php include("test.txt"); ?>
</textarea>
<input name="submit" type="submit" id="submit" value="Abschicken">
<input type="reset" name="Submit2" value="Reset">

<?php
if ($submit == "Abschicken")
{
$fp = fopen("test.txt","w");
$data ="$inhalt";
$data = str_replace("\r","",$data);
fputs($fp,$data);
fclose($fp);

$check_ok = "<font color = 'red'>Ihre Datei wurde erfolgreich geändert!</font>";
echo "$check_ok";
}
?>
</form>


Ich hoffe ihr könnt mir Helfen...

xan
14.10.2008, 11:36
<?php
$data = $_REQUEST['inhalt'];

if ($data)
{
$fp = fopen("test.txt","w");
$data = str_replace("\r","",$data);
fputs($fp,$data);
fclose($fp);

echo "<font color = 'red'>Ihre Datei wurde erfolgreich geändert!</font>";
}
?>

<form action="<?php $_SERVER['PHP_SELF']; ?>" method ="post">
<textarea name="inhalt" rows=20 cols=80 wrap="virtual">
<?php include("test.txt"); ?>
</textarea>
<input name="submit" type="submit" id="submit" value="Abschicken">
<input type="reset" name="Submit2" value="Reset">
</form>

So ist richtig.
Du hast die Variablen aus der "Form" falsch übergeben, du musst nicht überprüfen ob die Value "Submit" ist, sondern ob der Inhalt der durch "Submit" übergeben wird vorhanden ist.

SMILIE
14.10.2008, 12:09
<form action="" method ="post">
<textarea name="inhalt" rows=20 cols=80 wrap="virtual">
<?php include("test.txt"); ?>
</textarea>
<input name="submit" type="submit" id="submit" value="Abschicken">
<input type="reset" name="Submit2" value="Reset">

<?php
if (isset($_POST['submit']) && isset($_POST['inhalt']) && $_POST['inhalt'] != "")
{
$fp = fopen("test.txt","w");
$data ="$inhalt";
$data = str_replace("\r","",$data);
fputs($fp,$data);
fclose($fp);

$check_ok = "<font color = 'red'>Ihre Datei wurde erfolgreich geändert!</font>";
echo "$check_ok";
}
?>
</form>

Die Form mit der method post ist nicht umsonst da!
Du greifst auf irgendwelche Formfelder wenn du als method post hast mit

$_POST['name']
zu und wenn du als method get hast mit

$_GET['name']
zu.

Die action kann man einfach leer lassen, wenn man nicht auf eine andere Datei verweist.

xan
14.10.2008, 13:15
<?php
if (isset($_POST['submit']) && isset($_POST['inhalt']) && $_POST['inhalt'] != "")
{
$fp = fopen("test.txt","w");
$data ="$inhalt";
$data = str_replace("\r","",$data);
fputs($fp,$data);
fclose($fp);

$check_ok = "<font color = 'red'>Ihre Datei wurde erfolgreich geändert!</font>";
echo "$check_ok";
}
?>
</form>

Die Form mit der method post ist nicht umsonst da!
Du greifst auf irgendwelche Formfelder wenn du als method post hast mit

$_POST['name']
zu und wenn du als method get hast mit

$_GET['name']
zu.

Die action kann man einfach leer lassen, wenn man nicht auf eine andere Datei verweist.

Die If-Abfrage halt ich für zu umständlich und sinnlos, es reicht doch einfach zu überprüfen ob das Textfeld vorhanden ist, vielleicht will man, wenn man etwas neues in die Textdatei schreibt auch ein leeres Feld reinschreiben.
Sicherheitstechnisch muss sowieso noch sehr viel an dem Script gemacht werden.

Außerdem funktioniert deine Variante nicht, da $data immer noch falsch zugewiesen wird.

SMILIE
14.10.2008, 14:22
Die If-Abfrage halt ich für zu umständlich und sinnlos, es reicht doch einfach zu überprüfen ob das Textfeld vorhanden ist, vielleicht will man, wenn man etwas neues in die Textdatei schreibt auch ein leeres Feld reinschreiben.
Sicherheitstechnisch muss sowieso noch sehr viel an dem Script gemacht werden.

Außerdem funktioniert deine Variante nicht, da $data immer noch falsch zugewiesen wird.

Ups, hab vergessen das nach dem if zu ändern (war grad in der Schule und hab das so nebenbei während dem Unterricht geschrieben).


<form action="" method ="post">
<textarea name="inhalt" rows=20 cols=80 wrap="virtual">
<?php include("test.txt"); ?>
</textarea>
<input name="submit" type="submit" id="submit" value="Abschicken">
<input type="reset" name="Submit2" value="Reset">

<?php
if (isset($_POST['inhalt']))
{
$fp = fopen("test.txt","w");
$data =$_POST['inhalt'];
$data = str_replace("\r","",$data);
fputs($fp,$data);
fclose($fp);

$check_ok = "<font color = 'red'>Ihre Datei wurde erfolgreich geändert!</font>";
echo "$check_ok";
}
?>
</form>

So sollte es funktionieren.

deniz1
14.10.2008, 14:46
Vielen Dank an euch Beide!
Doch jetzt ist mir aufgefallen das beim klicken von " Absenden " mal der vorherige Text angezeigt wird und mal den ich eingeschrieben habe...

SMILIE
14.10.2008, 15:13
Das liegt daran das zuerst die Datei ausgegeben wird und dann erst geschrieben.

<?php
if (isset($_POST['inhalt']))
{
$fp = fopen("test.txt","w");
$data =$_POST['inhalt'];
$data = str_replace("\r","",$data);
fputs($fp,$data);
fclose($fp);

$check_ok = "<font color = 'red'>Ihre Datei wurde erfolgreich geändert!</font>";
echo "$check_ok";
}
?>
<form action="" method ="post">
<textarea name="inhalt" rows=20 cols=80 wrap="virtual">
<?php include("test.txt"); ?>
</textarea>
<input name="submit" type="submit" id="submit" value="Abschicken">
<input type="reset" name="Submit2" value="Reset">
</form>

So funktioniert es!

deniz1
14.10.2008, 15:16
-lol-
Es geht ab etwas Falsch übertragen...
Danke an euch Beide!


Kann man auf eine Datei zugreifen die in einem anderem Ordner ist?
zb.
ich will auf impressum.php von .../test-ordner/index.php zugreifen?

xan
14.10.2008, 16:09
Kann man auf eine Datei zugreifen die in einem anderem Ordner ist?
zb.
ich will auf impressum.php von .../test-ordner/index.php zugreifen?

Jap,
http://de.php.net/manual/de/function.fopen.php -> Beispiel #1

deniz1
14.10.2008, 17:16
Das verstehe ich irgendwie nicht.

Ich will von einem Ordner auf einen zurückliegenden Ordner zugreifen können.

xan
14.10.2008, 17:28
Du kannst ein Verzeichnis mit "../" zurückgehen.
Also wenn jetzt deine PHP-Datei im Ordner "Hallo" liegt, und deine TXT ein Verzeichnis darüber, wäre der Link von der PHP-Datei aus:


../datei.txt

Genau so kann man auch mehrere Verzeichnisse zurückgehen:


../../../datei.txt

deniz1
14.10.2008, 17:45
Danke, xan!

Scarecrow
15.10.2008, 12:34
Ich würde dir für die Zukunft eine Entwicklungsumgebung empfehlen, sowas wie Dreamweaver.

xan
15.10.2008, 15:27
Ich würde dir für die Zukunft eine Entwicklungsumgebung empfehlen, sowas wie Dreamweaver.

Für PHP meiner Meinung nach nicht wirklich gut geeignet, außerdem ist er richtig teuer. :roll:

Wenn es rein um PHP geht, würde ich PHPEdit (http://www.phpedit.com) empfehlen. Für "Lernzwecke" bzw. Schüler ist der kostenlos.

deniz1
15.10.2008, 15:31
Jo, ich werde mir so ein Programm besorgen.

Etwas stimmt anscheinend nicht, immer wenn ich zb. die index.php über das Admin CP ändern will geschied das:
Vor der änderung / Benutzung des Speichern Buttons:

<a href="index.php"><div id="header">

Nahc der Benutzung des Speichern Buttons:

<a href=\"index.php\"><div id=\"header\">

Bei jedem Klick auf den Speichern Button erscheint ein "/" mehr...
Ist was am Code falsch?