Problem mit File-Upload (undefinied Index notice)

dragonfly77

Mitglied
Hi,

ich hänge hier an einem Problem mit einem File Upload:
HTML:
  <form id="shout_form" action="system/snippets/processShout.php" method="POST" enctype="multipart/form-data"> 
...
...
  <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
  <input type="file" id="file" name="file" style="margin-right: 144px;"/>
			
  <input id="submit" name="submit" type="submit" value="Posten" class="button2"/>

PHP:
$file = $_FILES['file'];

// $file = $_FILES['file'] ['name']; auch schon probiert!

// Handling für File-Upload:
	if (isset($_FILES['file'])) { 
		
		if ($file != '') {
			$targetPath = "../../system/userdata/;
			$targetPath = $targetPath . basename( $_FILES['file']['name']);
			
			if(move_uploaded_file($_FILES['file']['tmp_name'],$targetPath)){
				echo "OK". $targetPath;
			} 
			
		}
	}
Ich bekomme immer eine "Undefined index" Meldung. Aber ich finden den Fehler nicht.

Wenn ich folgendes versuche
PHP:
print "<pre>";
print_r($_FILES);
print "</pre>";

schmeißt er mir eine "leeres Array raus.
Aber wo könnte liegt der Fehler?

Habe es zum testen mit nur mir kleinen Textdateien probiert. An der File-Größe kann es also nicht liegen.

PS: Das Formular wird via JavaScript übertragen:
HTML:
...
 var data = 'shout='+ shout +'&currUserId='+ currUserId + '&currUser=' + currUser + '&currLang=' + currLang + '&file=' + file;
		
 
        // ajax call
        $.ajax({
            type: "POST",
            url: "system/snippets/processShout.php",
            data: data,
...
 
Zuletzt bearbeitet:
1.) hast du es mal mit ohne Ajax ausprobiert? Damit lässt sich der fehler etwas mehr eingrenzen. Ich vermute, dass die POST-Daten erst garnicht bei dem PHP-Skript ankommen. =>
2.)Was ergibt var_dump($_POST); ?
 
Hi,

also mit var_dump($_POST);
sagt er mir das alle Daten gefüllt sind. Die Datei wird auch korrekt benannt. Trotzdem kommt die Sache mit dem undefinied index!

Das Upload-Script von "saftmeister" sieht gut aus. Allerdings ist das viel zu überladen so das ich das nicht für meine zwecke umbauen kann. (übersteigt mein JS-Verständnis etwas)
Ich habe ja ein Kommentarfeld wo man einfach EINE einzelne Datei anhängen kann. Soweit funktioniert es ja auch. Bis auf das angesprochene Problem.
 
Ok, also noch mal zum Verständnis: Es bringt nichts, den Namen der hochzuladenden Datei in die POST-Vars zu hängen, den Payload der Datei aber nicht mitzusenden. Du hast mit deinem JS nichts anderes als das erreicht.

Du kannst nicht erwarten, das nur weil du der Name der Datei in data steht, auch der Inhalt der Datei hochgeladen wird. Das hätte dir auffallen sollen, wenn du nicht mit kleinen Text-Dateien sondern mal mit megabyte-großen Dateien getestet hättest, das der "Upload" genauso schnell abgewickelt wird.

Fazit: Du musst dafür Sorge tragen, das aus dem "Ich hole mir mal den Namen der Datei aus dem Inputfeld 'file' und hänge ihn als POST-Variable an 'data' an" ein richtiger Upload wird. Deswegen habe ich das Tutorial verlinkt.
 
Zurück