Avatar billede flim Nybegynder
19. oktober 2003 - 23:38 Der er 25 kommentarer og
1 løsning

Upload af flere filer på een gang.

Jeg har lavet en side hvor jeg kan uploade en fil til min MySQL database, og det virker sådan set fint nok.

Jeg søger lidt kode til hvordan man kan uploade flere filer på een gang. Så man vælger fx 10 filer, og så trykker på upload.

Nogen der har et link eler lidt kode til det?

På forhånd tak.

Mvh Flim
Avatar billede amix Nybegynder
19. oktober 2003 - 23:46 #1
Du kan gøre det ved hjælp af arrays. Her er et eksempel jeg har fundet som jeg håber du kan bruge til noget:
<form action='$PHP_SELF' method='POST' enctype='multipart/form-data'>
<input class='form' type='text' size='3' name='tracknum[]' value='$tracks'>
<input class='form' type='text' size='25' name='uartist[]' value='$uartist'>
<input class='form' type='text' size='25' name='usong[]' value=''>

<input type='hidden' name='MAX_FILE_SIZE' value='10000'>
<input type='hidden' name='upload' value='yes'>
<input class='nappi' type='submit' name='submit' value='Upload songs'>
</form>

PHP:
$number_of_files = count($_FILES['userfile']);
for ($i=0; $i < $number_of_files; $i++)
      {
      if ($_FILES['userfile']['size'] !== 0)
            {
        $namename= "$uartist[$i]-$usong[$i].mp3";
        $file=$_FILES['userfile']['tmp_name'][$i];
      if (move_uploaded_file($_FILES['userfile']['tmp_name'][$i],
"/mp3/$namename"))
                  {
            print "<tr><td>File $namename upload and rename
        succesful!</td></tr>";
                  }
            }
            else
            {
            print "<tr><td>You have to upload some files!</td></tr>";
            }
      }
Avatar billede amix Nybegynder
19. oktober 2003 - 23:49 #2
Avatar billede detox Nybegynder
19. oktober 2003 - 23:49 #3
Jeg rettede sådan en til her for nyligt, med upload af 10 filer:

http://www.eksperten.dk/spm/408512
02/10-2003 02:31:46
Avatar billede detox Nybegynder
19. oktober 2003 - 23:53 #4
Den skal bare barberes lidt ned. ;-)
Avatar billede amix Nybegynder
19. oktober 2003 - 23:55 #5
det skal den vidst :D
Avatar billede flim Nybegynder
20. oktober 2003 - 00:02 #6
Takker for Jers hurtige svar, og forsøger at kigge på det i morgen. Regnede ikke med svar før i morgen, men skal nok komme med noget feed-back på hvilken løsning jeg valgte og evt. flere spøgsmål :)

Nat nat...
Avatar billede detox Nybegynder
20. oktober 2003 - 00:03 #7
Her er humlen:

<?
if(isset($_POST['upload'])) {
    $dist = $_SERVER["DOCUMENT_ROOT"] . "/upload_dir/";
    foreach ($_POST as $key => $val) {
        $$key = $val;
    }
    for ($i=0;$i<10;$i++) {
        if (isset($_FILES['upfil']['name'][$i]) && $_FILES['upfil']['name'][$i] != "") {
            $filnavn = $_FILES['upfil']['name'][$i];
            $tempnavn = $_FILES['upfil']['tmp_name'][$i];
            $sti = $dist . $filnavn;
            move_uploaded_file($tempnavn, $sti);
        }
    }

}else{
?>
<html>
<head>
<title>Multi fil upload</title>
</head>
<form action="" method="post" enctype="multipart/form-data">
<?
for ($i=1;$i<11;$i++) {
?>
    <input type="file" name="upfil[]" size="20">
<?
    if ($i%2 == 0) echo "<br />";
}
?>
<input type="submit" value="Tilf&oslash;j Festen" name="upload">
</form>
</body>
</html>
<?
}
?>
Avatar billede detox Nybegynder
20. oktober 2003 - 00:11 #8
Lige rettet lidt til:

<?
if(isset($_POST['upload'])) {
    $dist = "upload/"; // *** Din upload mappe ***
    $out = "";
    for ($i=0;$i<10;$i++) {
        if (is_uploaded_file($_FILES['upfil']['tmp_name'][$i])) {
            $filnavn = $_FILES['upfil']['name'][$i];
            $tempnavn = $_FILES['upfil']['tmp_name'][$i];
            $sti = $dist . $filnavn;
            move_uploaded_file($tempnavn, $sti);
            $out .= $filnavn." er uploadet!<br />";
        }
    }
echo $out;
}else{
?>
<html>
<head>
<title>Multi fil upload</title>
</head>
<form action="" method="post" enctype="multipart/form-data">
<?
for ($i=1;$i<11;$i++) {
?>
    <input type="file" name="upfil[]" size="20">
<?
    if ($i%2 == 0) echo "<br />";
}
?>
<input type="submit" value="Send filer" name="upload">
</form>
</body>
</html>
<?
}
?>
Avatar billede flim Nybegynder
27. oktober 2003 - 18:29 #9
$dist = "upload/"; // *** Din upload mappe *** <--- Hvad vil det her sige?


Jeg uploader direkte til en database og ikke til nogen specifik mappe...
Avatar billede detox Nybegynder
27. oktober 2003 - 18:49 #10
Ok, det havde jeg så misforstået. Troede du uploadede til en mappe. Du kan stadig bruge formen, men det andet skal selvfølgelig rettes lidt til.
Avatar billede flim Nybegynder
27. oktober 2003 - 18:53 #11
detox - det er det jeg skal bruge til det andet spørgsmål, hvor folk kan uploade forskellige sange og på den måde lave en stor database hvor vi alle hjælper til...

"Det ska rettes "lidt" til".... Heh, kan du sagtens sige...

Men jo, jeg havde da forestillet mig en løkke hvor den tager hver enkelt fil og giver den en unikt id, og som man så kan se i databasen bagefter.

Jeg kan godt poste min nuværende kode med en fil, som nogen (læs: du) måske kunne rette til i et snuptag?

Det er bare skide svært for sådan en almindelig dødelig som mig :|
Avatar billede detox Nybegynder
27. oktober 2003 - 18:57 #12
Jeg vil foreslå at du har et autonummereret id. Koden skal nok være noget i den her stil:

<?
if(isset($_POST['upload'])) {
    $out = "";
    for ($i=0;$i<10;$i++) {
        if (is_uploaded_file($_FILES['upfil']['tmp_name'][$i])) {
            $filnavn = $_FILES['upfil']['name'][$i];
            $tempnavn = $_FILES['upfil']['tmp_name'][$i];
            $size = $_FILES['upfil']['size'][$i];
            $code = addslashes(fread(fopen($tempnavn, "r"), $size));
            mysql_query("INSERT INTO tabel (code,navn,size) VALUES ($code,$filnavn,$size)") or die(mysql_error());
            $out .= $filnavn." er uploadet!<br />";
        }
    }
echo $out;
}else{
?>
<html>
<head>
<title>Multi fil upload</title>
</head>
<form action="" method="post" enctype="multipart/form-data">
<?
for ($i=1;$i<11;$i++) {
?>
    <input type="file" name="upfil[]" size="20">
<?
    if ($i%2 == 0) echo "<br />";
}
?>
<input type="submit" value="Send filer" name="upload">
</form>
</body>
</html>
<?
}
?>
Avatar billede flim Nybegynder
27. oktober 2003 - 18:58 #13
Jeg har autonummeret id....

Jeg kigger på koden om lidt - skal lige se Simpsons - BBL :)
Avatar billede detox Nybegynder
27. oktober 2003 - 19:28 #14
Er lige rettet lidt til og testet:

<?
if(isset($_POST['upload'])) {
    require 'connect.inc.php'; // Forbindelse til din database
    $out = "";
    for ($i=0;$i<10;$i++) {
        if (is_uploaded_file($_FILES['upfil']['tmp_name'][$i])) {
            $filnavn = $_FILES['upfil']['name'][$i];
            $tempnavn = $_FILES['upfil']['tmp_name'][$i];
            $size = $_FILES['upfil']['size'][$i];
            $code = addslashes(fread(fopen($tempnavn, "r"), $size));
            $query = "INSERT INTO tabel (`code`, `navn`, `size`) VALUES ('$code', '$filnavn', '$size')";
            mysql_query($query) or die(mysql_error());
            $out .= $filnavn." er uploadet!<br />";
        }
    }
echo $out;
}else{
?>
<html>
<head>
<title>Multi fil upload</title>
</head>
<form action="" method="post" enctype="multipart/form-data">
<?
for ($i=1;$i<11;$i++) {
?>
    <input type="file" name="upfil[]" size="20">
<?
    if ($i%2 == 0) echo "<br />";
}
?>
<input type="submit" value="Send filer" name="upload">
</form>
</body>
</html>
<?
}
?>
Avatar billede detox Nybegynder
27. oktober 2003 - 19:29 #15
Tabel eksempel:

CREATE TABLE `tabel` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `code` blob,
  `navn` varchar(255) default NULL,
  `size` int(11) default NULL,
  `dato` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM
Avatar billede flim Nybegynder
27. oktober 2003 - 19:29 #16
Ok, den prøver jeg så lige. Jeg skal dog lige have lavet en ny database, samt rettet din til..

