Upload / Trotz leerem Feld Bestätigung

Ich_halt224

Erfahrenes Mitglied
Hallo ihr Lieben,

ich bräuchte mal kurz Hilfe bei einem ziemlich kleinem und einfachem Upload-Code.
Bin leider ziemlicher in PHP und steige deswegen nicht dahinter, wie ich mein Problem lösen kann.

Also ist ein ganz gewöhnliches Upload-Script, welches den Dateinamen ändert.
(Man kann 5 Dateien gleichzeitig hochladen)
Hier der Code der "upload.php":

PHP:
<?php 
$tempname = $_FILES['file']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
$tempname = $_FILES['file1']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file1']['type']; 
$size = $_FILES['file1']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
$tempname = $_FILES['file2']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file2']['type']; 
$size = $_FILES['file2']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
$tempname = $_FILES['file3']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file3']['type']; 
$size = $_FILES['file3']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
$tempname = $_FILES['file4']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file4']['type']; 
$size = $_FILES['file4']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
?>


So, nun habe ich folgendes Problem:
Wenn ich nur zwei Dateien habe die ich hochladen will, bekomme ich folgende Meldung:

Code:
Die Datei File00001.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00001.jpg

Die Datei File00002.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00002.jpg

Die Datei File00003.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00003.jpg

Die Datei File00003.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00003.jpg

Die Datei File00003.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00003.jpg

Die ersten zwei Ausgaben sind ja richtig, allerdings erfindet er dann eine "File00003.jpg", denn diese gibt es ja nicht, da ich nur zwei Dateien ausgewählt habe, und gibt das bei jedem der anderen Felder auch aus, wo ja nichts drin stand, da nur zwei Dateien ausgewählt wurden.

Könnt Ihr mir helfen, dass bei den Feldern, bei denen keine Datei angegeben wurde, auch kein Echo erfolgt?

Und wie löse ich das Problem mit der erfundenen "File00003.jpg"?


Vielen Dank schon mal für eure Hilfe.

Tim
 
