Mehrfach Upload

brainsucker

Erfahrenes Mitglied
Hallo zusammen, ich habe folgendes Problem:

Ich erzeuge mir über ein JavaScript eine bestimmte Anzahl an File-Inputs

PHP:
<SCRIPT LANGUAGE="JavaScript"><!--
function addocs(anzahl, id) {
	var tabelle = "<table border='0' width='500' cellpadding='2' cellspacing='0'>";
	tabelle += "<tr>	<td align='center' bgcolor='#CCCCCC'>Dokumente ausw&auml;hlen</td></tr>";
    
	for(var i = 0; i < anzahl; i++) {
	
		tabelle += "<tr><td><input type='file' name='datei[]'/></td></tr>";
	}
	tabelle += "</table>";

	document.getElementById(id).innerHTML = tabelle;
}
//--></SCRIPT>

Das funktioniert auch soweit super. In der PHP Datei die dann diese Felder auswerten und die Files auch hochladen soll steht folgendes:

PHP:
$docselement			= $_POST[datei];
foreach($docselement as $value)
		{
			// Wohin sollen die Dateien kopiert werden?
			$ziel = "upload/";
			$zielUndDatei = $ziel.$_FILES['datei']['name'][$value];
			
			$max_size =  5242880; // Entspricht 5 Megabyte

                         // .....
}

Leider kann er auf $docselement nicht zugreifen, d.h. er kennt diese Variable nicht. Wenn ich im javascript den input type auf text umsetelle funktioniert das. Wo ist mein Denkfehler ?
 
ok, das leuchtet ein :-)

weiterführende Frage:

wie greif ich dann auf die einzelnen inhalte der file-elemente zu?

PHP:
$docselement            = $_FILES[datei]; 
foreach($docselement as $value) 
        { 
            // Wohin sollen die Dateien kopiert werden? 
            $ziel = "upload/"; 
            $zielUndDatei = $ziel.$_FILES[$value]['name']; 

            $max_size =  5242880; // Entspricht 5 Megabyte 

                         // ..... 
}
Das führt leider zu der Fehlermeldung:

Illegal offset type


Ich möchte halt für jedes Upload Feld den Upload durchführen (und natürlich für jeden Vorgang eine Überprüfung...)
 
schau dir mal die funktion move_upload_file an...
Wichtig ist außerdem noch
PHP:
$original_datei_name = $_FILES[...]["name"]; 
$temp_datei_name = $_FILES[...]["tmp_name"]; //wie nach dem upload vorhanden...
move_upload_file($temp_datei_name, $zielverzeichniss.$original_datei_name);
 
Für den Einzelfall (d.h. wenn ich nur 1 Upload Feld habe) hab ich das Script fertig. Das funktioniert auch. Ich will das jetzt nur dynamisch machen, daher kann der User über das obige Javascript ja auch bestimmen wieviele Uploadfelder generioert werden.

Ich muss jetzt also in einer Schleife jeweils den Scriptcode ausführen. Nur weiss ich nicht wie ich jeweils auf die einzelnen Daten zugreife...

Wie muss also die Schleife aussehn?
 
Hier mal nen kleines Beispiel...
Ich würde aber noch Kontrollfunktionen mit einbauen...
PHP:
$dir = "img/";
if(is_array($_FILES[...]["tmp_name"])){
    for($i = 0; $i<count($_FILES[...]["tmp_name"]); $i++){
        move_upload_file($_FILES[...]["tmp_name"][$i], $dir.$_FILES[...]["name"][$i]);
    }
}else{
        move_upload_file($_FILES[...]["tmp_name"], $dir.$_FILES[...]["name"]);
}
 
So,

die Schleife funktioniert inzwischen. Ich habe jetzt eine Funktion geschrieben, die prüfen soll ob die hochzuladende Datei schon existiert, also ob sie bereits hochgeladen wurde. Wenn dies der Fall ist, soll die Datei umbenannt werden. Das ganze habe ich versucht rekursiv aufzubauen, d.h. dass er auch überprüft ob die Datei, die er umbenannt hat nicht auch schon vorhanden ist. Falls das der Fall wäre wird die Datei nochmals umbenannt.


Leider erhalte ich keinen Returnwert. Vielleicht kann mir jemand weiterhelfen. Ich habe eine Kommentarzeile im folgenden PHP Code eingefügt um zu zeigen wo ich das Problem vermute:

PHP:
function check_id_file_exists($pruefvar)
	{
	echo "<b>pruefe " . $pruefvar . "</b><br>";
	if(file_exists($pruefvar))
		{
		echo $pruefvar ." gibt es zunächst schon<br>";
		$split= split ( '[/]', $pruefvar );
		$rename = $split[0]."/copy_of_".$split[1];

			if(!file_exists($rename))
				{
// DIE AUSGABE IST KORREKT ABER:
				echo "Returnwert: " . $rename . "<br>";
// DIESEN RETURNWERT ERHALTE ICH NICHT				
return  $rename;
				}
			else
				{
				echo $rename . " gibts auch schon<br>";
				check_id_file_exists($rename);
				}
		}
	else
		{
		$rueckgabe = "everything_is_fine";
		return $rueckgabe;
		}
	}
 
Hallo!

Dies sollte die Lösung deines Problems sein:
PHP:
<?php
function create_filename($filename) {
	if(file_exists($filename)) {
		$i=0;
		while(true) { //endlosschleife einleiten
			$file = "copy".$i."_of_".$filename;
			if(!file_exists($file)) { //ggf anpassen
				break;
				return $file;
			}
			$++;
		}
	} else {
		return $filename;
	}
}
?>

MfG,
Marcel
 
Ich würde es etwas anders gestallten...
PHP:
$file="...";
if(file_exists($file)){
  do{
    // neuer dateiname....
    $status = file_exists($file);
  }while($status);

Die Do....While schleife wird so oder so mindestens 1 mal durchlaufen.
man hat keine weitere if Funktion vorhanden und bricht das ganze nicht noch mit nen break ab.
 
Zurück