Zum Inhalt springen

CSV-Upload in einem Backend-Modul - Prolem mit $_FILES

Erstellt am 18. August 2004 · 8 Antworten · letzte Antwort am 3. Oktober 2005

Tags: Frage

berndy38 ·

Hallo zusammen,

ich schreibe gerade an einer Extension.
In der Datei für das Backend möchte ich eine CSV-Datei hochladen.
Das Formular funktioniert perfekt, wenn ich es in der PHP-Script-Extension erstelle.
Anscheinend hat er Probleme mit der Variabklen $-FIILES.

Wer kann mir da helfen.

Vielen Dank schon mal.

Gruß Bernd

maxhb ·

Hi!
Lass Dier doch mal in der Extension die Postvariablen ausgeben, um zu sehen, ob die überhaupt korrekt übermittelt werden:

...
t3lib_div::debug($_POST);
...

CU
maxhb

TW ·

gib doch mal bitte eienn auszug aus deinem script.....

da kann man dann leichter was sagen..

cu
thorsten

berndy38 ·

Hallo zusammen,

danke für eure Antworten.

Hier ist mein Code:

if (!isset($_POST["csv_upload"])) {
	$content.="<form action='".$_SERVER["REQUEST_URI"]."' method='post' enctype='multipart/form-data'>
						<input type='hidden' name='MAX_FILE_SIZE' value='30000'>
						Send this file: <input name='userfile' type='file'>
						<input type='submit' value='Send File' name='csv_upload'>
						</form>"; 
			}
			else {
			t3lib_div::debug($_POST); 
			t3lib_div::debug($_FILES); 
			}

Wenn ich diesen Code in das Content-Element PHP-Script reinschreibe und anschließend eine Datei hochlade steht folgendes drin:

in der Varialen $_POST:

MAX_FILE_SIZE 30000
csv_upload Send File

in der Variablen $_FILES:

name Test.csv
type application/vnd.ms-excel
tmp_name /tmp/phps3lfXw
error 0
size 267

Aber wenn ich den selben Code in mein Backend-Modul einbau erscheint folgendes:
In der $_POST:

SET function 2
MAX_FILE_SIZE30000
userfileTest.csv
csv_upload Send File

Die Variable $_FILES ist "empty" also leer.

Gruß Bernd

Unbekannter Benutzer ·

Hallo Bernd,

habe genau das gleiche Problem, leider aber noch keine Lösung... bist du schon weitergekommen?? Ich studiere gerade den EM, der ja auch ein Uploadform beinhaltet und ebenso ein BE-Modul ist - aber bis jetzt habe ich noch keinen Unterschied zwischen deiner, meiner und der Programmierung des EMs gesehen ... warum funzt der Upload von Extensions also mit $_FILES, nur bei der eigenen Extension wollen keine Daten per $_FILES rüberwachsen ...!?!?

Grüße,
Commodore

Unbekannter Benutzer ·

hi leute,
hatte auch mal das problem. das entscheidene bei mir war die zeile 5 (move_uploaded_file). dadurch wird die datei in den mod1 ordner kopiert und kann dann gelesen werden.

vielleicht hilft es euch ja!?

if(isset($_FILES['datei'])){
    if($_FILES['datei']['type']=="application/vnd.ms-excel"){
	$regExp = "/^[a-z_]([a-z0-9_-]*\.?[a-z0-9_-])*\.[a-z]{3,4}$/i";
	if(preg_match($regExp,$_FILES['datei']['name']) && $_FILES['datei']['size'] > 0 && $_FILES['datei']['size'] < 100000){
		move_uploaded_file($_FILES['datei']['tmp_name'],$_FILES['datei']['name']);
		$csv=file($_FILES['datei']['name']);
...

mfg
tom

justus7031 ·

Hallo,

ich habe das gleiche Problem. in $_POST steht der Dateiname aber $_FILES ist leer.
Die Lösung von "friction48" nützt nichts, denn in $_FILES steht ja keine Datei, die man moven könnte.

Ich habe schon 2 andere Extensions auseinander genommen, die offendsichtlich die Upload korrekt behandeln können.

Aber ich finde nichts, was bei meinem Modul hilft.

Hat von euch inzwischen jmd was rausgefunden?
Bin für jeden Tipp dankbar!

Gruß
Tobias

justus7031 ·

Guter Tipp!

Ich hatte zwar in meinem Form diesen enctype angegeben, aber es gab im main() meines BE-Moduls noch eine weiteres <form>, dass nicht wieder geschlossen wurde. Dieses ist wohl für das kleine Dropdown das immer oben rechts steht zuständig.
Dieses <form> also wurde nicht wieder geschlossen UND hatte ausserdem eben diesen "enctype" nicht.
Der Browser hat dann wohl diesen als relevantes <form>-Tag interpretiert.

Das erklärt auch einige andere merkwürdigkeiten, nicht so funktionieren, wie ich es erwartet hätte (z.b. im action="" mitgegebene GET-Parameter, die einfach nicht übergeben wurden)

Man nach sowas kann man ja lange suchen :-)

Dank + Gruß
Tobias