$_FILES mit AJAX uebergeben
Stefan
- javascript
Hallo,
ich weiß leider nicht genau in welche Rubrik dieses Thema am bessten Passt aber ich denke JavaScript ist schon ganz passend. Ich möcht folgendes realisieren.
Ich habe eine Fileupload-Form in einem bestimmten DIV-Container eingebaut. Ich möchte, das die Ausgabe nachdem Fileupload auch nur in diesem DIV-Container statt findet. Um das ganze zu verdeutlichen Poste ich mal ein paar Programmzeilen:
Als erstes meine Uplaod-Form. Ich denke so, wie wir sie alle kennen:
<div id="uploadForm">
<form action="javascript:SaveChangePicture();" enctype="multipart/form-data" method="post">
<input type="file" name="picture">
<input type="submit" name="submit" value="Save...">
</form>
</div>
Der grund warum ich in der action Anweisung der Form eine javascript Funktion habe, ist das ich $_FILES an eine andere php Seite mithilfe von Ajax übergeben möchte bzw. ich möchte generell auf eine andere php Seite verlinken, die dann das Array $_FILES überprüft und je nach Inhalt das Arrays eine Bestätigung des Uploads oder einen Fehler ausgibt.
Das besondere daran ist, das ich die ausgabe NUR in dem DIV-Container "uploadForm" haben möchte und da ist mir als einzige Lösung nur der weg mit JavaScript eingefallen. Ich würde mich natürlich auch gerne eines anderen Belehren lassen, wenn dass totaler Bockmist ist den ich mir da überlegt habe :)
gruß Stefan
Hi Stefan,
hier eine einfache und unelegante Lösung...
file.php:
<?php
$success = ''
if(isset($_FILES['picture'])){
$success = '<br />FileUpload erfolgreich!';
}
echo = '
<div id="uploadForm">
<form action="file.php" enctype="multipart/form-data" method="post">
<input type="file" name="picture">
<input type="submit" name="submit" value="Save...">
</form>
'.$success.'
</div>';
?>
Mit AJAX Files übertragen ist recht kompliziert, aber kannste es dir ja beim Captain's Universe anschauen. :)
Viele Grüße,
Jurik
PS: Dran denken, AJAX kann nur an den Server, wo es aufgerufen wurde, auch Dateien übertragen.
Also nicht von domainA.com an domainb.org ... oder domainB.com ;)
file.php:
<?php
$success = ''
if(isset($_FILES['picture'])){
$success = '<br />FileUpload erfolgreich!';
}
echo = '
<div id="uploadForm">
<form action="file.php" enctype="multipart/form-data" method="post">
<input type="file" name="picture">
<input type="submit" name="submit" value="Save...">
</form>
'.$success.'
</div>';
?>
Hierzu noch eine kurze Frage, gibt es auch die Möglichkeit bei form mit der method POST einen Parameter mitzuschicken?
> Mit AJAX Files übertragen ist recht kompliziert, aber kannste es dir ja beim [Captain's Universe](http://www.captain.at/ajax-file-upload.php) anschauen. :)
Nein ich glaube das mit Ajax übersteigt dann doch das was ich eigentlich machen wollte und zudem scheint es nur in Firefox zu funktionieren wenn ich das richtig gelesen habe.
> PS: Dran denken, AJAX kann nur an den Server, wo es aufgerufen wurde, auch Dateien übertragen.
> Also nicht von domainA.com an domainb.org ... oder domainB.com ;)
Ja das weiß ich :P
Hi,
Hierzu noch eine kurze Frage, gibt es auch die Möglichkeit bei form mit der method POST einen Parameter mitzuschicken?
Was sind denn die name=value-Paare, die aus den Formularfeldinhalten gebildet werden, deiner Meinung nach anderes?
(Vermutlich meinst du einen GET-Parameter. Ja, klar geht das - aber wozu?)
MfG ChrisB
(Vermutlich meinst du einen GET-Parameter. Ja, klar geht das - aber wozu?)
Ja indirekt ich meine POST-Parameter. Das was ich in meinem ersten POST geschrieben habe war nur eine verkürzte Form von dem was ich machen will um euch nicht mit sinnlos viel Quelltext zu strapazieren :) Also ich möchte praktisch in folgender Zeile noch POST-Parameter mit übergeben:
<form action="file.php" enctype="multipart/form-data" method="post">
Die Parameter die ich somit an die Datei übergebe möchte in der Datei verarbeiten. Ich weiß das klingt alles ein bisschen Konfus aber da steckt schon ein Gedanke hinter :)
gruß stefan
Hi,
Also ich möchte praktisch in folgender Zeile noch POST-Parameter mit übergeben:
<form action="file.php" enctype="multipart/form-data" method="post">
Dann schreibe das Inputfeld, welches name und value enthaelt, halt direkt dahinter in die gleiche Zeile - wenn dir uebersichtlicher, eingerueckter Quelltext egal ist.
MfG ChrisB
Dann schreibe das Inputfeld, welches name und value enthaelt, halt direkt dahinter in die gleiche Zeile - wenn dir uebersichtlicher, eingerueckter Quelltext egal ist.
Boar ich stand gerade voll auf dem Schlauch, jetzt ist mir klar was du meinst :) Nein unübersichtlich und uneingerückt sollte der Quelltext natürlich nicht sein. Entschuldige meine komische Frage, ich sollte früher schlafen gehen :P
Moin!
hier eine einfache und unelegante Lösung...
Das ist ja keine "Lösung" für das AJAX-Fileupload-Problem.
Mit AJAX Files übertragen ist recht kompliziert, aber kannste es dir ja beim Captain's Universe anschauen. :)
Mit AJAX Files hochzuladen ist im Regelfall UNMÖGLICH.
Die verlinkte Seite sagts ja auch: Nur wenn man zufällig Firefox benutzt, und dem als User manuell eine Einstellung abändert, und dann die Sicherheitsfrage beim AJAX-Request positiv beantwortet, kann es überhaupt funktionieren.
Das Problem ist: Wenn man die Sicherheitsfrage einmal dauerhaft für eine Domain beantwortet hat, hat diese Domain im Prinzip Vollzugriff auf das gesamte Dateiverzeichnis des eigenen Rechners. Auch wenn sich später mal der AJAX-Code ändert, und statt des gewollten File-Uploads einfach mal durchspidert, was denn sonst noch interessantes auf der Platte ist (Stichwort "Bundestrojaner"), und das wegschickt.
Aus diesem Grund ist die dort vorgestellte Variante aus Sicherheitsgründen abzulehnen. Man könnte zehn Gummipunkte aus "Und sie bewegt sich doch"-Gründen vergeben, mehr aber auch nicht. Ich glaube deshalb auch nicht, dass andere Browser in diesem Punkt irgendwann nachziehen werden. Dazu gibt es einfach nicht genug Bedarf (Fileuploads sind selten in Formularen), bzw. sind die Alternativen ausreichend vorhanden (Formular in ein IFrame packen, es gibt diverse Java-, ActiveX- oder flashbasierte Uploadtools, oder einfach kein AJAX dafür verwenden).
- Sven Rautenberg