online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon puelo vom 12.07.2022, 18:18 Options

Dateiname weitergeben $_POST?

Hallo,

eventuell ist meiner Überschrift etwas ungeschickt formuliert. Ich
wusste aber nicht wie ich mein Problem kurz beschreiben kann.
Es sieht wie folgt aus:

Ich habe 2 Formulare, eins mit einem DropDown Menü in welchem
alle .html Dateien in einem Verzeichnis aufgelistet werden, welche
man dann dort auswählen kann, damit diese in einen Editor
(TinyMCE) genauer gesagt in eine Textarea geladen werden.
Wenn dort Änderungen vorgenommen werden will ich das man
diese in die selbe Datei speichern kann.
Sieht folgendermaßen aus:

Formular 1:

<form method="post" action="#">
<select name="choose" size="1" id="choose">
  <?php
 if ($handle = opendir('../ordner)) {  
  while (false !== ($file = readdir($handle)))  
  {  
   if ($file != "." && $file != "..")  
       if(strrchr($file,".html")) {  
	   
		   echo "<option>$file</option>";

       }  
  }  
  closedir($handle);  

}  
?>
</select>
<input type="submit" name="laden" value="Laden" />
</form>


Script zum Öffnen der ausgewählten Datei:



<?
if (isset($_POST['laden']))
{
$select_field = $_POST['choose'];
echo $select_field;
$fp = fopen ($select_field, "r");
$txt = fread ($fp, filesize ($select_field));
fclose ($fp);
}
?>


Formular 2 mit der Textarea und dem Script zum Speichern:

<form method="post" action="#">
  <p>	
	<textarea name="content" cols="100" rows="35"><?php echo 
$txt; ?></textarea>
  </p>
  <p>
    <input type="submit" name="save" value="Speichern" />
  </p>
</form>
<?

if(isset($_POST['save'])) {
  $inhalt  = $_POST['content'];
  $data = fopen($select_field,"a+");
  fwrite($data,$inhalt);
  fclose($data);
}


?>


So nun kommt die Fehlermeldung:
"Warning: fwrite(): supplied argument is not a valid stream resource"

Ich denke das liegt daran, dass die Variable $select_field nichtmehr
definiert ist und somit der Dateiname "verloren" geht.
Hat jemand vielleicht einen Lösungsansatz wie man diesen
Dateinamen dort trotzdem nochmal verwenden kann, oder liegts
eventuell an was ganz anderem?
Vielen Dank!


Antwort schreiben

Antwort 1 von son_quatsch vom 13.07.2022, 08:18 Options

In dein zweites Formular muss außerdem noch rein
<input name="dateiname" type="hidden" value="<?php echo 
$select_field; ?>" />


Und den Erhalt des Dateinamens würd ich im Skript generell machen, statt nur für das laden - also statt
<?
if (isset($_POST['laden']))
{
$select_field = $_POST['choose'];
echo $select_field;

...lieber
<?
$select_field = $_POST['choose'];
if (isset($_POST['laden']))
{
echo $select_field;

...dann ist das auch später gesetzt, falls Formular 2 abgeschickt wurde.

Bleibt noch zu erwähnen, dass es mehr als riskant ist einen Dateinamen samt Pfad von außerhalb ungeprüft anzunehmen. Stell dir vor ich ändere den Namen der zu schreibenden Datei in "C:\boot.ini".

Antwort 2 von puelo vom 13.07.2022, 13:20 Options

Hallo,

danke erstmal für die Antwort - ich habs jetzt anders gelöst, indem das Formular erst mit echo ausgegeben wird , wenn isset($_POST['laden']) erfolgt ist und dann auch wie du erwähnt hast mit einem hidden feld die Variable übergeben.

Wie könnte denn eine sinnvolle Überprüfung aussehen? Generell sollen nur Dateien aus dem selben Verzeichnis mit einer Endung von .html geladen werden.

MFG

Antwort 3 von son_quatsch vom 13.07.2022, 13:48 Options

Na, indem du z.B. prüfst, ob ein Pfad mit drin ist:
$datei= $_POST['laden'];
if( !preg_match( '#^[^/\\\\]+\.html$#i', $datei ) {
  die 'Dateiname ungültig! Darf keine Slashes oder Backslahes enthalten!';
}


Und später kannst du prüfen, ob die zu speichernde Datei überhaupt schon existiert:
if( !is_file( 'ordner/'. $datei ) ) {
  die 'Datei existiert noch gar nicht, muss aber!';
}

Antwort 4 von puelo vom 13.07.2022, 13:56 Options

Danke dir!

Ähnliche Themen

HILFE!... ich bekomme ein Fehler im PHP Script ...
phplerin  02.01.2009 - 112 Hits - 2 Antworten

fehler bei dateneinlese in die datenbank
phpler  04.01.2009 - 87 Hits - 1 Antwort

POST Daten an eine Seite übertragen
TByte  02.01.2010 - 614 Hits - 6 Antworten

VBS - Dateisuche (Dateiname unbekannt)
NichtVBSProfi  02.03.2010 - 1233 Hits - 3 Antworten

Tipps, um POST-Daten schnell abzusichern
Dwi  30.04.2010 - 344 Hits - 10 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026