Skriver lige senere om _jeg_ kan få det til at virke...
Avatar billede flim Nybegynder
27. oktober 2003 - 19:40 #17
Cool - det virker lige det jeg prøvede. Det skal så lige rettes til så det passer med mine oplysninger, men point'ene er i hverrt fald dine!

Skriver du lige et svar?
Avatar billede detox Nybegynder
27. oktober 2003 - 19:53 #18
Ja, da. Ellers en udemærket idé med en database med musiktekster. Det kan man jo altid bruge....
Hvis det kun er '.txt' filer der skal uploades, kunne man godt tilføje et lille tjek, så ikke der kommer forkerte typer i tabellen. Og felttypen kan osse ændres til fx MEDIUMTEXT.
Avatar billede flim Nybegynder
27. oktober 2003 - 19:55 #19
I min oprindelige database havde jeg faktisk lavet et check så der kun kom html-filer op, så jeg ikke fik billeder og alt mulig andet skrammel, så det vil jeg nu prøve at implementere i det kode du gav mig....
Avatar billede flim Nybegynder
27. oktober 2003 - 21:06 #20
Hey - detox - er du her endnu?

Nu kan jeg godt uploade flere filer - jeg vil dog stadig gerne give dem hvert sit navn (se evt. www.flim.dk/boyssange/multifil.php) så hver fil får sit eget navn. Dette skal vel stå inden i løkken, men det skal vel også laves som et array som det andet?

Hvordan gøres det?
Avatar billede detox Nybegynder
27. oktober 2003 - 22:53 #21
Her er et forslag, hvis jeg har forstået dig rigtigt. Så har jeg tilføjet muligheden for at skrive et navn for hver fil, samt at angive et afsendernavn:

<?
if(isset($_POST['upload'])) {
    require 'connect.inc.php'; // Forbindelse til din database
    $afsender = $_POST['afsender'];
    $out = "Tak for dit bidrag ".$afsender."<br />";
    for ($i=0;$i<10;$i++) {
        if (is_uploaded_file($_FILES['upfil']['tmp_name'][$i])) {
            $navn = $_POST['navn'][$i];
            $tempnavn = $_FILES['upfil']['tmp_name'][$i];
            $size = $_FILES['upfil']['size'][$i];
            $code = addslashes(fread(fopen($tempnavn, "r"), $size));
            $query = "INSERT INTO tabel (`code`, `navn`, `size`, `dato`, `afsender`) VALUES ('$code', '$navn', '$size', NOW(), '$afsender')";
            mysql_query($query) or die(mysql_error());
            $out .= $navn." er uploadet!<br />";
        }
    }
echo $out;
}else{
?>
<html>
<head>
<title>Multi fil upload</title>
</head>
<table>
<form action="" method="post" enctype="multipart/form-data">
<?
for ($i=1;$i<11;$i++) {
?>
    <tr>
    <td>Navn:</td><td><input type="text" name="navn[]" size="20" /></td>
    <td><input type="file" name="upfil[]" size="20" /></td>
    </tr>
<?
}
?>
<tr><td>Dit navn:</td><td><input type="text" name="afsender" size="20"></td></tr>
<tr><td></td><td><input type="submit" value="Send filer" name="upload"></td></tr>
</form>
</table>
</body>
</html>
<?
}
?>
Avatar billede detox Nybegynder
27. oktober 2003 - 22:56 #22
PS: Der er osse tilføjet en dato, hvilket der jo var plads til i den anden tabel.
Avatar billede flim Nybegynder
27. oktober 2003 - 22:57 #23
Og imens du ikke var her, så fandt jeg faktisk selv løsningen på det... Det havde nu været nemmere hvis du bare havde skrevet det med det samme ;)

Ej, tak for hjælpen, men jeg har fået det til at virke mens du var væk!

Nat nat...
Avatar billede flim Nybegynder
27. oktober 2003 - 22:58 #24
Det er ikke færigt endnu, men udkastet er her:

Upload af filer: www.flim.dk/boyssange/multifil.php

Se database: www.flim.dk/boyssange/showfiles2.php

Dejligt når det virker bare nogenlunde :)

Nat
Avatar billede detox Nybegynder
27. oktober 2003 - 23:10 #25
Ja, det tænkte jeg ikke lige på, men godt det virker.
Avatar billede flim Nybegynder
27. oktober 2003 - 23:13 #26
Ja, det er det vigtigste, men jeg regner med at ty til din hjælp en gang i morgen!

Jeg skal nemlig ha' lavet en søge funktion i tabellen,  så man kan søge efter filnavne, men det er vel "bare" noget med .. WHERE $kommentar = '*...*'

Og så en masse wildcards som skal sættes rigtigt op, men den tid den glæde...

Fanme godt der er så mange rare mennesker herinde der gider hjælpe en :)

*OUT*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester