Speichern eines Strings via REQUEST (inhalt &&)
Heinz Meiser
- php
1 dedlfix
0 Heinz Meiser3 Tom2 Der Martin
2 dedlfix
0 Tom
Hallo Forum,
ich möchte ein PHP-Script via fwrite speichern und übergebe das Script an meine save.php, dort findet das speichern statt.
Wenn ich mit jetzt aber den REQUEST von Ihanlt ausgeben lasse, und innerhals des Strings ein && zu finden ist, bricht dort der String ab.
Wie kann ich das umgehen, so dass ich den gesamten String erhalte?
Vielen Dank
Heinz
Hi!
Wenn ich mit jetzt aber den REQUEST von Ihanlt ausgeben lasse, und innerhals des Strings ein && zu finden ist, bricht dort der String ab.
Wie kann ich das umgehen, so dass ich den gesamten String erhalte?
Du hast das so ungenau beschrieben, so dass ich nur allgemein auf den Kontextwechsel verweisen kann.
Lo!
Hallo nochmal,
ich versuchs mal so:
meine save.php:
$datei = $_REQUEST["path"];
$inhalt = $_REQUEST["name"];
$verbindung = fopen($datei, 'w');
fwrite($verbindung, $inhalt);
fclose($verbindung);
der String, welcher in "name" beinhaltet ist (auszug):
$str = "... if($_POST && (!empty($_POST['a']) && !empty($_POST['b'])))...";
Wenn ich mir in der save.php diesen übergebenen String mit
echo $inhalt = $_REQUEST["name"];
ausgeben lasse, erhalte ich das:
... if($_POST
Wie bringe ich php nun dazu, mir alles auszugeben?
Danke
Heinz
Hello,
AUA!
ich versuchs mal so:
meine save.php:
$datei = $_REQUEST["path"];
$inhalt = $_REQUEST["name"];
Wie kommen die Parameter in den Request hinein? Bitte ausführlich beschreiben!
Warum benutzt Du überhaupt $_REQUEST und nicht $_GET oder $_POST?
$verbindung = fopen($datei, 'w');
Immer erst prüfen, ob das Filehandle auch gültig ist, also das Öffnen der Datei geklappt hat, bevor Du weitermachst.
fwrite($verbindung, $inhalt);
fclose($verbindung);
Das Erstellen, Öffnen, Überschreiben, ... einer Datei direkt mit einem Request-Parameter ist sehr gefählich. Da können alle Dateien des Servers, die per PHP erreichbar sind, zerschossen oder ausgelesen werden.
der String, welcher in "name" beinhaltet ist (auszug):
$str = "... if($_POST && (!empty($_POST['a']) && !empty($_POST['b'])))...";
Nochmal gefragt: wie kam der in den Parameter ['name'] hinein?
Wenn ich mir in der save.php diesen übergebenen String mit
echo $inhalt = $_REQUEST["name"];
ausgeben lasse, erhalte ich das:
... if($_POST
Das ist ja auch nicht HTML-gerecht behandelt.
Oder gibst Du ihn gar nicht in einer HTML-Umgebung aus?
echo htmlspecialchars($_REQUEST['name'], ENT_QUOTES);
Wie bringe ich php nun dazu, mir alles auszugeben?
*mmmh*
Den von Dedlfix verlinkten Artikel lesen und verstehen und dann beim Coden auch beachten?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
$datei = $_REQUEST["path"];
$inhalt = $_REQUEST["name"];
ist es Absicht, dass du die Parameter hier aus "irgendeiner" Quelle annimmst, anstatt gezielt auf $_GET oder $_POST zuzugreifen?
der String, welcher in "name" beinhaltet ist (auszug):
$str = "... if($_POST && (!empty($_POST['a']) && !empty($_POST['b'])))...";
Wie erzeugst du den Request, der das Script aufruft? Von Hand, mit einem anderen Script?
Dann hat dedlfix wohl richtig vermutet, und du hast vergessen, die Zeichen kontextgerecht zu codieren.
Ein unmaskiertes '&' ist in URLs zwar erlaubt, wird aber serverseitig in der Regel als Trennzeichen für die Parameter betrachtet.
Wie bringe ich php nun dazu, mir alles auszugeben?
Durch korrekte URL-Codierung (Percent Encoding) auf der auslösenden Seite.
Ciao,
Martin
Hi!
$datei = $_REQUEST["path"];
$inhalt = $_REQUEST["name"];
Dieses Umkopieren war, ist und bleibt überflüssig.
$verbindung = fopen($datei, 'w');
Ich hoffe, das ist nur des Beispiels wegen gekürzt, denn so wie es jetzt ist, kann man beliebige Dateien in jedem Verzeichnis anlegen, in das PHP schreiben kann. Eine Fehlerbehandlung fehlt auch.
der String, welcher in "name" beinhaltet ist (auszug):
$str = "... if($_POST && (!empty($_POST['a']) && !empty($_POST['b'])))...";
Der Test auf $POST kann entfallen, denn wenn du einzelne Elemente prüfst, muss $POST sowieso vorhanden sein. Außerdem wäre !empty($_POST) sinnvoller und Notice-vermeidend (wenn man das error_reporting auf E_ALL stehen hat).
Wenn ich mir in der save.php diesen übergebenen String mit
echo $inhalt = $_REQUEST["name"];
ausgeben lasse, erhalte ich das:
Damit machst du sowohl eine Zuweisung als auch die Ausgabe des Ergebnisses der Zuweisung. Ich nehme an, die Ausgabe schaust du dir nun im Browser an. Und es wird sicherlich nichts abgeschitten, wovon du dich mit einem Blick in die Quelltextansicht überzeugen solltest. Anschließend bitte die Kontextwechselproblematik verstehen und die dort genannte Vorgehensweise umsetzen.
Lo!
Hallo,
$datei = $_REQUEST["path"];
$inhalt = $_REQUEST["name"];
Dieses Umkopieren war, ist und bleibt überflüssig.
ACK.
$verbindung = fopen($datei, 'w');
Ich hoffe, das ist nur des Beispiels wegen gekürzt, denn so wie es jetzt ist, kann man beliebige Dateien in jedem Verzeichnis anlegen, in das PHP schreiben kann. Eine Fehlerbehandlung fehlt auch.
Full ACK!
Auf diese Dinge hatte ich hier gar nicht geachtet.
echo $inhalt = $_REQUEST["name"];
Damit machst du sowohl eine Zuweisung als auch die Ausgabe des Ergebnisses der Zuweisung.
Das ist vielleicht nicht exakt das, was Heinz sich gedacht hat, ist aber in diesem Fall auch nicht schlimm - $inhalt wird mit dem gleichen Wert nochmal überschrieben, den es vorher schon hatte.
Ich nehme an, die Ausgabe schaust du dir nun im Browser an. Und es wird sicherlich nichts abgeschitten
Nein, das geschah vermutlich schon bei der Auswertung der URL-Parameter durch PHP.
Ciao,
Martin
Hello Hans Meiser,
ich möchte ein PHP-Script via fwrite speichern und übergebe das Script an meine save.php, dort findet das speichern statt.
Wenn ich mit jetzt aber den REQUEST von Ihanlt ausgeben lasse, und innerhals des Strings ein && zu finden ist, bricht dort der String ab.
Wie kann ich das umgehen, so dass ich den gesamten String erhalte?
Ich will mal versuchen zu verstehen, was Du meinst.
Du hast eine URL, die Du in die Adressleiste Deines Browsers eingibst und damit einen Request auslöst. Daraufhin liefert der Server Dir eine HTML-Ressource, die im Browser als Formular angezeigt wird.
Im Action-Attribut des <form>-Elementes steht als neues Ziel "save.php" eingetragen. Wenn Du nun also z.B. den Submit-Button des Forms bedienst, wird ein (POST ?)-Request auf diese Ressource ausgelöst. Dabei werden die Daten, die Du ins <form> eingetragen hast, als Request-Parameter mitgesendet.
Du möchtest nun diese Request-Parameter (und vielleicht auch deren Namen) in eine Datei wegschreiben.
Habe ich Dich richtig verstanden?
Die Parmater werden bei Verwendung der POST-Methode im Array $_POST als Variablen-Elemente übergeben. Du kannst also z.B. durch einen kleinen Testcode in deinem "save.php" erstmal feststellen, ob sie alle wunschgemäß ankommen.
echo "<pre>\r\n";
echo htmlspecialchars(print_r($_POST,1));
echo "</pre>\r\n";
Warum an einem '&' im Parameter innerhalb des Forms der Parameter auf Serverseite endet, kann ich nach obiger Beschreibung nicht nachvollziehen. Da musst Du noch etwas anders gemacht haben. Auch bei Übermittlung der Daten aus dem Form als GET-Paramter würde sich der Browser um eine notwendige URL-Codierung kümmern und PHP vor der Übergabe an das Array $_GET dann um die Rückcodierung. Es ist also nicht erklärlich.
Nachvollziebar wäre das von Dir beschriebene Verhalten nur, wenn du die Parameter als Hyperlink senden würdest. Dann müssten die dort "von Hand" url-codiert _und_ für den HTML-Kontext aufbereitet werden.
Aber das kannst Du im von Dedlfix verlinkten Artikel alles nachlesen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg