• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mehrere dateien hochladen ... array?

Status
Für weitere Antworten geschlossen.

axöööl

Neues Mitglied
so der titel sagt eigentlich schon alles...
ich möchte gerne das man mehrere dateien hochladen kann (in meinem fall bilder im JPG format).
die sollen dann in eine datenbank geschrieben werden, zusammne mit daten wie gallery und wer das bild hochgeladne hat.
das klappt soweit auch ganz gut, aber nru mit einer datei.

hab gelesen man soll das am besten mit nem array machen, ich weis aber garnicht wie... gegoogelt hab ich shcon, gibt zwar ein paar fertige scripte, ich hätte aber doch gern mein eigenes, damit ich genau weis wies funzt, sonst lern ichs ja nie ;)^^

ach ja ich nenne die bilde rnach der id in der tabelle, damit nicht zufällig eine datei überschrieben wird^^

alos hie rmal die codes:

main.php

PHP:
<center><span style="letter-spacing:4px">Bilder hochladen</span><br><br>
Hier kannst du Bilder bis zu einer Grösse von 1.5 mb hochladen.<br><br>
<form action="up.php" method="post" enctype="multipart/form-data">
<table border="0">
<tr><td>Aufnamedatum</td><td>:</td><td><input name="tag" size="1" value=""><input name="monat" size="1" value=""><input name="jahr" size="2" value="">(TT.MM.JJJJ)</td></tR>
<tr><td>User</td><td>:</td><td><input type="text" name="user" size="20"></td></tr>
<tr><td>Gallery</td><td>:</td><td><input type="text" name="gallery" size="20"></td></tr>
<tr><td>Bild 1</td><td>:</td><td><input type="file" name="datei[]"><br></td></tr>
<tr><td>Bild 2</td><td>:</td><td><input type="file" name="datei[]"><br></td></tr>
<tr><td>Bild 3</td><td>:</td><td><input type="file" name="datei[]"><br></td></tr>
<tr><td></td><td></td><td><input type="submit" value="Hochladen"><br></td></tr>
</table>
</form>
(der username wird später übergeben, mach da vor noch ein login, will aber jetzte rtsaml das das mit den mehrfachen uploads geht.)




up.php

PHP:
<?php

$DBHost = "";     // Adresse des mySQL-Server  
$DBUser = "";      // Benutzername
$DBPass = "";    // Passwort
$DBName = "";    // Datenbank

$DBConnect = @mysql_connect($DBHost, $DBUser, $DBPass);
if ($DBConnect != TRUE) {
    echo "Es konnte keine Verbindung mit der Datenbank hergestellt werden! Fehlermeldung: <br><br>".mysql_error();
    die;
}
mysql_select_db($DBName, $DBConnect);

$dateityp = GetImageSize($_FILES['datei']['tmp_name']);

$abfrage = "SELECT * FROM images ORDER BY id";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
    {$id = $row->id;}
if($id== "") {$imagename = "1";} else {    $imagename = $id+1;}

if($dateityp[2] != 0)
   {
   if($_FILES['datei']['size'] <  1600000)
      {
      move_uploaded_file($_FILES['datei']['tmp_name'], "upload/".$imagename.".JPG");
      echo "Das Bild wurde Erfolgreich nach upload/$imagename.JPG hochgeladen";
      }

   else
      {
         echo "Das Bild darf nicht größer als 100 kb sein ";
      }

    }

else
    {
    echo "Bitte nur Bilder im Gif bzw. jpg Format hochladen";
    }
$img_name = "$imagename.JPG";
$tag = $_POST["tag"];
$monat = $_POST["monat"];
$jahr = $_POST["jahr"];
$datum = "$tag.$monat.$jahr";
$gallery = $_POST["gallery"];
$user = $_POST["user"];
$ip = getenv("REMOTE_ADDR");
$status = "0";

$db_entry = "INSERT INTO images (img_name, datum, gallery, user, ip, status) VALUES ('$img_name', '$datum', '$gallery', '$user', '$ip', '$status')";
$entry = mysql_query($db_entry);
?>

danke im vorraus!
 
ja, das hab ich ja auch schon gesehn, aber ich verstehs nicht wirklich...kann mir das mal jemand ein bisschen genauer erläutern...alos in das uploadformular muss nicht mhehr rein? oder muss ich in die [] klammern doch ne nummerierung machen, also datei[1], datei[2], datei[3],...?

Und wie mach ich das dann in der anderen datei? muss ich nicht irgendwie ne schleife baun, damit der das solange durchläuft bis alle dateien hochgeladen sind? weil kann ja sein das nur 2 von 3 hochgeladen werden.
 
ja, das hab ich ja auch schon gesehn, aber ich verstehs nicht wirklich...kann mir das mal jemand ein bisschen genauer erläutern...alos in das uploadformular muss nicht mhehr rein? oder muss ich in die [] klammern doch ne nummerierung machen, also datei[1], datei[2], datei[3],...?

