[Problem] mehrfacher bildupload

Syst3m

Mitglied
Hallo ich versuche seid tagen einen Bildupload zu schreiben mit dem ich mehrere bilder gleichzeitig hochladen kann.

Nur es wird immer nur ein blid (ich glaube das letzte) hochgeladen.

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Unbenanntes Dokument</title>
</head>

<body>

<form action="?section=upload&step=2" method="post" enctype="multipart/form-data" name="upload">
  Wie viele auf einmal ?
  <select name="menge">
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
</select><br>
 
  <p>
    <input type="submit" name="submit" value="Weiter">
    </p>
</form> <?
if($_GET["step"] == 2)
{
$step = $_POST["menge"];
?>
<form action="?section=up" method="post" enctype="multipart/form-data" name="upload">
  <p>Dateipfad(e)<br>
    <?
  for($i = 1; $i <= $step;$i++)
  {
   ?><input type='file' name='file[]'><?
    echo "<br>";
	}
	
	?>
    <br>
  Kategorie 
  <select name="cat">
   <?
   $sql = "SELECT name FROM friends";
  
   $result = mysql_query($sql);
   while($row = mysql_fetch_array($result))
   {
   ?>
  <option value="<? echo $row["name"]; ?>"><? echo $row["name"]; ?></option>
	
	<? } ?>
	  <option value="pics">->Pics</option>
	  <option value="schatz">->Schatz</option>
	  <option value="me">->Me</option>
</select><br>
  Pixel (hw)  <input type="text" name="pixel"> <input type="text" name="i" value="<? echo $step; ?>"></p>
  <p>
    <input type="submit" name="submit" value="Upload">
    </p>
</form> 
*Maximal 2 mb 
<?
}
?>
</body>
</html>

PHP:
<?php 
// Datenbank
include '../config.php';

// Variabeln festlegen 
$max_byte_size = 2097152; 
$allowed_types =  "(jpg|jpeg|gif|bmp|png|JPG|JPEG|GIF|BMP|PNG)";
 
  
// Formular wurde abgeschickt 
if($_POST["submit"] == "Upload") { 
$i = $_POST["i"];
// Wurde wirklich eine Datei hochgeladen? 
for($count = 1;$count <= $i;$i--)
{
if(is_uploaded_file($_FILES["file"]["tmp_name"][$i])) { 

// Gültige Endung? ($ = Am Ende des Dateinamens) (/i = Groß- Kleinschreibung nicht berücksichtigen) 
if(preg_match("/\." . $allowed_types . "$/i", $_FILES["file"]["name"][$i])) { 

// Datei auch nicht zu groß 
if($_FILES["file"]["size"][$i] <= $max_byte_size) { 

// Alles OK -> Datei kopieren 
if(copy($_FILES["file"]["tmp_name"][$i], 'upload/'.$_FILES["file"]["name"][$i])) { 

echo "Datei erfolgreich hochgeladen!<br>"; 
echo "Name: " . $_FILES["file"]["name"][$i] . "<br>"; 
echo "Größe: " . $_FILES["file"]["size"][$i] . " Byte<br>"; 
echo "MIME-Type: " . $_FILES["file"]["type"][$i] . "<br>"; 
echo "Link: <a href=\"upload/". $_FILES["file"]["name"][$i] . "\">" . $_FILES["file"]["name"][$i] . "</a>"; 

if($_POST["cat"] == "pics" || $_POST["cat"] == "schatz" || $_POST["cat"] == "me")
{
$sql = "INSERT INTO images (link, name, groesse, typ, cat) 
      VALUES( 
            '<a href=\"upload/".$_FILES['file']['name'][$i]."\"><img src=\"upload/thumbnail.php?src=".$_FILES['file']['name'][$i]."&w=".$_POST['pixel']."&h=".$_POST['pixel']."\" border=\"0\"></A>',  
			'".$_FILES['file']['name'][$i]."',   
            '".$_FILES['file']['size'][$i]." Byte',     
            '".$_FILES['file']['type'][$i]."',   
            '".$_POST['cat']."'  
     )";  


  
mysql_query($sql) or die(mysql_error());
}
else
{
$sql = "UPDATE friends set pic = '<a href=\"upload/".$_FILES['file']['name'][$i]."\"><img src=\"upload/thumbnail.php?src=".$_FILES['file']['name'][$i]."&w=".$_POST['pixel']."&h=".$_POST['pixel']."\" border=\"0\"></A>' where name = '".$_POST['cat']."'";  
			
mysql_query($sql) or die(mysql_error());
}
} 
else { 

echo "Datei konnte nicht hochgeladen werden."; 

} 

} 
else { 

echo "Die Datei darf nur eine Größe von " . $max_byte_size . " Byte besitzen."; 

} 

} 
else { 

echo "Die Datei besitzt keine ungültige Endung."; 

} 

} 
else { 

echo "Keine Datei zum Hochladen angegeben."; 

} 

} 
}
else { 

echo "Bitte benutzen Sie das Upload Formular."; 

} 

?>


könnt ihr mir helfen den fehler zu finden ?

schonmal vielen dank
 
Hallo!

Ich glaube es müsste

Code:
$_FILES['file'][$i]['tmp_name']

und nicht

Code:
$_FILES['file']['tmp_name'][$i]

heißen. Weiters verstehe ich deine for-Schleife nicht, die bei 1 zu zählen beginnt und im Anschlus dekrimentiert. Was steht denn eigentlich in $_POST["i"] drinnen? Schreib auch ein besten mal

Code:
var_dump ($_FILES);

damit du siehst, was überhaupt alles übertragen wird. Wenn da alle deine upzuloadenen Bilder drinnen stehen, dann liegt's nur mehr am Algorithmus/Aufruf der einzelnen Instanzen. Hoffe, ich konnte helfen :) ...
 
Änderungen wie folgt vorgenommen:

PHP:
<?php 
// Datenbank
//include '../config.php';

// Variabeln festlegen 
$max_byte_size = 2097152; 
$allowed_types =  "(jpg|jpeg|gif|bmp|png|JPG|JPEG|GIF|BMP|PNG)";
 
  
// Formular wurde abgeschickt 
if($_POST["submit"] == "Upload") { 
$i = $_POST["i"];
// Wurde wirklich eine Datei hochgeladen? 
for($count = 0;$count <= $i;$i--)
{
if(is_uploaded_file($_FILES["file"][$i]["tmp_name"])) { 

// Gültige Endung? ($ = Am Ende des Dateinamens) (/i = Groß- Kleinschreibung nicht berücksichtigen) 
if(preg_match("/\." . $allowed_types . "$/i", $_FILES["file"][$i]["name"])) { 

// Datei auch nicht zu groß 
if($_FILES["file"][$i]["size"] <= $max_byte_size) { 

// Alles OK -> Datei kopieren 
if(copy($_FILES["file"][$i]["tmp_name"], 'upload/'.$_FILES["file"][$i]["name"])) { 

echo "Datei erfolgreich hochgeladen!<br>"; 
echo "Name: " . $_FILES["file"][$i]["name"] . "<br>"; 
echo "Größe: " . $_FILES["file"][$i]["size"] . " Byte<br>"; 
echo "MIME-Type: " . $_FILES["file"][$i]["type"] . "<br>"; 
echo "Link: <a href=\"upload/". $_FILES["file"][$i]["name"] . "\">" . $_FILES["file"][$i]["name"] . "</a>"; 

if($_POST["cat"] == "pics" || $_POST["cat"] == "schatz" || $_POST["cat"] == "me")
{
$sql = "INSERT INTO images (link, name, groesse, typ, cat) 
      VALUES( 
            '<a href=\"upload/".$_FILES['file'][$i]['name']."\"><img src=\"upload/thumbnail.php?src=".$_FILES['file'][$i]['name']."&w=".$_POST['pixel']."&h=".$_POST['pixel']."\" border=\"0\"></A>',  
			'".$_FILES['file'][$i]['name']."',   
            '".$_FILES['file'][$i]['size']." Byte',     
            '".$_FILES['file'][$i]['type']."',   
            '".$_POST['cat']."'  
     )";  


  
mysql_query($sql) or die(mysql_error());
}
else
{
$sql = "UPDATE friends set pic = '<a href=\"upload/".$_FILES['file'][$i]['name']."\"><img src=\"upload/thumbnail.php?src=".$_FILES['file'][$i]['name']."&w=".$_POST['pixel']."&h=".$_POST['pixel']."\" border=\"0\"></A>' where name = '".$_POST['cat']."'";  
			
mysql_query($sql) or die(mysql_error());
}
} 
else { 

echo "Datei konnte nicht hochgeladen werden."; 

} 

} 
else { 

echo "Die Datei darf nur eine Größe von " . $max_byte_size . " Byte besitzen."; 

} 

} 
else { 

echo "Die Datei besitzt keine ungültige Endung."; 

} 

} 
else { 

echo "Keine Datei zum Hochladen angegeben."; 

} 

} 
}
else { 

echo "Bitte benutzen Sie das Upload Formular."; 

} 

?>


Der vat dump:

Code:
array(1) { 
["file"]=> array(5) 
{ ["name"]=> array(2) 
{ 
[0]=> string(19) "Sonnenuntergang.jpg" 
[1]=> string(10) "Winter.jpg" 
} 
["type"]=> array(2) 
{ 
[0]=> string(11) "image/pjpeg" 
[1]=> string(11) "image/pjpeg" 
} 
["tmp_name"]=> 
array(2) 
{ 
[0]=> string(47) "/var/www/virtual/dj-mericon.de/phptmp/phpKKy4Od" 
[1]=> string(47) "/var/www/virtual/dj-mericon.de/phptmp/phpAcZjF2" 
}
["error"]=> 
array(2) 
{ 
[0]=> int(0) 
[1]=> int(0) 
} 
["size"]=> 
array(2) 
{ 
[0]=> int(71189) 
[1]=> int(105542) 
}
}               
}

ich danke dir schonmal für deine hilfe auch wenns micht nicht weiter gebracht hat :)
 
Zuletzt bearbeitet:
Der var_dump zeigt, dass wir doch

Code:
$_FILES['file']['tmp_name'][$i]

benötigen. Die Übertragung passt schon mal - es liegt also nur mehr Algorithmus. Ich würde daher die for-Schleife, die ich wie bereits erwähnt nicht verstehe, wie folgt notieren:

Code:
for ($i = 0; $i < sizeof ($_FILES); $i++)
{
...
}
 
Das Problem liegt nicht weit von dir weg.

Durch die FOR schleife ist alles etwas naja doof... ^^

mach doch einfach eine foreach schleife dann solltest du auch nicht das problem haben wenn mehr als 3 Datein hoch geladen werden. Und es werden alle Datein genommen...


PHP:
...
foreach($_FILES["file"]["tmp_name"] => $temp_not_need) {
$intway++;

if(is_uploaded_file($_FILES["file"]["tmp_name"][$intway])) { 

...
...
...
} //ende is_upload_file...
} // ende foreach
...
 
Code:
Parse error: syntax error, unexpected T_DOUBLE_ARROW in /var/www/virtual/dj-mericon.de/htdocs/upload/upload.php on line 14

PHP:
<?php 
// Datenbank
//include '../config.php';

// Variabeln festlegen 
$max_byte_size = 2097152; 
$allowed_types =  "(jpg|jpeg|gif|bmp|png|JPG|JPEG|GIF|BMP|PNG)";
 
  
// Formular wurde abgeschickt 
if($_POST["submit"] == "Upload") { 
$intway = $_POST["i"];
// Wurde wirklich eine Datei hochgeladen? 

foreach($_FILES["file"]["tmp_name"] => $temp_not_need) { // line 14
$intway++;

if(is_uploaded_file($_FILES["file"]["tmp_name"][$intwayntway])) {  

// Gültige Endung? ($ = Am Ende des Dateinamens) (/i = Groß- Kleinschreibung nicht berücksichtigen) 
if(preg_match("/\." . $allowed_types . "$/i", $_FILES["file"][$intway]["name"])) { 

// Datei auch nicht zu groß 
if($_FILES["file"][$intway]["size"] <= $max_byte_size) { 

// Alles OK -> Datei kopieren 
if(copy($_FILES["file"][$intway]["tmp_name"], 'upload/'.$_FILES["file"][$intway]["name"])) { 

echo "Datei erfolgreich hochgeladen!<br>"; 
echo "Name: " . $_FILES["file"][$intway]["name"] . "<br>"; 
echo "Größe: " . $_FILES["file"][$intway]["size"] . " Byte<br>"; 
echo "MIME-Type: " . $_FILES["file"][$intway]["type"] . "<br>"; 
echo "Link: <a href=\"upload/". $_FILES["file"][$intway]["name"] . "\">" . $_FILES["file"][$intway]["name"] . "</a>"; 

if($_POST["cat"] == "pics" || $_POST["cat"] == "schatz" || $_POST["cat"] == "me")
{
$sql = "INSERT INTO images (link, name, groesse, typ, cat) 
      VALUES( 
            '<a href=\"upload/".$_FILES['file'][$intway]['name']."\"><img src=\"upload/thumbnail.php?src=".$_FILES['file'][$intway]['name']."&w=".$_POST['pixel']."&h=".$_POST['pixel']."\" border=\"0\"></A>',  
			'".$_FILES['file'][$intway]['name']."',   
            '".$_FILES['file'][$intway]['size']." Byte',     
            '".$_FILES['file'][$intway]['type']."',   
            '".$_POST['cat']."'  
     )";  


  
mysql_query($sql) or die(mysql_error());
}
else
{
$sql = "UPDATE friends set pic = '<a href=\"upload/".$_FILES['file'][$intway]['name']."\"><img src=\"upload/thumbnail.php?src=".$_FILES['file'][$intway]['name']."&w=".$_POST['pixel']."&h=".$_POST['pixel']."\" border=\"0\"></A>' where name = '".$_POST['cat']."'";  
			
mysql_query($sql) or die(mysql_error());
}
} 
else { 

echo "Datei konnte nicht hochgeladen werden."; 

} 

} 
else { 

echo "Die Datei darf nur eine Größe von " . $max_byte_size . " Byte besitzen."; 

} 

} 
else { 

echo "Die Datei besitzt keine ungültige Endung."; 

} 

} 
else { 

echo "Keine Datei zum Hochladen angegeben."; 

} 

} 
}
else { 

echo "Bitte benutzen Sie das Upload Formular."; 

} 

?>
 
Ich würde das Ganze etwas anders strukturieren, damit es übersichtlich bleibt:
PHP:
// Datenbank
include '../config.php';

// Variabeln festlegen
$max_byte_size = 2097152;
$allowed_types =  '(?:jpe?g|gif|bmp|png)';
  
   
// Formular wurde abgeschickt
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['file']['error'])) {

	foreach ($_FILES['file']['error'] as $key => $val) {

		// prüft die Dateigröße und ändert ggf. den Status
		if ($_FILES['file']['size'][$key] > $max_byte_size) {
			$_FILES['file']['size'][$key] = UPLOAD_ERR_INI_SIZE;
		}

		// verarbeitet des Status
		switch ($_FILES['file']['error'][$key]) {
			// keine Datei angegeben
			case UPLOAD_ERR_NO_FILE:
				unset($_FILES['file']['name'][$key], $_FILES['file']['tmp_name'][$key], $_FILES['file']['size'][$key], $_FILES['file']['type'][$key]);
				continue;

			// Datei nur teilweise übertragen
			case UPLOAD_ERR_PARTIAL:
				echo 'Fehler beim Übertragen der Datei';
				continue;

			case UPLOAD_ERR_FORM_SIZE:
			case UPLOAD_ERR_INI_SIZE:
				echo 'Die Datei darf nur eine Größe von maximal ' . $max_byte_size . ' Byte besitzen.';
				continue;
		}

		// prüft ob hochgeladene Datei tatsächlich vorhanden ist
		if (!is_uploaded_file($_FILES['file']['tmp_name'][$key])) {
			echo 'Fehler beim Übertragen der Datei';
			continue;
		}

		// prüft die Dateierweiterung
		// Sicherheitshinweis: Dateierweiterung sagt nichts über den tatsächlichen Inhalt der Datei aus!
		if (!preg_match("/\." . $allowed_types . "$/i", $_FILES["file"]["name"][$key])) {  
			echo "Die Datei besitzt keine ungültige Endung.";  
			continue;
		}

		// prüft ob Datei bewegt werden kann
		if (!move_uploaded_file($_FILES["file"]["tmp_name"][$key], 'upload/'.$_FILES["file"]["name"][$key])) {
			echo 'Interner Fehler: Datei konnte nicht bewegt werden!';
			continue;
		}

		// alle bisherigen Operationen waren erfolgreich
		echo "Datei erfolgreich hochgeladen!<br>";
		echo "Name: " . htmlspecialchars($_FILES["file"]["name"][$key]) . "<br>";
		echo "Größe: " . $_FILES["file"]["size"][$key] . " Byte<br>";
		echo "MIME-Type: " . htmlspecialchars($_FILES["file"]["type"][$key]) . "<br>";
		echo "Link: <a href=\"upload/". htmlspecialchars($_FILES["file"]["name"][$key]) . "\">" . htmlspecialchars($_FILES["file"]["name"][$key]) . "</a>";

		if ($_POST["cat"] == "pics" || $_POST["cat"] == "schatz" || $_POST["cat"] == "me") {
			$sql = "INSERT INTO images (link, name, groesse, typ, cat)  
      VALUES(  
            '".mysql_real_escape_string("<a href=\"upload/".rawurlencode($_FILES['file']['name'][$key])."\"><img src=\"".htmlspecialchars("upload/thumbnail.php?src=".urlencode($_FILES['file']['name'][$key])."&w=".urlencode($_POST['pixel'])."&h=".urlencode($_POST['pixel']))."\" border=\"0\"></a>")."',
            '".mysql_real_escape_string($_FILES['file']['name'][$key])."',    
            '".mysql_real_escape_string($_FILES['file']['size'][$key]." Byte")."',
            '".mysql_real_escape_string($_FILES['file']['type'][$key])."',
            '".$_POST['cat']."'
     )";   
		} else { 
			$sql = "UPDATE friends set pic = '".mysql_real_escape_string("<a href=\"upload/".rawurlencode($_FILES['file']['name'][$key])."\"><img src=\"".htmlspecialchars("upload/thumbnail.php?src=".htmlspecialchars(urlencode($_FILES['file']['name'][$key])."&w=".urlencode($_POST['pixel'])."&h=".urlencode($_POST['pixel']))."\" border=\"0\"></a>")."' WHERE name = '".mysql_real_escape_string($_POST['cat'])."'";
		}
		mysql_query($sql) or die(mysql_error());
	}
} else {
	echo "Bitte benutzen Sie das Upload Formular.";
}
 
Ok das script von Gumbo soweit verstanden aber noch einen kleinen fehler in dieser zeile

PHP:
 if ($_POST["cat"] == "pics" || $_POST["cat"] == "schatz" || $_POST["cat"] == "me") {
            $sql = "INSERT INTO images (link, name, groesse, typ, cat)  
      VALUES(  
            '".mysql_real_escape_string("<a href=\"upload/".rawurlencode($_FILES['file']['name'][$key])."\"><img src=\"".htmlspecialchars("upload/thumbnail.php?src=".urlencode($_FILES['file']['name'][$key])."&w=".urlencode($_POST['pixel'])."&h=".urlencode($_POST['pixel']))."\" border=\"0\"></a>")."',
            '".mysql_real_escape_string($_FILES['file']['name'][$key])."',    
            '".mysql_real_escape_string($_FILES['file']['size'][$key]." Byte")."',
            '".mysql_real_escape_string($_FILES['file']['type'][$key])."',
            '".$_POST['cat']."'
     )";   
        } else { 
   /* fehler */         $sql = "UPDATE friends set pic = '".mysql_real_escape_string("<a href=\"upload/".rawurlencode($_FILES['file']['name'][$key])."\"><img src=\"".htmlspecialchars("upload/thumbnail.php?src=".htmlspecialchars(urlencode($_FILES['file']['name'][$key])."&w=".urlencode($_POST['pixel'])."&h=".urlencode($_POST['pixel']))."\" border=\"0\"></a>")."' WHERE name = '".mysql_real_escape_string($_POST['cat'])."'";
        }
        mysql_query($sql) or die(mysql_error());
    }


Parse error: syntax error, unexpected ';' in /var/www/virtual/dj-mericon.de/htdocs/upload/upload.php on line 74



ich weis zwar was der fehler bedeutet aber kann ihn nicht finden :( irgendwie bin ich wieder voll raus aus php
 
Zurück