Inhalt eines Textfeldes abspeichern
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
attribut
code
dank
date
datei
dateiname
editor
enden
ergebnis
fehlermeldung
file
form
http
index
sache
sicherheitsmechanismus
sinn
speichern
url
zeile
-
Hallo
Ich möchte den Inhalt einer Textbox unter einem bestimmten Namen abspeichern. So weit bin ich schon:
<form method="POST"> <p> <textarea name="content" rows="20" cols="67"> </textarea> </p> <p> Name: <input type="text" name="name" size="35" /> </p> <p> <input type="submit" name="send" value="Speichern" /> </p> </form>
Aber was muss ich jetzt noch php - mäßig machen? In Foren habe ich auch noch nichts für den Dateinamen gefunden... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
bladehunter schrieb:
In welcher Form willst du die Sachen denn speichern? Willst du das Ergebnis in eine Datei speichern oder in einer MySQL Datenbank?
Was ist der größere Sinn der Sache?
Ich will, dass der Inhalt des Textfeldes als Textdatei am Server im gleichem Verzeichnis abgespeichert wird um es dann in eine andere Seite einzubinden.
Ähnlich wie bei Beiträgen in Joomla. -
<?php if( isset( $_POST[ 'content' ] ) ) { $file = fopen( 'name.txt', 'w' ); fwrite( $file, htmlentities( $_POST[ 'content' ] ) ); fclose( $file ); } ?>
Das schreibt dann in eine Datei mit dem Namen "name.txt", wenn der Wert für "content" übertragen wurde.
Wenn in die Datei geschrieben wird, wird vorher mit htmlentities() noch dafür gesorgt, dass Zeichen wie < > escaped werden, damit andere Leute dir nicht deinen HTML Code zerhauen können, wenn die Datei dann wieder in deine Webseite eingebaut wird.
Du musst bei deinem Form noch das Attribut
action="pdaf/name_der_php_datei.php"
hinzufügen. Außerdem solltest du besser
method="post"
(also klein) notieren, weil das der Standard vorsieht.
Beitrag zuletzt geändert: 9.12.2012 16:49:31 von bladehunter -
Das ist in der Tat möglich. Aber da ich annehme, dass du von PHP nicht so viel Ahnung hast, rate ich dir eher davon ab, das zu benutzen. Schließlich kann man dann auch einfach einen Dateinamen angeben, der identisch ist mit einer wichtigen, bereits existierenden Datei ist. Und so könnte dann jemand einfach deine Dateien überschreiben und beliebigen Code ausführen.
Wenn du den Dateinamen mit übergeben willst, wäre der Code:
<?php if( isset( $_POST[ 'content' ] ) && isset( $_POST[ 'name' ] ) ) { $filename = $_POST[ 'name' ]; //hier sollte man noch Sicherheitsmechanismen einbauen! $file = fopen( $filename, 'w' ); fwrite( $file, htmlentities( $_POST[ 'content' ] ) ); fclose( $file ); } ?>
-
Ja, das ist möglich. Schematisch:
<html>[...] <body> [mein Code] [dein HTML Code] </body></html>
Und du könntest noch zusätzlich in meinem Code die Zeile
echo "In Datei geschrieben";
nach der fclose-Zeile schreiben, um eine Rückmeldung zu bekommen.
Du solltest PHP lernen, wenn du in der Richtung noch was größeres vor hast. Dann kriegst du diese Dinge auch alleine hin.
Beitrag zuletzt geändert: 9.12.2012 17:21:18 von bladehunter -
Es funktioniert seltsamerweise nicht!
Ich habe eine Date namens index.html erstellt und hochgeladen mit folgendem Inhalt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Editor</title> </head> <body> <?php if( isset( $_POST[ 'content' ] ) && isset( $_POST[ 'name' ] ) ) { $filename = $_POST[ 'name' ]; //hier sollte man noch Sicherheitsmechanismen einbauen! $file = fopen( $filename.".html", 'w' ); fwrite( $file, htmlentities( $_POST[ 'content' ] ) ); fclose( $file ); echo "In Datei geschrieben" } ?> <form method="post"> <p> <textarea name="content" rows="20" cols="67"></textarea> </p> <p> Name: <input type="text" name="names" size="35" /> </p> <p> <input type="submit" name="send" value="Speichern" /> </p> </form> </body> </html>
1. Es kommt keine Bestätigung durch echo
2. Es entsteht keine Datei
Ich danke schon im Voraus für Hilfe -
l001ol schrieb:
Das kann so auch gar nicht funktionieren. Damit das was wird musst du die Datei auch auf
Es funktioniert seltsamerweise nicht!
Ich habe eine Date namens index.html erstellt und hochgeladen […]
enden lassen.php
-
l001ol schrieb:
Das deutet auf einen Fehler hin. Am einfachsten wäre es, wenn du die Ausgabe von Fehlermeldungen aktivierst, so wie dies hier beschrieben wird.
Als .php kommt nur ein leeres Bild... -
Parse error: syntax error, unexpected '}', expecting ',' or ';' in /home/webpages/lima-city/l001ol/html/phpuebungen/editor.php on line 13 -
l001ol schrieb:
Es funktioniert seltsamerweise nicht!
Ich habe eine Date namens index.html erstellt und hochgeladen mit folgendem Inhalt:
Wie hackyoulife bereits gesagt hat, muss die Datei die Endung .php haben.
Außerdem hast du nicht folgende Änderung vorgenommen:
bladehunter schrieb:
Du musst bei deinem Form noch das Attribut
action="pfad/name_der_php_datei.php"
hinzufügen.
In dem Fall muss der name_der_php_datei.php natürlich editor.php heißen, sofern du das alles in die Datei editor.php reingeschrieben hast.
Und am Ende von Zeile 13 fehlt ein Semikolon (also die Zeile mit dem echo)
edit: Du brauchst allerdings keinen eigenen Editor für deinen Webspace schreiben. Du kannst einfach den Filemanager benutzen und dann (nachdem du dich eingeloggt hast) kannst du auf der rechten Seite auf "bearbeiten" klicken, um eine Datei online zu verändern. Und eine neue Datei kannst du auch mit einem entsprechendem Button anlegen.
Beitrag zuletzt geändert: 9.12.2012 18:20:43 von bladehunter -
aber so funktioniert das speichern und das echo trotzdem nicht...
hier übrigens die seite: http://l001ol.lima-city.de/phpuebungen/index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> </head> <body> <?php if( isset( $_POST[ 'content' ] ) && isset( $_POST[ 'name' ] ) ) { $filename = $_POST[ 'name' ]; //hier sollte man noch Sicherheitsmechanismen einbauen! $file = fopen( $filename, 'w' ); fwrite( $file, htmlentities( $_POST[ 'content' ] ) ); fclose( $file ); echo "In Datei geschrieben"; } ?> <form method="post" action="index.php"> <p> <textarea name="content" rows="20" cols="67"></textarea> </p> <p> Name: <input type="text" name="names" size="35" /> </p> <p> <input type="submit" name="send" value="Speichern" /> </p> </form> </body> </html>
Beitrag zuletzt geändert: 9.12.2012 18:25:58 von l001ol -
Das Problem liegt in deinem HTML Code. Mach aus
<input type="text" name="names" size="35" />
folgendes:
<input type="text" name="name" size="35" />
-
Danke! Jetzt funktioniert endlich alles wie es soll
-
Du hast aber immer noch die Sicherheit außer Acht gelassen...
<?php if( isset( $_POST[ 'content' ] ) && isset( $_POST[ 'name' ] ) ) { $date = new DateTime(); $filename = md5($date->getTimestamp()) . "_" . $_POST[ 'name' ]; //Der Dateiname KANN nur ein einziges mal vorkommen if ($handle = opendir(getcwd())) { while (false !== ($file = readdir($handle))) { if($file == $filename){ $filename = $filename . "_" . $date->getTimestamp(); } } } $file = fopen( $filename, 'w' ); fwrite( $file, htmlentities( $_POST[ 'content' ] ) ); fclose( $file ); echo "In Datei geschrieben"; } ?>
Hab es nicht getestet, aber in der Theorie sollte es damit absolut unmöglich sein einen doppelten Dateinamen zu haben, aufgrund der millisekunden abweichung durch das lesen des Scripts, selbst wenn es die Datei schon gibt ;) -
Ich benutze den Editor nur privat und werde wahrscheinlich per .htaccess sichern. Außerdem ist es in einem sicheren Unterverzeichnis
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage