Upload - Was ist Falsch?

crashx

Erfahrenes Mitglied
Ich bekomme einen Mehrfach upload nicht hin was ist falsch?

eintrag.html
HTML:
<html>
<head>
</head>
<body>
<form method="POST" enctype="multipart/form-data" action="upload_alpha.php">
	<p><input type="file" name="file[]" size="20"><br>
	<input type="file" name="file[]" size="20"><br>
	<input type="file" name="file[]" size="20"></p>
	<p><input type="submit" value="Absenden" name="B1"></p>
</form>
</body>
</html>

upload_alpha.php
PHP:
<?
include("inc/dbconnect.php");

$tempname = $_FILES['file']['tmp_name']; 
$name = $_FILES['file']['name']; 
if(empty($err)) { 
    copy("$tempname", "upload/images/$name"); 
    if (isset($_FILES)) {
  	print_r($_FILES);
}
    echo "Die Datei $name wurde erfolgreich hochgeladen!"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 

$eintrag = "INSERT INTO bilder (pic1, pic2, pic3) 
VALUES ('upload/images/$name', 'upload/images/$name','upload/images/$name')";

$eintragen = mysql_query($eintrag);
 
$sql = 'OPTIMIZE TABLE `auto`';
echo mysql_error();
?>

Die Fehlermeldung:
Code:
Warning: copy(Array): failed to open stream: No such file or directory in /srv/www/htdocs/web36/html/upload_alpha.php on line 8
Array ( [file] => Array ( [name] => Array ( [0] => Norton-Logo-I.jpg [1] => Norton-Logo-II.jpg [2] => TuneUp-Logo I.jpg ) [type] => Array ( [0] => image/pjpeg [1] => image/pjpeg [2] => image/pjpeg ) [tmp_name] => Array ( [0] => /srv/www/htdocs/web36/phptmp/phpcKz6dQ [1] => /srv/www/htdocs/web36/phptmp/phpb66fYi [2] => /srv/www/htdocs/web36/phptmp/phpmY1LwS ) [error] => Array ( [0] => 0 [1] => 0 [2] => 0 ) [size] => Array ( [0] => 4735 [1] => 47199 [2] => 35670 ) ) ) Die Datei Array wurde erfolgreich hochgeladen!
In der Datenbank sieht es dan wie folgt aus:
upload/images/array
Es solte dort aber so aussehen: upload/images/namederdatei.jpg

Wenn ich eine einzelne Datei Hochlade funktioniert das ganze.

vielen dank für eure Hilfe.
 
Wie anhand des Auszugs zu sehen ist, sind die Array-Elemente $_FILES['file']['name'], $_FILES['file']['type'] etc. ebenfalls Arrays.
 
Wenn du mehrere Dateien uploadest(und dabei für die Uploadfelder identische Namen verwendest), enthalten die entsprechenden $_FILE-Elemente jeweils Arrays(mit genausoviel Elementen, wie Uploadfelder existieren).

Da musst du halt drauf zugreifen:
Code:
//bspw.
$tempname = $_FILES['file']['tmp_name'][0];
....gibt dir den tmp_name der Datei aus dem ersten Upload-Feld.
 
Das hat Funktioniert...
Nur immer noch eine komische Meldung mit der ich nichts anzufangen weiss.
Code:
Array ( [file] => Array ( [name] => Array ( [0] => TuneUp-Logo I.jpg [1] => TuneUp-Logo-II.jpg [2] => TuneUp-Logo-III.jpg ) [type] => Array ( [0] => image/pjpeg [1] => image/pjpeg [2] => image/pjpeg ) [tmp_name] => Array ( [0] => /srv/www/htdocs/web36/phptmp/phpciS9G8 [1] => /srv/www/htdocs/web36/phptmp/phpkzHXPm [2] => /srv/www/htdocs/web36/phptmp/phpMcjkgH ) [error] => Array ( [0] => 0 [1] => 0 [2] => 0 ) [size] => Array ( [0] => 35670 [1] => 25900 [2] => 45692 ) ) )
Aber in der Tabelle sind die jeweiligen daten richtig eingetragen, die Bilder sind auch im richtigen Verzeichnis gelandet. Nur wird nur immer die erste datei hochgeladen und in alle 3 zeilen eingetragen
 
Du musst das Eintragen für alle hochgeladenen Dateien durchführen, am sinnvollsten, indem du ermittelst, wieviel überhaupt hochgeladen wurden und sooft in einer Schleife das Eintragen vornimmst(wobei du jeweils den Array-Index hochzählst)
 
Hmm grübel...

Ich bekomme das nicht ganz gerade gebogen.

Das Aktuelle script.
PHP:
<? 
include("inc/dbconnect.php"); 

if (isset($_FILES)) {
 	print_r($_FILES);
}

$tempname = $_FILES['file']['tmp_name'][0]; 
$name = $_FILES['file']['name'][0]; 
if(empty($err)) { 
    copy("$tempname", "upload/images/$name"); 
    if (isset($_FILES)) { 
      print_r($_FILES); 
} 
    echo "Die Datei $name wurde erfolgreich hochgeladen!"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 

$eintrag = "INSERT INTO bilder (pic1, pic2, pic3) 
VALUES ('upload/images/$name', 'upload/images/$name','upload/images/$name')"; 

$eintragen = mysql_query($eintrag); 

$sql = 'OPTIMIZE TABLE `auto`'; 
echo mysql_error(); 
?>

Es wird das erste Bild hochgeladen und Eingetragen, aber nicht die anderen Bilder.

Danke.
 
Probiers mal so:
Code:
include("inc/dbconnect.php");

if (isset($_FILES)) 
  {
    for($i = 0; $i < count($_FILES['file']['tmp_name']); ++$i)
      {
        $tempname = $_FILES['file']['tmp_name'][$i];
        $name     = $_FILES['file']['name'][$i];
        if (is_uploaded_file($tempname))
          {
            move_uploaded_file($tempname,"upload/images/$name");
            $eintrag = "INSERT INTO bilder (pic1, pic2, pic3) VALUES ('upload/images/$name', 'upload/images/$name','upload/images/$name')";
            $eintragen = mysql_query($eintrag);
            echo "Die Datei $name wurde erfolgreich hochgeladen!<br />";
          }
    
      }
  }
 
OK das hat fast Funktioniert.

Nur trägt es mir jetzt das Bild1 in pic1, pic2, pic3 ein
das bild2 in eine weitere spalte in pic1, pic2, pic3 und bild 3 ebenfals in eine neue Spalte und nicht in eine spalte Pic1= bild1 pic2= Bild2 pic3= Bild 3

id pic1 pic2 pic3
1 bild1 bild1 bild1
2 bild2 bild2 bild2
3 bild3 bild3 bild3

aber es müsste doch so aussehen

id pic1 pic2 pic3
1 bild1 bild2 bild3

Danke
 
:-)
Das hatte ich garnicht näher betrachtet...mit der DB.

Wie Gumbo bereits erwähnte, ist die Tabellenstruktur möglicherweise etwas unglücklich gewählt.
Wie auch immer, du könntest es so machen:
Code:
include("inc/dbconnect.php");

if (isset($_FILES)) 
  {
    for($i = 0; $i < count($_FILES['file']['tmp_name']); ++$i)
      {
        $tempname = $_FILES['file']['tmp_name'][$i];
        $name     = $_FILES['file']['name'][$i];
        if (is_uploaded_file($tempname))
          {
            move_uploaded_file($tempname,"upload/images/$name");
            echo "Die Datei $name wurde erfolgreich hochgeladen!<br />";
          }
      }
    $eintrag = "INSERT INTO bilder (pic1, pic2, pic3) VALUES ('upload/images/".implode("',upload/images/'",$_FILES['file']['name'])."')";
    $eintragen = mysql_query($eintrag);
  }
 
Zurück