Autor Zpráva
soucekgns
Profil
Upload více souborů najednou (tj. při kliknutí na vybrat soubor se může označit více souborů(ve formuláři multiple) a pak je všechny nahrát)
Všude jsou návody jak to udělat, ale mě buď nefungují, nebo jsou zastaralé anebo nekompletní.
Mohl by mi někdo poradit, jak to vytvořit z tohoto skriptu?
    if(isset($_POST['upload'])){
    $target = 'foto/' . $directory . '-' . $username . '/'; 
    $target = $target . basename( $_FILES['uploaded']['name']) ; 
    $ok=1; 

 
        if ($_FILES['uploaded']['size'] > 1048576) { 
          echo "<span style='color:red;'>File to large</span>"; 
          $ok=0; 
        } 
        if ($_FILES['uploaded']['type'] != "image/jpeg" AND $_FILES['uploaded']['type'] != "image/pjpeg") {
          echo "<span style='color:red;'>Nepodporovaný formát souboru</span>"; 
          $ok=0; 
        } 


      if ($ok==0) { 
        echo "<br>Soubor nebyl nahrán"; 
      } 
      else { 
        if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) { 
          echo "Soubor ". basename( $_FILES['uploadedfile']['name']). " byl úspěšně nahrán."; 
        } 
        else { 
          echo "Soubor nebyl nahrán"; 
        } 
      }
    }

Předem děkuji za rady
Taps
Profil
soucekgns:
Upload více souborů najednou (tj. při kliknutí na vybrat soubor se může označit více souborů(ve formuláři multiple) a pak je všechny nahrát)
zkus třeba http://www.uploadify.com/demos/
soucekgns
Profil
Díky za radu, ale já bych potřeboval akorát upravit tento script a stejně mi uploadify nefunguje.
Neví někdo jak na to?
snake.aas
Profil
prvně musíš mít input pro soubor definovaný jako
<input type="file" min="1" name="soubor[]" max="999" multiple></input>

jde hlavně o to jméno

no a k těm souborům pak přistupuješ jako
$_FILES["soubor"]["name"][0] jméno prvního souboru
$_FILES["soubor"]["type"][1] typ druhého souboru
atp...
hlavně si hlídej max_post_size a max_upload_size (doufám, že střílím ty názvy dobře)
a nejsem si jistý jak jsou na tom s podporou prohlížeče... testováno na FF 3.6.13
soucekgns
Profil
snake.aas:
min a max jsem nikdy neslyšel a určitě by to šlo i bez toho
...
formulář mám, a pokud vím tak je správně, takto:
            <form class="upload" action="" method="post" enctype="multipart/form-data"> 
                <input name="uploaded" type="file" multiple /><br> 
                <input type="submit" name="upload" value="Nahrát" />
            </form>

Ale jak ty říkáš,pokud tě teda chápu správně, tak bych měl každou podmínku ve formuláři rozmnožit třeba stokrát... jako:
        if ($_FILES['uploaded']['size'][0] > 1048576) { 
          echo "<span style='color:red;'>File to large</span>"; 
          $ok=0; 
        }
        if ($_FILES['uploaded']['size'][1] > 1048576) { 
          echo "<span style='color:red;'>File to large</span>"; 
          $ok=0; 
        }
        if ($_FILES['uploaded']['size'][2] > 1048576) { 
          echo "<span style='color:red;'>File to large</span>"; 
          $ok=0; 
        }
        //atd...

...Nevím, jak to mám udělat jednou podmínkou pro všechny.
Díky za rady.
PokusyWeb
Profil *
soucekgns:
Slyšel jsi někdy něco o cyklu? :)
soucekgns
Profil
PokusyWeb:
Jo slyšel... ale už taky zapomněl:-)
PokusyWeb
Profil *
soucekgns:
Tak pokud budu nahravat N souboru, tak si odeslu pres formular to cislo N a pak jedu treba for-cyklem, nebo while cyklus s inkrementaci. Pokud neodeslu to cislo, tak musis testovat, zda existuje...
snake.aas
Profil
takže ještě jednou... jméno toho input type="file" musí být pole... tedy správně to má být
<input name="uploaded[]" type="file" multiple />

min a max jsou myslím nové definice pro html 5 kterýma se řídí chrome a opera...
pěkný přehled je tady
snake.aas
Profil
ještě doplním, co jsem teď zjistil...
multiple funguje správně ve firefoxu a chrome... v IE8 není, ale aspoň ten jeden se odešle správně...
ale opera... ta opera...
místo aby vygenerovala něco jako
FILES:
array
  'aas' => 
    array
      'name' => 
        array
          0 => string 'logo.jpg' (length=8)
          1 => string 'PhotoServlet.jpg' (length=16)
      'type' => 
        array
          0 => string 'image/jpeg' (length=10)
          1 => string 'image/jpeg' (length=10)
      'tmp_name' => 
        array
          0 => string 'C:\Windows\Temp\php119C.tmp' (length=27)
          1 => string 'C:\Windows\Temp\php11AD.tmp' (length=27)
      'error' => 
        array
          0 => int 0
          1 => int 0
      'size' => 
        array
          0 => int 65917
          1 => int 4415

tak vznikne
POST:
array
  'aas' => string '------------ttmLqxmu59xdVr15svHBYa
Content-Disposition: form-data; name="aas"; filename="logo.jpg"
Content-Type: image/jpeg
<binárníbordel> (length=70640)


setkali jste se s tím někdo? případně jestli máte, tak to někdo vyzkoušejte, bo já už jsem z toho na prášky... shodou okolností jsem něco takového chtěl taky používat, ale tohle je teda kino... asi fakt nezbývá nic jiného než nějaký javascript nebo flash....
soucekgns
Profil
proč, když napíšu
while ($_FILES['uploaded']['name']!="")

mi to začne házet ten cyklus tisíckrát -> tj. 1000x Soubor nebyl nahrán???
TomasJ
Profil
soucekgns:
for($i=0;$_FILES['uploaded']['name'][$i];$i++){/* cyklus */}
soucekgns
Profil
Nevím proč, ale vždy mi to napíše pro každý nahraný soubor toto:

Warning: basename() expects parameter 1 to be string, array given in /3w/wz.cz/s/stola2015/trida.php on line 545 (řádek 11)
Soubor je příliš veliký
Nepodporovaný formát souboru
Soubor nebyl nahrán

echo '
            <form class="upload" action="" method="post" enctype="multipart/form-data"> 
                <input name="uploaded[]" type="file" multiple /><br> 
                <input type="submit" name="upload" value="Nahrát" />
            </form>';

if ($directory!='' AND $username!='') {
    if(isset($_POST['upload'])){
    $target = 'foto/' . $directory . '-' . $username . '/';
    for($i=0;$_FILES['uploaded']['name'][$i];$i++){ 
    $target = $target . basename( $_FILES['uploaded']['name']) ; 
    $ok=1; 

 
        if ($_FILES['uploaded']['size'] > 1048576) { 
          echo "<span style='color:red;'>Soubor je příliš veliký<br></span>"; 
          $ok=0; 
        } 
        if ($_FILES['uploaded']['type'] != "image/jpeg" AND $_FILES['uploaded']['type'] != "image/pjpeg") {
          echo "<span style='color:red;'>Nepodporovaný formát souboru<br></span>"; 
          $ok=0; 
        } 


      if ($ok==0) { 
        echo "Soubor nebyl nahrán"; 
      } 
      else { 
        if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) { 
          echo "Soubor ". basename( $_FILES['uploadedfile']['name']). " byl úspěšně nahrán"; 
        } 
        else { 
          echo "Soubor nebyl nahrán"; 
        } 
      }
    }
    }
}
else {echo 'Musíte vyplnit název alba!';} 
snake.aas
Profil
všechny výskyty $_FILES['uploaded'][blabla] musíš změnit na $_FILES['uploaded'][blabla][$i]
soucekgns
Profil
Díky moc, funguje.
snake.aas
Profil
funguje, ale pouze v chrome, firefoxu a částečně v ie...
soucekgns
Profil
A proč? nevíte, jak by mohlo nahrávání více souborů fungovat třeba i v IE a opeře?
panther
Profil
snake.aas:
funguje, ale pouze v
čiliže nefunguje, dalo by se říct Ve Firefou to taky asi moc fungovat nebude, myslím si.

soucekgns:
použij více file-inputů, v name předávej pole, tedy name="nazev[]". Cokoliv, co nefunguje všude, je nesmysl používat.

A proč?
protože HTML5 nemá dostatečnou podporu. A dlouho mít nebude, jestli vůbec někdy.
soucekgns
Profil
panther:
co nefunguje všude, je nesmysl používat
- Samozřejmě, proto jdu asi do těch více inputů...
soucekgns
Profil
panther:
v name předávej pole, tedy name="nazev[]"
jen se ptám, proč tedy vkládat závorky, když mám $_FILES['uploaded1']['name'], $_FILES['uploaded2']['name'] atd...?
snake.aas
Profil
v ie8 nefunguje multiple jako takový... chová se to tedy jako klasický file input...
a opera... je jedno jestli to tak má být nebo ne, jestli to není všude stejně je to na nic...

soucekgns:
jen se ptám, proč tedy vkládat závorky, když mám $_FILES['uploaded1']['name'], $_FILES['uploaded2']['name'] atd...?

protože je to jednodušší na následný kód... ty inputy si můžeš generovat třeba javascriptem podle potřeby a obslužný kód bude pořád stejný a jednoduchý
snake.aas
Profil
případně se zkus podívat na uploadify mohlo by to být více user-friendly než třeba 30 inputů
soucekgns
Profil
Nevím proč, ale to mi nefunguje...
nahraji na server do složky /uploadify/:
cancel.png
jquery.uploadify.v2.1.4.min.js
jquery-1.4.2.min.js
swfobject.js
uploadify.css
uploadify.php
uploadify.swf

a pak vložím:
<link href="/uploadify/uploadify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="/uploadify/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="/uploadify/swfobject.js"></script>
<script type="text/javascript" src="/uploadify/jquery.uploadify.v2.1.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
  $('#file_upload').uploadify({
    'uploader'  : '/uploadify/uploadify.swf',
    'script'    : '/uploadify/uploadify.php',
    'cancelImg' : '/uploadify/cancel.png',
    'folder'    : '/uploads',
    'auto'      : true
  });
});
</script>

<input id="file_upload" name="file_upload" type="file" />

Dokonce vytvořím i složku uploads a snad jí dám i příslušný práva...
a nejde to...:-(
Kdy by šlo tohle, tak by to bylo super...
soucekgns
Profil
Už jsem na to přišel, mám stránky na webzdarma a tam je kořenový adresář $_SERVER['DOCUMENT_ROOT'] . '/wz.cz/s/stola2015', kdežto normálně tam bylo jen $_SERVER['DOCUMENT_ROOT']
bissquitt
Profil *
Našel jsem ji také tento kód, ale nejde mi tam vkládání více souborů najednou. Nevíte někdo v čem může být chyba?? Když jsou v kódu neměnil ani čárku??

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0