Avatar billede langkiller Nybegynder
23. november 2011 - 22:49 Der er 23 kommentarer og
1 løsning

Upload af flere filer php script

(Jeg har bare taget det relevante med. grunden til alle \'erne er at  det er printet i en php fil)
har følgende på html delen:

<form action=\"insert.php?action=reunion\" method=\"post\" enctype=\"multipart/form-data\">
<input type=\"file\" name=\"img\" multiple=\"multiple\">
<input type=\"submit\" value=\"Opret\" style=\"float: right; height: 40px; width: 120px; margin-top: 80px;\">
</form>



og php delen:

    // BILLEDER
                            $reunion_sql = mysql_query("SELECT * FROM reunions WHERE timestamp='$timestamp'");
                            $reunion = mysql_fetch_array($reunion_sql);
                           
                                    // OPRETTER MAPPE TIL BILLED ALBUMMET
                                    $mappe = $reunion["id"] . $reunion["sted"]. $aar;
                                    mkdir("reunion_billeder/".$mappe);
               

// INDSAETTER BILLEDET                   
                                    if ((($_FILES["img"]["type"] == "image/gif")
                                    || ($_FILES["img"]["type"] == "image/jpeg")
                                    || ($_FILES["img"]["type"] == "image/pjpeg"))
                                    && ($_FILES["img"]["size"] < 9999999999999999))
                                      {
                                      if ($_FILES["img"]["error"] > 0)
                                        {
                                        echo "Fejl: " . $_FILES["file"]["error"] . "<br />";
                                        }
                                      else
                                        {
                                        echo "Upload: " . $_FILES["img"]["name"] . "<br />";
                                        echo "Type: " . $_FILES["img"]["type"] . "<br />";
                                        echo "Size: " . ($_FILES["img"]["size"] / 1024) . " Kb<br />";
                                        echo "Temp file: " . $_FILES["img"]["tmp_name"] . "<br />";
                                   
                                        if (file_exists("reunion_billeder/".$mappe."/" . $_FILES["img"]["name"]))
                                          {
                                          echo $_FILES["img"]["name"] . " Eksisterer allerede. ";
                                          }
                                        else
                                          {
                                          move_uploaded_file($_FILES["img"]["tmp_name"],
                                          "reunion_billeder/".$mappe."/" . $_FILES["img"]["name"]);
                                          echo "Placeret i: " . "reunion_billeder/".$mappe."/" . $_FILES["img"]["name"];
                                          }
                                        }
                                      }
                                    else
                                      {
                                      echo "Fejl!";
                                      }   


Dette script uploader 1 enkelt billede, men kunne godt tænke mig at få det til at uploader flere på en gang. går ud fra at man skal bruge en while eller for løkke.. kan bare ikke helt se det for mig og har ikke rigtig kunne finde noget på nettet. håber nogen kan hjælpe
Avatar billede webweaver Praktikant
24. november 2011 - 00:55 #1
Der findes flere sider på nettet omkring multi-upload scripts :)
Se f. eks. http://phpeasystep.com/phptu/2.html

Der findes også mere elegante løsninger med JavaScript eller jQuery og Ajax der snakker sammen med PHP fx.
Avatar billede langkiller Nybegynder
24. november 2011 - 01:09 #2
Har allerede været inde og kigge på den :)
Kan desværre ikke bruge den, da den bare modtager 3 filer fra 3 forskellige inputs. Bruger html5's billed uploader/gennemse knap hvor man kan vælge flere filer på en gang og ved dermed ikke hvor mange filer der skal modtages på php siden, det skal tilpasses på en eller anden måde.. kunne tænkes at man skulle bruge en løkke til det :b
Avatar billede olebole Juniormester
24. november 2011 - 16:24 #3
<ole>

Du kan bladre gennem filerne i en køkke à la:


$numFiles = count($_FILES['myfile']['tmp_name']);
for ($=0; i<$numFiles; $i++) {
  /* Gør noget med
  $_FILES['myfile']['tmp_name'][$i];
  $_FILES['myfile']['name'][$i];
  $_FILES['myfile']['size'][$i];
  */
}



/mvh
</bole>
Avatar billede langkiller Nybegynder
24. november 2011 - 23:17 #4
Hmm det virker ikke helt. Har prøvet med følgende nu:

// OPRETTER MAPPE                                $mappe = $reunion["id"] . $reunion["sted"]. $aar;                mkdir("reunion_billeder/".$mappe);
                                   
                                    // INDSAETTER BILLEDER                                $numFiles = count($_FILES['img']['tmp_name']);                                    for ($i=0; $i<$numFiles; $i++)                                    {                                      move_uploaded_file($_FILES["img"]["tmp_name"], "reunion_billeder/".$mappe."/" . $_FILES["img"]["name"]);                                    }
Avatar billede langkiller Nybegynder
24. november 2011 - 23:18 #5
Okay, ved ikke lige hvorfor koden så så uoverskueligt ud ovenover, prøver lige igen :)

// OPRETTER MAPPE                                    $mappe = $reunion["id"] . $reunion["sted"]. $aar;
                                    mkdir("reunion_billeder/".$mappe);
                                   
                                    // INDSAETTER BILLEDER
                                    $numFiles = count($_FILES['img']['tmp_name']);
                                    for ($i=0; $i<$numFiles; $i++)
                                    {
                                   
                                      move_uploaded_file($_FILES["img"]["tmp_name"], "reunion_billeder/".$mappe."/" . $_FILES["img"]["name"]);
                                    }
Avatar billede olebole Juniormester
24. november 2011 - 23:59 #6
Kan du uploade til en mappe, der eksisterer i forvejen - og som du har skriverettigheder på?

Når du afprøver nye ting, så skær altid koden ned til et minimum. Så får du styr på det nye, og du kan gå videre og udvide med andre features. På den måde undgår du at invitere flere fejlkilder indenfor på samme tid. Det gør det lettere at styre dem  *o)
Avatar billede langkiller Nybegynder
25. november 2011 - 00:31 #7
nej kunne ikke uploade til en mappe der allerede eksisterede.. :(
Avatar billede langkiller Nybegynder
25. november 2011 - 00:33 #8
Men funktionen virker hvis man bare vælger at uploade et enkelt billede med html5 "vælg filer" funktionen
Avatar billede olebole Juniormester
25. november 2011 - 03:29 #9
Hvis du er helt sikker på, stien er korrekt, og du er sikker på at have skriverettigheder på mappen, lyder det meget mærkeligt, at du ikke skulle kunne uploade filen.

Prøv også at slå alle fejlmeddelelser til. Skriv dette i toppen af dokumentet:

error_reporting(E_ALL);
Avatar billede olebole Juniormester
25. november 2011 - 03:31 #10
#8 får mig til at tænke på, om det mon ikke er din klientkode, der lugter
Avatar billede olebole Juniormester
25. november 2011 - 03:33 #11
Hvad sker der f.eks, hvis du prøver med en helt almindelig form (husk korrekt enctype) med to-tre input type=file?
Avatar billede langkiller Nybegynder
25. november 2011 - 12:07 #12
Lod lige formen sende til en test side da jeg også havde en række tekstfelter i den anden.. fik dette i den nye:
Notice: Undefined index: img in C:\xampp\htdocs\sites\langkilde_dk\ny\hej.php on line 15

og linje 15 der er:
$numFiles = count($_FILES['img']['tmp_name']);

og alle FILES img går jeg ud fra

hvad er korrekt enctype? Jeg har lige nu enctype=\"multipart/form-data\" i mit form tag



Når jeg prøvede med 3 af de almindelige input=file uploadede den kun 1 af de valgte filer.. ?
Avatar billede olebole Juniormester
25. november 2011 - 17:44 #13
Ja, det er den korrekte enctype, men hvorfor er det, du skriver nu enctype=\"multipart/form-data\"? Det tyder på, du skriver din form ud med PHP.

Kan du give mig et hint om, hvad jeg skal skrive til dig for at få dig til at forstå, at du skal lave et helt simpelt dokument - som kun indeholder en form - som kun indeholder et par file-felter og en submitknap.

Dette dokument skal sende til et dokument med et helt tætbarberet PHP script, som kun flytter de uploadede filer til en bestemt mappe (som du har sat skriverettigheder på).

Det duer som sagt ikke, når du åbner for flere fejlkilder af gangen, når du prøver at lære noget nyt.

Hvis du stadig har problemer, når du prøver den omtalte fremgangsmåde, vil jeg bede dig vise HTML- og PHP-koden. Så har vi en mulighed for at hjælpe dig  =)
Avatar billede langkiller Nybegynder
25. november 2011 - 18:27 #14
Tænkte ikke at det var nødvendigt, men jeg har lavet en ren html og php side alligevel.. de ser således ud:


HTML:
<form action="inds.php" method="post" enctype="multipart/form-data">
<input type="file" name="img" multiple="multiple">
  <input type="submit" value="Opret reunion">
</form>


PHP:
<?php
error_reporting(E_ALL);

$numFiles = count($_FILES['img']['tmp_name']);
for ($i=0; $i<$numFiles; $i++)
{                               
move_uploaded_file($_FILES["img"]["tmp_name"], "reunion_billeder/".$_FILES["img"]["name"]);
}               
?>



Og jeg får igen fejlmeddelelsen:
Notice: Undefined index: img in C:\xampp\htdocs\sites\langkilde_dk\ny\hej.php on line 4

LINJE 4:
$numFiles = count($_FILES['img']['tmp_name']);
Avatar billede langkiller Nybegynder
25. november 2011 - 18:34 #15
sorry det er selvf: den her form jeg havde prøvet med:

<form action="hej.php" method="post" enctype="multipart/form-data">
<input type="file" name="img">
<input type="file" name="img">
<input type="file" name="img">
  <input type="submit" value="Opret reunion">
</form>

og samme php side.

Den modtage kun 1 af billederne
Avatar billede olebole Juniormester
25. november 2011 - 23:23 #16
Forkert tanke ... det er altid nødvendigt! Ellers kan du jo netop ikke finde ud af, hvor dine fejl opstår.

Hvis du skal have PHP til at opfatte variabler som et array, skal de navngives med square brackets:


<input type="file" name="img[]">
<input type="file" name="img[]">
<input type="file" name="img[]">

Avatar billede langkiller Nybegynder
27. november 2011 - 01:14 #17
det var det der manglede :) nu virker det sgu. Siger endnu en gang tak for hjælpen Olebole!
Smider lige koden her inde for en god ordens skyld :


HTML:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
        <title>Multiple upload</title>
    </head>
   
    <body>
        <form action="upload.php" method="post" enctype="multipart/form-data">
            <input type="file" multiple name="img[]" />
            <input type="submit" name="img" value="Upload" />
        </form>
    </body>
</html>







PHP:
<?php
if (isset($_POST['img']))
{
var_dump($_FILES);
$numFiles = count($_FILES['img']['tmp_name']);
    for ($i=0; $i<$numFiles; $i++)
    {                               
    move_uploaded_file($_FILES["img"]["tmp_name"][$i], "reunion_billeder/".$_FILES["img"]["name"][$i]);
    }               
}


?>
Avatar billede langkiller Nybegynder
27. november 2011 - 01:27 #18
men den opfører sig ikke helt som den skal .. kan højest uploade 5 billeder, hvis jeg prøver med flere bliver der slet ikke uploadet noget ??
Avatar billede olebole Juniormester
27. november 2011 - 01:27 #19
Selvtak  *o)
Avatar billede olebole Juniormester
27. november 2011 - 01:33 #20
Det handler sikkert om (samlet) filstørrelse. Veksler antallet mon ikke, hvis du udelukkende uploader filer på 10-20KB - og derefter prøver med filer på 200-500KB?
Avatar billede langkiller Nybegynder
27. november 2011 - 12:34 #21
jo det var det der var galt, men kan man ikke få den til at ignorerer den totale størrelse af filerne?

Og kunne slet ikke uploade nogle billeder da jeg satte billed uploaderen sammen med resten af siden :s
Avatar billede olebole Juniormester
27. november 2011 - 16:42 #22
Nej, men hvis du har adgang til php.ini filen, kan du hæve den maksimalt tilladte størrelse ved at ændre upload_max_filesize.

Hvad 'resten af siden' angår, så fortsæt på den måde, jeg prøvede at lære dig ovenfor. Tilføj én ting ad gangen - og kun én! Du er stadig i gang med at udforske ukendt territorium, så det gælder om at minimrere antallet af mulige fejlkilder  *o)

Det kan være lidt bøvlet at finde fejl, når man roder med Ajax ... man ser jo aldrig resultatet i responsedokumentet. Derfor skrev jeg på et tidspunkt dette lille logging script:


/********************************************************************************
    Logs a mixed variable in a file. Every logging is appended to the existing
    content of the file, followed by a separator line.
   
    Parameters:
        $var (Mixed Variable):    The variable to be logged
        $context (String):        Context header for the entry [Optional]
        $file (String):            Path to logfile - incl. filename [Optional]
   
    Example:
    if (!empty($_POST)) {
        log_dump($_POST, 'Logging $_POST');
    }
   
    - would produce an entry like this in 'log.txt':
   
    Logging $_POST:
    Array
    (
        [firstname] => John
        [lastname] => Smith
    )
   
    --- --- --- ---
********************************************************************************/
function log_dump($var, $context=false, $file='log.txt') {
    $fp = fopen($file, 'a');
    ob_start();
    print_r($var);
    $str = ob_get_contents();
    ob_clean();
    $str = str_replace("\n", "\r\n", $str);
    fwrite($fp, ($context?$context.":\r\n":'').$str."\r\n--- --- --- ---\r\n");
    fclose($fp);
}


Det kunne du f.eks. skrive øverst i dit PHP-dokument og så logge modtagne filer i stil med:


if (!empty($_FILES)) {
    log_dump($_FILES, 'Modtagne filer i $_FILES');
}


- og du kan naturligvis også logge $_POST variablerne. Det er da i det mindste en begyndelse  =)
Avatar billede langkiller Nybegynder
27. november 2011 - 18:23 #23
okay, det med maksimum på filstørrelsen er alligevel lige meget, der er ikke noget maksimum når man uploader på min server på nettet hvor den i sidste ende skal køres. :)

Ja jeg må jo bare tage det skridt for skridt med scriptet. tak igen :D
Avatar billede olebole Juniormester
27. november 2011 - 18:41 #24
You're welcome  =)
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