Da musst du vor der Zeile
PHP:
$tempname = $_FILES['filex']['tmp_name'];
eine Abfrage machen:
PHP:
if ( is_array($_FILES['filex']) ) {
P.S.: x steht für eine bestimmte Zahl.
 
Als erstes ein kleiner Tipp... mach die Formularfelder anderst..

HTML:
statt:
<input type="file" name="file1">
<input type="file" name="file2">
<input type="file" name="file3">
...

Lieber so:
<input type="file" name="file[]">
<input type="file" name="file[]">
<input type="file" name="file[]">

Dann kannst du in einer schleife die ganzen file copy`s machen und brauchst den code nicht 5 mal hinschreiben.

würde dann so aussehen:

PHP:
<?
foreach ($_FILES['file'] as $file){
    if(!is_array($file)) continue;
    $tempname       = $file['tmp_name']; 
    $type           = $file['type']; 
    $size           = $file['size']; 
    
    $ext            = $type == 'image/gif' ? '.gif' : '.jpg'; 
    $num            = 1; 
    $name           = 'File00001'.$ext; 
    while(file_exists($name)) { 
      $num++; 
      $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
    }
    if(move_uploaded_file("$tempname", "$name")){ 
        echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
              Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
    } else { 
        echo "Datei konnte nicht hochgeladen werden<br>";
    }  
}
?>
 
Hi Tobee,

danke für deine Hilfe.
Habe den Code so geändert:

PHP:
<?php 
if ( is_array($_FILES['filex']) ) {
$tempname = $_FILES['file']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
if ( is_array($_FILES['filex']) ) {
$tempname = $_FILES['file1']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file1']['type']; 
$size = $_FILES['file1']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
if ( is_array($_FILES['filex']) ) {
$tempname = $_FILES['file2']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file2']['type']; 
$size = $_FILES['file2']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
if ( is_array($_FILES['filex']) ) {
$tempname = $_FILES['file3']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file3']['type']; 
$size = $_FILES['file3']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
if ( is_array($_FILES['filex']) ) {
$tempname = $_FILES['file4']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file4']['type']; 
$size = $_FILES['file4']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
?>


Dabei bekomme ich aber leider diese Fehlermeldung:
Code:
Parse error: syntax error, unexpected $end in /kunden/87757/htdocs/chvt.de/www/images/upload.php on line 103

Was meinst du denn mit dem x?


Liebe Grüße

Tim
 
Hallo engelb,

danke auch für deine Hilfe.
Wenn ich das so mache wie du es geschrieben hast (Formular geändert und den Code den du geschrieben hast als upload.php gespeichert) bekomme ich beim Hochladen von zwei Dateien diese Meldung:

Code:
Datei konnte nicht hochgeladen werden
Datei konnte nicht hochgeladen werden
Datei konnte nicht hochgeladen werden
Datei konnte nicht hochgeladen werden
Datei konnte nicht hochgeladen werden

:confused:
 
Du musst die If Abfrage auch mit } wieder schließen.


Habe ich so gemacht: (Gebe jetzt nur mal den Teil an)

PHP:
<?php 
if ( is_array($_FILES['filex']) ) {
}
$tempname = $_FILES['file']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
}

Nun bekomme ich keine Fehlermeldung aber beim Hochladen von zwei Dateien folgendes:

Code:
Die Datei File00001.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00001.jpg

Die Datei File00002.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00002.jpg

Die Datei File00003.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00003.jpg

Die Datei File00003.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00003.jpg

Die Datei File00003.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00003.jpg

Also leider immer noch das gleiche Problem wie anfangs. :confused:
 
Du liest die Antworten nicht sauber durch.
Tobee hat geschrieben, dass das "x" in "filex" für die Zahl der jeweiligen Datei stehen muss.

Im Übrigen würde ich mal die Version von engelb probieren, diese ist sehr ordentlich.
 
Habe ich so gemacht: (Gebe jetzt nur mal den Teil an)
Wenn dann so:
PHP:
<?php 
if ( is_array($_FILES['filex']) ) {
$tempname = $_FILES['file']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
}
}
 
Hallo Tobee,

habe das jetzt so geändert wie du es geschrieben hast, der Code der upload.php sieht also so aus:

PHP:
<?php 
if ( is_array($_FILES['file']) ) {
$tempname = $_FILES['file']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
}
} 
if ( is_array($_FILES['file1']) ) {
$tempname = $_FILES['file']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
}
} 
if ( is_array($_FILES['file2']) ) {
$tempname = $_FILES['file']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
}
} 
if ( is_array($_FILES['file3']) ) {
$tempname = $_FILES['file']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
}
}
if ( is_array($_FILES['file4']) ) {
$tempname = $_FILES['file']['tmp_name']; 
$ext = $type == 'image/gif' ? '.gif' : '.jpg'; 
$name = 'File00001'.$ext; 
$num = 1; 
while(file_exists($name)) { 
  $num++; 
  $name = 'File'.str_repeat('0', 5-strlen((string)$num)).$num.$ext; 
}
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 
if(empty($err)) { 
    copy("$tempname", "$name"); 
echo "Die Datei $name wurde erfolgreich hochgeladen!<br> 
          Die Adresse zu deinem Foto ist folgende:   <a target='_blank' href='http://www.chvt.de/images/$name'>www.chvt.de/images/$name</a><br><br>"; 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
}
}  
?>

Lade ich nun zwei Dateien hoch bekomme ich dieses Echo:

Code:
Die Datei File00001.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00001.jpg

Die Datei File00002.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00002.jpg

Die Datei File00003.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00003.jpg

Die Datei File00004.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00004.jpg

Die Datei File00005.jpg wurde erfolgreich hochgeladen!
Die Adresse zu deinem Foto ist folgende: www.chvt.de/images/File00005.jpg

ALLE Dateinamen wurden auf den Server geladen, also obwohl nur bei zwei Feldern im Formular eine Datei stand, habe ich nun 5 Dateien auf meinem Server.

Und ALLE dieser 5 Dateien sind das gleiche Bild, nämlich das erste.
 
Zurück