• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

HTML über PHP - Script bearbeiten - Problem

_iChris_

Neues Mitglied
Hi Leute,

könnt ihr mir hier mal helfen ...

PHP:
<?php
if (empty($gesendet)){    
ob_start();    
readfile($_GET['file']);    
$file=ob_get_contents();    
ob_end_clean();
    echo '<html>
    <head>
    <title>'.$_GET['file'].' editieren</title>
    </head> 
   <body> 
   <form action="'.$_SERVER['SCRIPT_NAME'].'" method="post">
    <input type="hidden" name="filename" value="'.$_GET['file'].'" />
    <input type="hidden" name="gesendet" value="irgendwas" />
    <textarea name="datei" cols="50" rows="10">'.htmlspecialchars($file).'
    </textarea>
    <input type="submit" name="ok" value="speichern" >
    </form>
    </body>
    </html>';
}
else {
    $write=fopen($_POST['filename'], "w");
    if(fwrite ($write, $_POST['datei'])) {
        echo "Änderung erfolgreich";
    }
    else {
        echo "Schreiben fehlgeschlagen!";
    }
    fclose($write);
}
?>

Beim ersten mal öffnen übergebe ich "file" durch den link (edit.php?file=seitenname.htm) ... wenn ich dann auf den Button speichern klicke sollten "filename" und "gesendet" übergeben werden ... tun sie anscheinend aber nicht ...
Vielleicht findet ihr den Fehler !

Danke schonmal im Vorraus :D
 
Kann keinen augenscheinlichen Fehler entdecken. Was steht denn im erzeugten HTML-Code in dem das Formular enthalten ist?
 
Wenn ich es auf den Server hochlade gibt mir das Textfeld nur diese Meldung aus:

<br />
<b>Warning</b>: readfile() [<a href='function.readfile'>function.readfile</a>]: Filename cannot be empty in <b>/home/www/web304/html/edit.php</b> on line <b>6</b><br />
 
Teste mal mit

PHP:
var_dump($_GET);

was beim Aufruf überhaupt im GET-Array steht. Wenn es trotz Angabe von Parametern in der URL leer ist, stimmt an der Serverkonfiguration etwas nicht.
 
Jetzt verstehe ich wie Du den Aufruf machst. Natürlich ist nach Abschicken des Formulars $_GET leer. Du schickst das Formular ja auch per Post ab.

HTML:
<form action="'.$_SERVER['SCRIPT_NAME'].'" method="post">

Also:
Entweder änderst Du das von post auf get.
Oder Du prüfst beim Laden der Seite, ob diese per Post oder Get aufgerufen wurde und lädst die Variablen aus den entsprechendenen Arrays $_POST oder $_GET.
Oder Du verwendest $_REQUEST statt $_GET, welches sowohl Post- als auch Get-Variablen beinhaltet, aber mit Vorsicht genutzt werden sollte.
 
Danke! Wäre mir jetzt nicht aufgefallen ... aber anscheinend muss ich das sowieso Über Post machen da die URL sonst zu lang wird -> Fehlermeldung

[h=1]Request-URI Too Large[/h]The requested URL's length exceeds the capacity limit for this server.request failed: URI too long

Apache/1.3.36 Server at 176.9.16.213 Port 80
 
Eigentlich wollte ich die Seite jetzt mit POST übergeben ... Das hat jetzt aber nach einigen Versuchen nicht wirklich funktioniert ... Kann mir vielleicht wer helfen?
 
Du schickst das Formular doch schon per POST ab? Oder geht es dir um den direkten Aufruf durch Eingabe in der Browser-URL? Sag genauer was Du machen willst.
 
Ich möchte immer nur eine bestimmte Seite bearbeiten ... Bisher habe ich das über .../edit.php?file=seite.php aufgerufen ... jetzt muss ich es aber ganz mit post machen da die URL sonst zu lang wird ... aber wie?
 
Was jetzt? Link oder Weiterleitung?

HTML:
<a href="/edit.php?file=seite.php">

oder

PHP:
<?php header("Location: /edit.php?file=seite.php"); ?>

?
 
Dann hast Du 3 Möglichkeiten:
a) Verlinke wie bisher und lies $_REQUEST in edit.php aus. Post ist nicht notwendig.
b) Ersetze den jetzigen Link durch einen anderen bei dem der Parameter eine "verschlüsselte" Kennung für eine Datei ist. Z.B. könnte 1 der Datei seite.html entsprechen. Wenn dann edit.php?file=1 aufgerufen wird, müsstest Du in edit.php prüfen, welche Datei der 1 entspricht. Beispiel:
PHP:
if( $_GET["file"] == 1 ){$file = "seite.html";}
c) Verlinke auf eine andere Datei die wiederum einen POST-Request an edit.php auslöst. Beispiel:
HTML:
<a href="edit_seite_html.php">
Post-Request in PHP erzeugen:
Three Ways to Make a POST Request from PHP | LornaJane
HTTP POST from PHP, without cURL

Nachteil von c): Die URL macht wenig Sinn und du müsstest die Dateien alle einzeln anlegen.

Ich würde dir zu b) raten, da Du hier auch gleichzeitig die Dateinamen "anonymisieren" kannst. Das erschwert die Manipulation von Dateien für potentielle Angreifer.
 
Mit Variante a.) wäre ich ja schon zufrieden, allerdings bin ich mit $_REQUEST nicht vertraut ... Variante b.) habe ich bereits getestet leider ohne Erfolg und c.) wäre auch eine Möglichkeit ist aber meines Erachtens keine wirkliche Lösung wegen der vielen Dateien ...

PS: Ich bin mir sicher du hättest das Thema in 2min erledigt aber ich werde einfach nicht schlau aus der ganzen Sache ... Tut mir auch Leid wenn ich nerve aber ich bin dir trotzdem sehr dankbar für deine Hilfe :)
 
Mit $_REQUEST musst Du auch nicht vertraut sein. Du musst quasi nur das aktuell vermutlich noch vorhandene $_GET durch $_REQUEST ersetzen - fertig. Ich sehe hierbei kein Problem, erst recht nicht wenn Du es einfach mal ausprobierst?!

Und wenn Du etwas ohne Erfolg getestet hast und nicht weißt woran es liegt - dann zeig den Quellcode dessen Probleme Du dir nicht erklären kannst.
 
So, ich habe einfach das $_GET durch $_REQUEST ersetzt und bekomme noch immer folgende Fehlermeldung (in der Textbox):

<br />
<b>Warning</b>: readfile() [<a href='function.readfile'>function.readfile</a>]: Filename cannot be empty in <b>/home/www/web304/html/edit.php</b> on line <b>7</b><br />

PHP:
<?php
//edit.php
//var_dump($_GET);
if (empty($gesendet)){
    ob_start();
    readfile($_REQUEST['file']);
    $file=ob_get_contents();
    ob_end_clean();
    echo '<html>
    <head>
    <title>'.$_REQUEST['file'].' editieren</title>
    </head>
    <body>
    <form action="'.$_SERVER['SCRIPT_NAME'].'" method="post">
    <input type="hidden" name="filename" value="'.$_REQUEST['file'].'" />
    <input type="hidden" name="gesendet" value="jo" />
    <textarea name="datei" cols="50" rows="10">'.htmlspecialchars($file).'
    </textarea>
    <input type="submit" name="ok" value="speichern" >
    </form>
    </body>
    </html>';
}
else {
    $write=fopen($_POST['filename'], "w");
    if(fwrite ($write, $_POST['datei'])) {
        echo "Änderung erfolgreich";
    } 
else {
        //Rechte: 666 oder 777
        echo "Schreiben fehlgeschlagen!";
    }    
fclose($write);
}
?>
 
Enthält $_REQUEST['file'] denn etwas?
Tipp: das sollte es, wenn Du per datei.php?file=dateiname.html aufrufst.
 
Zurück
Oben