Hallo liebe Forenmitglieder,
ich versuche gerade für ein Projekt ein Upload-Skript mit multipler Upload-Fuktion zu erstellen. Doch in der Logik und/oder im Syntax sind wohl einige Fehler drin, die mich einfach nicht weiter kommen lassen.
Gedacht ist die Funktion wie folgt:
upload.php
---------------------------------------------------------------------------------------------------
1. Der User wählt die Anzahl gewünschter Uploads per DropDown-Liste
2. Nach Knopfdruck schmeisst das Skript die entspr. Anzahl an Formular-Feldern raus
3. Alle Felder werden vor der Übergabe an upload_file.php durch JS auf Vollständigkeit überprüft
4. Sind alle Felder belegt bzw. mit Eintrag versehen, werden die Werte an upload_file.php übergeben
upload_file.php
--------------------------------------------------------------------------------------------------
1. Nun wird in einer Schleife einzeln jeder Upload auf den richtigen Mime-Type überprüft. (in diesem Fall .swf oder .jpg)
2. Sollte der Mime-type nicht stimmen, ist die Idee den Namen (realname) der Datei in einen Array zu schreiben und später die Dateinamen in der Fehlermeldung auszugeben.
3. Ist der Typ richtig, wird im nächsten Schleifendurchgang auf richtige Größe der Datei geprüft. Ist die Datei zu groß, soll sie auch in den Fehlerarray geschrieben werden.
4. Nur wenn beide Prüfungen erfolgreich durchlaufen wurden, wird die Datei in den Zielordner verschoben und der Name in einen Array geschrieben um später (Ausbau-Phase 2) einen DB-Eintrag zu generieren.
5. Nach Durchlauf der Prüf-Schleife werden beide Array per Session-Variable an upload.php übergeben, um dort als Fehler- bzw. Erfolgsmeldung ausgegeben zu werden und anhand der Anzahl fehlerhafter Uploads neue Formularfelder zu generieren.
Soweit zur Theorie! [Verunsichert]
Folgender Fehler passieren:
Es werden zwar immer alle richtigen Dateien in den Zielordner übertragen, aber die Ausgabe zur Information des Users stimmt nicht.
Das Problem fängt an, wenn man richtige Dateien (richtiger Dateityp und Größe) mit falschen Dateien uploadet.
Meist fehlen bei der Fehlerausgabe Dateinamen (in nachfolgender Ausgabe wurde versucht 4 Files zu uploaden :
gespeicherte Files: images/italien_052006_0598_amalfi.jpg
gespeicherte Files: images/italien_052006_1121_positan.jpg
nichtgespeicherte Files:
nichtgespeicherte Files: (un)Heiland.jpg
Hier nun die Skripte zur Ansicht:
upload.php
-----------------------------------------------------------------
upload_file.php
--------------------------------------------------------------------
Ich hoffe es kann mir jemand helfen, weil ich langsam verzweifle.
Gruß aus Hannover,
Alex
ich versuche gerade für ein Projekt ein Upload-Skript mit multipler Upload-Fuktion zu erstellen. Doch in der Logik und/oder im Syntax sind wohl einige Fehler drin, die mich einfach nicht weiter kommen lassen.
Gedacht ist die Funktion wie folgt:
upload.php
---------------------------------------------------------------------------------------------------
1. Der User wählt die Anzahl gewünschter Uploads per DropDown-Liste
2. Nach Knopfdruck schmeisst das Skript die entspr. Anzahl an Formular-Feldern raus
3. Alle Felder werden vor der Übergabe an upload_file.php durch JS auf Vollständigkeit überprüft
4. Sind alle Felder belegt bzw. mit Eintrag versehen, werden die Werte an upload_file.php übergeben
upload_file.php
--------------------------------------------------------------------------------------------------
1. Nun wird in einer Schleife einzeln jeder Upload auf den richtigen Mime-Type überprüft. (in diesem Fall .swf oder .jpg)
2. Sollte der Mime-type nicht stimmen, ist die Idee den Namen (realname) der Datei in einen Array zu schreiben und später die Dateinamen in der Fehlermeldung auszugeben.
3. Ist der Typ richtig, wird im nächsten Schleifendurchgang auf richtige Größe der Datei geprüft. Ist die Datei zu groß, soll sie auch in den Fehlerarray geschrieben werden.
4. Nur wenn beide Prüfungen erfolgreich durchlaufen wurden, wird die Datei in den Zielordner verschoben und der Name in einen Array geschrieben um später (Ausbau-Phase 2) einen DB-Eintrag zu generieren.
5. Nach Durchlauf der Prüf-Schleife werden beide Array per Session-Variable an upload.php übergeben, um dort als Fehler- bzw. Erfolgsmeldung ausgegeben zu werden und anhand der Anzahl fehlerhafter Uploads neue Formularfelder zu generieren.
Soweit zur Theorie! [Verunsichert]
Folgender Fehler passieren:
Es werden zwar immer alle richtigen Dateien in den Zielordner übertragen, aber die Ausgabe zur Information des Users stimmt nicht.
Das Problem fängt an, wenn man richtige Dateien (richtiger Dateityp und Größe) mit falschen Dateien uploadet.
Meist fehlen bei der Fehlerausgabe Dateinamen (in nachfolgender Ausgabe wurde versucht 4 Files zu uploaden :
gespeicherte Files: images/italien_052006_0598_amalfi.jpg
gespeicherte Files: images/italien_052006_1121_positan.jpg
nichtgespeicherte Files:
nichtgespeicherte Files: (un)Heiland.jpg
Hier nun die Skripte zur Ansicht:
upload.php
-----------------------------------------------------------------
PHP-Code:
<?
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<div id="gesamteBreite">
<?
require_once("safe/data.php");
// Prüfen ob es schon einen fehlerhaften Uploadversuch gab
// wenn nicht, dann normalen Upload-Dialog generieren
// wenn doch, Anzahl gescheiterter Uploads protokolieren und entspr. Anzahl Formulare ausgeben
if(empty($_SESSION['error']))
{
echo"<form name='uploadcount' action='$_PHPSELF' method='Post'>";
echo"Ich möchte <select name='uploadcount'>";
for($i=1; $i<=10; $i++){echo"<option value='$i'>$i</option>";}
for($i=20; $i<=100; $i+=10){echo"<option value='$i'>$i</option>";}
echo"</select> Datei(en) hochladen.";
echo"<input type='submit' value='Formular generieren' />";
echo"</form>";
echo"<div class='formular'>";
echo"<form name='upload' enctype='multipart/form-data' action='upload_file.php' method='post' onSubmit='return checkform();'>";
echo"<input type='hidden' value='".$_POST['uploadcount']."' name='count' />";
echo"<table>";
for($i=1; $i<=$_POST['uploadcount'];$i++)
{
echo"<tr><td class='name'>Datei auswählen:</td><td class='feld'><input type='file' name='userfile[]'></td></tr>";
}
if(!empty($_POST['uploadcount'])) // Erst denn Upload-Button zeigen wenn eine Upload-Anzahl gewählt wurde
{
echo"<tr><td class='name'> </td><td class='feld'><input type='submit' value='Datei(en) hochladen' /><input type='reset' value='Reset' /></td></tr>";
echo"</table>";
echo"</form>";
echo"</div>";
}
}
else
{
// ********************** -- Fehler- und Erfolgs-Ausgabe -- ***************************
echo"<div id='error'>";
echo $_SESSION['save']."<br /><br />";
echo "Folgende Dateien wurden gespeichert:<br /><br />";
for($i=0; $i<count($_SESSION['error']);$i++) {
echo $_SESSION['saved'][$i]."<br /><br />";
}
echo"Folgende Datei(en) wurden nicht gespeichert:<br /><br />";
for($i=0; $i<count($_SESSION['error']);$i++)
{
echo $_SESSION['error'][$i]."<br /><br />";
}
echo"Entweder waren sie zu groß (max. 200 Kb) oder waren vom falschen Typ.";
echo"</div><br />";
// **********************************************************************
echo"<div class='formular'>";
echo"<form name='upload' enctype='multipart/form-data' action='upload_file.php' method='post' onSubmit='return checkform();'>";
echo"<input type='hidden' value='".count($_SESSION['error'])."' name='count' />";
echo"<table>";
for($i=0; $i<count($_SESSION['error']); $i++)
{
echo"<tr><td class='name'>Datei auswählen:</td><td class='feld'><input type='file' name='userfile[]'></td></tr>";
}
echo"<tr><td class='name'> </td><td class='feld'><input type='submit' value='Datei(en) hochladen' /><input type='reset' value='Reset' /></td></tr>";
echo"</table>";
echo"</form>";
echo"</div>";
}
?>
</div><!-- Ende #gesamteBreite -->
</body>
</html>
--------------------------------------------------------------------
PHP-Code:
<?
session_start();
require_once("safe/data.php");
$location="images/";
$downloadlocation="../files/";
$max_filesize=200000;
/* --------- Uploads auf Größe und Mime-Type prüfen ---------- */
$i=0;
while($i<$_POST['count'])
{
if($_FILES['userfile']['type'][$i] != 'image/jpeg' and $_FILES['userfile']['type'][$i] != 'application/x-shockwave-flash')
{
$nonsaved_files[$i]=$_FILES['userfile']['name'][$i];
$i++;
}
else
{
if($_FILES['userfile']['size'][$i] > $max_filesize)
{
$nonsaved_files[$i]=$_FILES['userfile']['name'][$i];
$i++;
}
else
{
// Files in richtigen Ordner verschieben
$success[$i]=move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $location.$_FILES['userfile']['name'][$i]);
$saved_files[$i]=$location.$_FILES['userfile']['name'][$i];
$_SESSION['saved']=$saved_files[$i];
if($success[$i])
{
//$saved_files[$i]=$location.$_FILES['userfile']['name'][$i];
//$abfrage = "insert into pages values ('','$saved_files[$i]')";
//mysql_db_query($db, $abfrage, $con);
}
$i++;
}
}
}
for($i=0; $i<count($saved_files); $i++)
{
echo"gespeicherte Files: ".$saved_files[$i]."<br />";
}
for($i=1; $i<=count($nonsaved_files); $i++)
{
echo"nichtgespeicherte Files: ".$nonsaved_files[$i]."<br />";
}
// Erfolgsmeldung in Session speichern
$_SESSION['save']="Es wurde(n) ".count($saved_files)." Seite(n) gespeichert!";
// Fehler-Array an Session-Variable übergeben
$_SESSION['error']=$nonsaved_files;
//header("location:upload.php");
exit();
?>
Gruß aus Hannover,
Alex
Kommentar