Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: upload multiplo file

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    216

    upload multiplo file

    ciao a tutti
    sto cercando di fare un multiLoad di file

    il form è cosi
    codice HTML:
    <form action="../scripts/loadFile.php" name="loadFiles" method="GET" enctype="multipart/form-data">
    <input type="text"  name="file[]" value="URL"/><br />
    <input type="file"  name="file[]" multiple="multiple"/><br />
    <input type="submit" value="LOAD" />
    </form>
    mentre per il codice che deve gestire l'upload ho il problema che non riesco a ricavare le info dall'array...
    ovviamente non sto utilizzando $_FILES perchè mi arriva in get... allora ho pensato di mettere tutto in un altro array

    $array=$_GET['file'];

    il problema è che poi non posso fare $array['name'][$i] ne tanto meno $array['size']

    come faccio a gestire:
    - tmp_name
    - size
    - name

    ah ovviamente gestisco con un for($i=0; $i<$count; $i++)...
    Server utilizzato: MySQL


    (cit.)
    Un misto tra pazzia ed intelligenza

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Devi rivederti come si fa l'upload di file.
    1) Farlo con GET è impossibile, troppi dati da inviare, get ha un limite che dipende dal browser, ma comunque molto probabilmente insufficiente per inviare i dati di un file serializzato.

    2) I file si inviano usando un campo <input type="file" .../> non con un campo text, con un campo text invii solo una stringa, quindi ovviamente non ti arriva nessun dato riguardo tmp_name, size o name (non stai ricevendo un file)

    3) Proprio perché non puoi usare get, devi usare poi $_FILES per ricevere i file.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    216
    sisi riguardando ho cambiato strada...

    la text mi serve solamente per inserire un url nel db ma pensandoci, dopo, non mi serve metterlo dentro un array... quindi per quanto riguarda la text è risolta...

    mentre per quanto riguarda i file come avrai notato devo caricare più file con una sola selezione ma sto incontrando delle situazioni che non mi sembrano proprio esatte...
    ad esempio:
    $count=count($_FILES['upload']['name']); è possibile che è sempre =1 anche quando non seleziono nulla??? che se seleziono 5 file count sarà =6 quindi logicamente è anche corretto ma non capisco perchè è sempre =1
    Ultima modifica di rare; 04-10-2014 a 11:42
    Server utilizzato: MySQL


    (cit.)
    Un misto tra pazzia ed intelligenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    216
    ottimo
    cosi funziona anche se credo che io debba aggiungere dei controlli, vero???

    ho solo un problema... è possibile che file che hanno un peso complessivo < 3Mb non vengano caricati???
    ed eventualmente è possibile ovviare a questo problema??

    Codice PHP:
    //$array=$_GET['file'];
    $path="../attachments/";
    $count=count($_FILES['upload']['name']);
    echo 
    "<br />".$count."<br />".$_POST['url'];


    for(
    $i=0$i<$count$i++)
    {
    $tmp_name=$_FILES['upload']['tmp_name'][$i];
    $name=$_FILES['upload']['name'][$i];
    echo 
    "<br />".$i." - ".$name." - ".$tmp_name."<br />";
    move_uploaded_file($tmp_name"$path/$name");
    }


    if(
    $_POST['url']=="URL")
    {echo 
    "si";
     
    //unset($array[0]);
     //$array=array_values($array);

    Server utilizzato: MySQL


    (cit.)
    Un misto tra pazzia ed intelligenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    216
    count = 1 sempre anche quando non ho selezionato nulla
    questo significa che carica sempre il percorso sul db...
    come posso risolvere???

    Codice PHP:
    $path="../attachments/";


    $count=count($_FILES['upload']['name']);


    echo 
    "<br />".$count."<br />";


    if(
    $_FILES['upload']['error']==0){

            for(
    $i=0$i<$count$i++)
            {
                
    $tmp_name=$_FILES['upload']['tmp_name'][$i];
                
    $name=$_FILES['upload']['name'][$i];
                echo 
    "<br />".$i." - ".$name." - ".$tmp_name."<br />";
                
    move_uploaded_file($tmp_name"$path/$name");
                
                
    mysql_select_db($database_Araldica,  $Araldica);
                
    $query=mysql_query("INSERT INTO attachments (percorso) VALUES ('$path/$name')");
                
    $result=mysql_query($query);
                
    $id mysql_insert_id();
            }
    }


    if(
    $_POST['url'] != "URL")
    {echo 
    "url diverso";
     
    //unset($array[0]);
     //$array=array_values($array);

    Ultima modifica di rare; 04-10-2014 a 17:00
    Server utilizzato: MySQL


    (cit.)
    Un misto tra pazzia ed intelligenza

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    controlla che il nome del file non sia vuoto e poi agisci di conseguenza

    PS: se vuoi sapere perché conta sempre un elemento, fai il var_dump di $_FILES

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    216
    questo è il risultato di echo var_dump($_FILES);
    array (size=1)
    'upload' =>
    array (size=5)
    'name' =>
    array (size=1)
    0 => string '' (length=0)
    'type' =>
    array (size=1)
    0 => string '' (length=0)
    'tmp_name' =>
    array (size=1)
    0 => string '' (length=0)
    'error' =>
    array (size=1)
    0 => int 4
    'size' =>
    array (size=1)
    0 => int 0

    Quote Originariamente inviata da clasku Visualizza il messaggio
    controlla che il nome del file non sia vuoto e poi agisci di conseguenza

    che significa???
    sia se seleziono 1 o 0 elementi count=1 mentre se ne seleziono 5 count=5 (e l'id andrà da 0 a 4 in modo corretto)
    Server utilizzato: MySQL


    (cit.)
    Un misto tra pazzia ed intelligenza

  8. #8
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    $_FILES ha sempre almeno un dato, anche se tutti i valori sono vuoti

    Tu cicla l'array e fregatene che il conteggio sia uguale a 1: controlla che il nome del file ad ogni ciclo sia diverso da "" e fai le tue operazioni

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    216
    L'array si riempe bene il problema è che nello stesso for oltre all'upload dei files faccio anche l'insert nel db quindi succede che quando l'array è vuoto e count è comunque =1 entra nel ciclo e fai l'upload (non inserendo nulla) e poi fa l'inser inserendo un record vuoto. capisci che può risultare un bel casino questo...
    Server utilizzato: MySQL


    (cit.)
    Un misto tra pazzia ed intelligenza

  10. #10
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    forse non sono bravo a spiegarmi a parole...

    Codice PHP:
    for($i=0$i<$count$i++)
        {
            if (
    $_FILES['upload']['tmp_name'][$i] !== "") {
                
    $tmp_name=$_FILES['upload']['tmp_name'][$i];
                
    $name=$_FILES['upload']['name'][$i];
                echo 
    "<br />".$i." - ".$name." - ".$tmp_name."<br />";
                
    move_uploaded_file($tmp_name"$path/$name");
                
                
    mysql_select_db($database_Araldica,  $Araldica);
                
    $query=mysql_query("INSERT INTO attachments (percorso) VALUES ('$path/$name')");
                
    $result=mysql_query($query);
                
    $id mysql_insert_id();
            }
        }


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.