Mehrere Bilder hochladen funktioniert nicht

Briefkasten

Erfahrenes Mitglied
Hallo,

bis jetzt hat das Script immer nur ein Bild hochgeladen und einen Ordner erstellt. Nun will ich ,dass man mehrere Bilder hochladen kann. Das funktioniert aber nicht. Es liegt wahrscheinlich an check.php. Denn dort bekomme ich immer die Meldung falscher Dateityp. Wisst ihr was ich da falsch mache? PS: Bin noch Anfänger.

Hier mal der Code der einzellnen Dateien:

create_alb.php --> Erster Schritt, Benutzer gibt den Albumnamen ein und wieviel Bilder er hochladen will
PHP:
<?php
	include ("../../head.php");
?>
 
<body>
 
<form action="upload.php" method="POST">
Geben Sie den Namen des Albumbs ein: <input type="text" name="Albumname"></input><br/>
Geben Sie an wieviel Bilder Sie hochladen wollen:<input name="anzahlderbilder" type="text" size="4" maxlength="2">
</input><br/>
<input type=submit value="Submit"> 
</form> 
 
</body>
</html>

upload.php --> Es werden die Uploadfelder erzeugt und ein Ordner Namens $Albumname

PHP:
<?php
	include ("../../head.php");
?>
Bilder für das Fotoalbum
<?php
	echo " <b>$Albumname</b> uploaden:\n";
	echo '<form name="form1" method="post" action="check.php" enctype="multipart/form-data">';
	for ($i=0; $i < $anzahlderbilder; $i++) 
	{
		echo '<input type="file" name="imagefile'."$i".'">';
		echo '<br/>';
	}
	echo '<input type="submit" name="Submit" value="Submit">';
	mkdir ("$Albumname", 0777);
	?>
	<input type="hidden" name="Albumname" value="<?=$_POST["Albumname"]?>" />
	<input type="hidden" name="Albumname" value="<?=$_POST["anzahlderbilder"]?>" />
	</form>
 
 
 
 
</body>
</html>

check.php ->Hochladen in Ordner $Albumname
PHP:
<?php
include ("../../head.php");
echo '<body>';
echo '<br />';
//Upload verarbeiten
 
if(isset( $Submit )) 
{ 
//If the Submitbutton was pressed do:
	if ($_FILES['imagefile']['type'] == "image/gif" || $_FILES['imagefile']['type'] == "image/jpeg" || $_FILES['imagefile']['type'] == "image/pjpeg")
	{
		for ($i=0; $i < $anzahlderbilder; $i++)
		{
				move_uploaded_file ($_FILES['imagefile'."$anzahlderbilder"]['tmp_name'], "/home/webpages/lima-city/kappl/html/images/upload/$Albumname/".$_FILES['imagefile'."$anzahlderbilder"]['name']) or die ("Konnte nicht kopiert werden!"); 
				echo ""; 
				echo "Name: ".$_FILES['imagefile']['name']."\n"; 
				echo "Size: ".$_FILES['imagefile']['size'].""; 
				echo "Type: ".$_FILES['imagefile']['type'].""; 
				echo " Copy Done....";
		}
     } 
	 else
	 { 
		 echo "<br><br>"; 
    	 echo "Datei konnte nicht hochgeladen werden, Falscherdateityp (".$_FILES['imagefile']['name'].")<br>"; 
     } 
}
echo '<br />';
//Zur Fehlerquellen überprüfung
//echo "";
//var_dump($Albumname);
//var_dump($_POST["Albumname"]);
//var_dump($_POST);
echo '<br />';
 
echo '<a href="'."$Albumname".'/" title="Ins erstellte Album wechseln">Weiter zu den upgeloadeten Bildern</a>';
echo '<br />';
echo '<br />';
include ("../footer.php");
 
?>

Demo:

http://kappl.milten.lima-city.de/Anna/images/upload/

mfg Briefkasten
 
Zuletzt bearbeitet:
if ($_FILES['imagefile']['type'] ==
...soweit ich sehe, existiert dort kein FileUpload-Feld namens "imagefile"

if(isset( $Submit ))
...ist register_globals auf "On"

Da frag ich mich langsam ernsthaft, wieviel Jahrhunderte es dauern wird, bis auch der letzte kapiert hat, wie man die Superglobals anzusprechen hat...das ist schliesslich seit mittlerweile 6 Jahren so, dass register_globals standardmässig OFF ist :-)
 
Die Variable $anzahlderbilder in der Datei check.php ist nicht definiert. Dadurch wird die Schleife nicht oftgenug durchgelaufen. Ich vermute mal, dass die Namensgebung der Hidden- Input- Felder in upload.php inkorrekt ist und das das eine Feld, welchem du das Value $_POST["anzahlderbilder"] auch dementsprechend $anzahlderbilder heißen muss und nicht Albumname.

Sven Mintel hat gesagt.:
...soweit ich sehe, existiert dort kein FileUpload-Feld namens "imagefile"
Doch existiert in upload.php in der for- Schleife.

Und noch ein weiterer Tip, versuch die Überprüfung des Types mal mit mime_content_type(), sprich
PHP:
mime_content_type($_FILES["imagefile"]["tmp_name"]);
 
Zuletzt bearbeitet:
Du steckst die php Variable $Albumname in einen String ...

PHP:
move_uploaded_file ($_FILES['imagefile'."$anzahlderbilder"]['tmp_name'], "/home/webpages/lima-city/kappl/html/images/upload/$Albumname/".$_FILES['imagefile'."$anzahlderbilder"]['name']) or die ("Konnte nicht kopiert werden!");

so sollte es funktionieren:

PHP:
move_uploaded_file ($_FILES['imagefile'."$anzahlderbilder"]['tmp_name'], "/home/webpages/lima-city/kappl/html/images/upload/".$Albumname."/".$_FILES['imagefile'."$anzahlderbilder"]['name']) or die ("Konnte nicht kopiert werden!");

cheerio,
anna

P.S. Ist das hier das Resultat von cut, stick, paste, shake, rattle and roll? *grins*
 
Hallo!

Sven hat recht, es gibt imagefile1, imagefile2, imagefile3..... usw., denn in der for-Scheife wird imagefile durchnummeriert.

Und in der check.php wird lediglich nach $_FILES['imagefile']['type'] überprüft..... dann kann es ja auch nicht funktionieren.

@Sven, Du hast vergessen von den 6 Jahren den Zeitraum abzuziehen, wo die Hoster register_globals auf ON gestellt haben. ;)

Gruss Dr Dau
 
Zuletzt bearbeitet:
aphaean hat gesagt.:
Du steckst die php Variable $Albumname in einen String ...

PHP:
move_uploaded_file ($_FILES['imagefile'."$anzahlderbilder"]['tmp_name'], "/home/webpages/lima-city/kappl/html/images/upload/$Albumname/".$_FILES['imagefile'."$anzahlderbilder"]['name']) or die ("Konnte nicht kopiert werden!");

so sollte es funktionieren:

PHP:
move_uploaded_file ($_FILES['imagefile'."$anzahlderbilder"]['tmp_name'], "/home/webpages/lima-city/kappl/html/images/upload/".$Albumname."/".$_FILES['imagefile'."$anzahlderbilder"]['name']) or die ("Konnte nicht kopiert werden!");

cheerio,
anna

P.S. Ist das hier das Resultat von cut, stick, paste, shake, rattle and roll? *grins*

Du solltest die das PHP- Handbuch mal durchlesen. Es spielt keine Rolle ob du $dateiname="$datei" nutzt oder $dateiname=$datei. Alles was in Dubblequotes steht an Variablen wird kompiliert und interpretiert. Somit kann dort der Fehler nicht liegen. ^^

Dr Dau hat gesagt.:
Hallo!

Sven hat recht, es gibt imagefile1, imagefile2, imagefile3..... usw., denn in der for-Scheife wird imagefile durchnummeriert.

Und in der check.php wird lediglich nach $_FILES['imagefile']['type'] überprüft..... dann kann es ja auch nicht funktionieren.

Gruss Dr Dau

Stimmt, du hast recht. Mein Fehler, da ich ihm erste den Vorschlag machen wollte, die Inputfelder mit imagefile[] zu betiteln. Wäre man so vorgegangen hätte die Überprüfung gestimmt, da das Array $imagefile dann ja vorhanden wäre. Sorry ;)
 
Dr Dau hat gesagt.:
@Sven, Du hast vergessen von den 6 Jahren den Zeitraum abzuziehen, wo die Hoster register_globals auf ON gestellt haben. ;)

Gruss Dr Dau

Was weiss den ich...vor 6 Jahren hatte ich noch nichtmal einen Computer(wollte mit diesem neumodischen Teufelszeug auch nichts zu tun haben :suspekt: ), ich wollt heut halt nur mal am Sonntagnachmittag ein wenig gepflegt klugsch****en :-)
 
ROFL :-)

Aber wo wir schon dabei sind, mir stösst <?= ?> auf.
Wenn short_open_tag in der php.ini deaktiviert wird funktioniert es nicht mehr.
Und um <?xml ?> nutzen zu können, muss short_open_tag deaktiviert sein.
Andernfalls muss <?php echo '<?xml version="1.0"'; ?> verwendet werden.
Es ist also absehbar dass short_open_tag deaktiviert wird.
 
Hi,

danke für die Hinweise. Ich hab nun alles geändert so wie ihr mir beschrieben habt.

->$anzahlderbilder=$_POST["anzahlderbilder"];
->for Schleife geändert
->statt 'imagefile' ->'imagefile'."$i"

Funktioniert aber leider immer noch nicht :(

hier der neue Code:

upload.php
PHP:
<?php
	include ("../../head.php");
?>
Bilder für das Fotoalbum
<?php
	echo " <b>$Albumname</b> uploaden:\n";
	echo '<form name="form1" method="post" action="check.php" enctype="multipart/form-data">';
	for ($i=0; $i < $anzahlderbilder; $i++) 
	{
		echo '<input type="file" name="imagefile'."$i".'">';
		echo '<br/>';
	}
	echo '<input type="submit" name="Submit" value="Submit">';
	mkdir ("$Albumname", 0777);
	?>
	<input type="hidden" name="Albumname" value="<?=$_POST["Albumname"]?>" />
	<input type="hidden" name="anzahlderbilder" value="<?=$_POST["anzahlderbilder"]?>" />
	</form>
	
	 


</body>
</html>

check.php
PHP:
<?php
include ("../../head.php");
echo '<body>';
echo '<br />';
$anzahlderbilder=$_POST["anzahlderbilder"];
$Albumname=$_POST["Albumname"];
echo "$anzahlderbilder";
echo "$Albumname";
//Upload verarbeiten

if(isset( $Submit )) 
{ 
//If the Submitbutton was pressed do:
	for ($i=1; $i < $anzahlderbilder; $i++)
	{
		if ($_FILES['imagefile'."$i"]['type'] == "image/gif" || $_FILES['imagefile'."$i"]['type'] == "image/jpeg" || $_FILES['imagefile'."$i"]['type'] == "image/pjpeg" && $_FILES['imagefile'."$i"]['type'])
		{
			
			
					move_uploaded_file ($_FILES['imagefile'."$i"]['tmp_name'], "/home/webpages/lima-city/kappl/html/images/upload/".$Albumname."/".$_FILES['imagefile'."$i"]['name']) or die ("Konnte nicht kopiert werden!"); 
					echo "Name: ".$_FILES['imagefile'."$i"]['name']; 
					echo "Size: ".$_FILES['imagefile'."$i"]['size'].""; 
					echo "Type: ".$_FILES['imagefile'."$i"]['type'].""; 
					echo " Copy Done....";
			
		 } 
		 else
		 { 
			 echo "<br><br>"; 
			 echo "Datei konnte nicht hochgeladen werden, Falscherdateityp (".$_FILES['imagefile'."$i"]['name'].")<br>";
		 } 
	}
}
echo '<br />';
//Zur Fehlerquellen überprüfung
//echo "";
//var_dump($Albumname);
//var_dump($_POST["Albumname"]);
//var_dump($_POST);
echo '<br />';

echo '<a href="'."$Albumname".'/" title="Ins erstellte Album wechseln">Weiter zu den upgeloadeten Bildern</a>';
echo '<br />';
echo '<br />';
include ("../footer.php");
 
?>

Das merkwürdige daran ist allerdings, dass keine Fehlermeldung mehr kommt, aber die Echos nicht ausgeben werden und die Bilder nicht ins verzeichniss upgeloadet werden.

Diese Echos sollten kommen:
PHP:
echo "Name: ".$_FILES['imagefile'."$i"]['name']; 
					echo "Size: ".$_FILES['imagefile'."$i"]['size'].""; 
					echo "Type: ".$_FILES['imagefile'."$i"]['type'].""; 
					echo " Copy Done....";

Tun Sie aber nicht, hat jemand ne Idee?

mfg Briefkasten
 
Zurück