Und wie mach ich das dann in der anderen datei? muss ich nicht irgendwie ne schleife baun, damit der das solange durchläuft bis alle dateien hochgeladen sind? weil kann ja sein das nur 2 von 3 hochgeladen werden.
überprüfe, ob $_FILES['datei']['tmp_name'] ein array ist, dann ne schleife, ansonsten direkt nehmen. Prüfen mit is_array().
Und bei den Klammern brauchste nix ändern, das is alles richtig.
 
geht immer noch nicht... :(

tja wie schon gesagt, es funktioniert immer noch nicht... :(

hier mal was ich bes jetzt geändert hab (in up.php)

PHP:
<?php

$DBHost = "";     // Adresse des mySQL-Server  
$DBUser = "";      // Benutzername
$DBPass = "";    // Passwort
$DBName = "";    // Datenbank

$DBConnect = @mysql_connect($DBHost, $DBUser, $DBPass);
if ($DBConnect != TRUE) {
    echo "Es konnte keine Verbindung mit der Datenbank hergestellt werden! Fehlermeldung: <br><br>".mysql_error();
    die;
}
mysql_select_db($DBName, $DBConnect);
$dateien = array($_FILES['datei']['tmp_name']);
$arraydateien = is_array($dateien);
while($arraydateien = "true")
{
$dateityp = GetImageSize($_FILES['datei']['tmp_name']);
$abfrage = "SELECT * FROM images ORDER BY id";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
    {$id = $row->id;}
if($id== "") {$imagename = "1";} else {    $imagename = $id+1;}

if($dateityp[2] != 0)
   {
   if($_FILES['datei']['size'] <  1600000)
      {
      move_uploaded_file($_FILES['datei']['tmp_name'], "upload/".$imagename.".JPG");
      echo "Das Bild wurde Erfolgreich nach upload/$imagename.JPG hochgeladen";
      }

   else
      {
         echo "Das Bild darf nicht größer als 100 kb sein ";
      }

    }

else
    {
    echo "Bitte nur Bilder im Gif bzw. jpg Format hochladen";
    }
$img_name = "$imagename.JPG";
$tag = $_POST["tag"];
$monat = $_POST["monat"];
$jahr = $_POST["jahr"];
$datum = "$tag.$monat.$jahr";
$gallery = $_POST["gallery"];
$user = $_POST["user"];
$ip = getenv("REMOTE_ADDR");
$status = "0";

$db_entry = "INSERT INTO images (img_name, datum, gallery, user, ip, status) VALUES ('$img_name', '$datum', '$gallery', '$user', '$ip', '$status')";
$entry = mysql_query($db_entry);
}
?>
und es kommt folgedne fehlermeldung

Code:
[B]Warning[/B]:  getimagesize(Array) [[URL="http://wsef.ws.funpic.de/fotos-in-mg/imageupload/function.getimagesize"]function.getimagesize[/URL]]: failed to open stream: No such file or directory in [B]/usr/export/www/vhosts/funnetwork/hosting/wsef/fotos-in-mg/imageupload/up.php[/B] on line [B]18[/B]
Bitte nur Bilder im Gif bzw. jpg Format hochladen
(circa 50 mal)

und diese kommt ganz am ende:
Code:
[B]Fatal error[/B]:  Maximum execution time of 10 seconds exceeded in [B]/usr/export/www/vhosts/funnetwork/hosting/wsef/fotos-in-mg/imageupload/up.php[/B] on line [B]20[/B]
DANKE!
 
Das liegt an Zeile 16. Diese Schleife ist ne endlos schleife. folgendes:
PHP:
while($arraydateien = "true")
Du musst das anders machen, $dateien = array($_FILES['datei']['tmp_name']); ist auch blödsinn. Also ab Zeile 14 schreibst sowas in der art:
PHP:
$dateien = is_array($_FILES['datei']['tmp_name']) ? $_FILES['datei']['tmp_name'] : (array)$_FILES['datei']['tmp_name'];

$size = is_array($_FILES['datei']['size']) ? $_FILES['datei']['size'] : (array)$_FILES['datei']['size'];

foreach ($dateien as $key => $tmp_name) {
/*
nun abspeichern (dene ganzen querys und ausgaben etc..
auf size des aktuellen uploads kannst du mit $size[$key] zugreifen.
und den temp name mit $tmp_name bzw $dateien[$key]
*/
}
Den rest solltest mal selbst weiter versuchen.
Dein obriges geht nich, weil du immer die variable setzt und das ist immer true :P also erstens == benutzen und noch beser foreach :P
Am Anfang sollte man natürlich noch überprüfen, ob überhaupt was verschickt wurde..isset() Auch könnte man den oberen code nochmal inner schleife laufen lassen, dann wärs nich so viel schreib arbeit.. Aber für den Anfang musst du`s ja erstmal verstehen..
 
Zuletzt bearbeitet:
ja dnake, funktioniert jetzt fast richtig. hab jetzt die anzahl der hochzuladenden dateien mal auf zehn erhöht. der code bleibt ja der selbe...aber wenn nicht alle 10 genutzt werden, sonder z.b. nur 6 wird alles trotzdem 10mal durchlaufen, und es werden auch 10 einträge in die tabelle gemacht, wie kann ich das denn verhindern?

PHP:
<?php

$DBHost = "";     // Adresse des mySQL-Server  
$DBUser = "";      // Benutzername
$DBPass = "";    // Passwort
$DBName = "";    // Datenbank

$DBConnect = @mysql_connect($DBHost, $DBUser, $DBPass);
if ($DBConnect != TRUE) {
    echo "Es konnte keine Verbindung mit der Datenbank hergestellt werden! Fehlermeldung: <br><br>".mysql_error();
    die;
}
mysql_select_db($DBName, $DBConnect);

$dateien = is_array($_FILES['userfile']['tmp_name']) ? $_FILES['userfile']['tmp_name'] : (array)$_FILES['userfile']['tmp_name'];
$size = is_array($_FILES['userfile']['size']) ?
$_FILES['userfile']['size'] : (array)$_FILES['userfile']['size'];

foreach ($dateien as $key => $tmp_name) {

$dateityp = GetImageSize($dateien[$key]); 
$abfrage = "SELECT * FROM images ORDER BY id";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
    {$id = $row->id;}

if($id== "") {$imagename = "1";} else {$imagename = $id+1;}


if($dateityp[2] != 0)
   {

   if($size[$key] <  1600000)
      {
      move_uploaded_file($dateien[$key], "upload/".$imagename.".JPG");
      echo "Das Bild $umagename.JPG wurde erfolgreich hochgeladen. (Größe: $size[$key])<br><br>";
      }

   else
      {
         echo "Das Bild darf nicht größer als 1.5 mb sein . (Größe:  $size[$key])";
      }

    }

else
    {
    echo "Bitte nur Bilder im Gif bzw. jpg Format hochladen";
    }

$img_name = "$imagename.JPG";
$tag = $_POST["tag"];
$monat = $_POST["monat"];
$jahr = $_POST["jahr"];
$datum = "$tag.$monat.$jahr";
$gallery = $_POST["gallery"];
$user = $_POST["user"];
$ip = getenv("REMOTE_ADDR");
$status = "0";

$db_entry = "INSERT INTO images (img_name, datum, gallery, user, ip, status) VALUES ('$img_name', '$datum', '$gallery', '$user', '$ip', '$status')";
$entry = mysql_query($db_entry);
}
?>
<!--- 
$_FILES['userfile']['tmp_name']
--->

DANKE! alex
 
hab dir mal was "kleines" geschriegen

Es ist eine Klasse die du durch folgendes Aufrufst
PHP:
include("__URL-ZU-UPLOAD.PHP__");
$upload = new Upload;
$upload->SetAnzahl(2); // Setzen der Anzahl der Felder für Dateien
$upload->SetMime(Array('image/gif','image/pjpeg','image/png')); // Setzen der Mime-Typen
$upload->SetSize(Array(2,3,4)); // Setze der max. Größe der Datei, je nach MimeTyp, in gleicher Reihenfolge wie Mime-Typen
$upload->SetConnection("datenbankserver","username","password","db"); //MYsql benutzerdaten
$upload->SetDir("upload/"); // Relative angabe zum Uploadordner
echo $upload->TestConfig();
echo $upload->Ausgabe();

Die klasse selber kann ich hier nicht posten, so viel zeichen darf man nicht verwenden

also: Anhang anzeigen upload.zip
 
hat keiner mehr eine idee??
wäre cool wenn euch vllt doch noch was einfällt.

alex
pack den mysql query in den if block beim move_uploaded_file, da wird doch geprüft, ob die datei korrekt ist, also machst da auch den eintrag in die db..
/edit:
@Frank:
1. Das ist ein Hilfe forum, also sol er es auch selbst machen, also was soll dieses script, mit dem du dich wahrscheinlich nur selbst präsentieren möchtest (hat man als leser so die vermutung)?
2. Das ding ist unsicher, wenn ich will, lösche ich dir die ganze Datenbank mit nur einem upload ;=) (werd jetzt nich sagen wie, da kommen manche noch auf pöse Gedanken..) Informier dich ma bissl über XSS. (überleg dir mal, was man mit dem usereingabe feld alles anstellen könnte..)
3. Schreib array klein und error_reporting etc KLEIN, funktionen werdne gleichgeschrieben und Klassen Groß!
4. Kann er damit nix anfangen, er hat die db tabelle ja nich..
 
Zuletzt bearbeitet:
ja, danke das ich da nicht selber drauf gekommen bin... ist ja logisch..^^
mh naja nächstes mal werde ich meinen grauen zellen doch etwas mehr abverlangen^^
ja mit dem script von Frank konnt eich auch nicht so wirlich was anfangen, hat bei mir auch nicht richtig funktioniert :(^^
naja ich jab ja jetzt mein eigenes und weise genau wie es arbeitet :)

nochmal dnake für deine schnelle und geduldige hilfe blax :):)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben