Autor | Zpráva | ||
---|---|---|---|
soucekgns Profil |
#1 · Zasláno: 17. 2. 2011, 16:02:11 · Upravil/a: 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)
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 |
#2 · Zasláno: 17. 2. 2011, 18:45:26
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/ |
||
Časová prodleva: 8 dní
|
|||
soucekgns Profil |
#3 · Zasláno: 25. 2. 2011, 18:14:48
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 |
#4 · Zasláno: 25. 2. 2011, 22:02:59
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 |
#5 · Zasláno: 27. 2. 2011, 10:51:23
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 * |
#6 · Zasláno: 27. 2. 2011, 10:53:22
soucekgns:
Slyšel jsi někdy něco o cyklu? :) |
||
soucekgns Profil |
#7 · Zasláno: 27. 2. 2011, 10:57:47
PokusyWeb:
Jo slyšel... ale už taky zapomněl:-) |
||
PokusyWeb Profil * |
#8 · Zasláno: 27. 2. 2011, 11:10:08
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 |
#9 · Zasláno: 27. 2. 2011, 11:54:02
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 |
#10 · Zasláno: 27. 2. 2011, 12:57:47
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 |
#11 · Zasláno: 27. 2. 2011, 17:09:16
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 |
#12 · Zasláno: 27. 2. 2011, 18:53:06 · Upravil/a: TomasJ
soucekgns:
for($i=0;$_FILES['uploaded']['name'][$i];$i++){/* cyklus */} |
||
soucekgns Profil |
#13 · Zasláno: 27. 2. 2011, 19:38:37 · Upravil/a: soucekgns
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 |
#14 · Zasláno: 27. 2. 2011, 19:44:49 · Upravil/a: snake.aas
všechny výskyty $_FILES['uploaded'][blabla] musíš změnit na $_FILES['uploaded'][blabla][$i]
|
||
soucekgns Profil |
#15 · Zasláno: 27. 2. 2011, 20:19:36 · Upravil/a: soucekgns
Díky moc, funguje.
|
||
snake.aas Profil |
#16 · Zasláno: 27. 2. 2011, 20:51:54
funguje, ale pouze v chrome, firefoxu a částečně v ie...
|
||
soucekgns Profil |
#17 · Zasláno: 27. 2. 2011, 21:21:46
A proč? nevíte, jak by mohlo nahrávání více souborů fungovat třeba i v IE a opeře?
|
||
panther Profil |
#18 · Zasláno: 27. 2. 2011, 21:25:49 · Upravil/a: panther
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 |
#19 · Zasláno: 27. 2. 2011, 21:32:35
panther:
„co nefunguje všude, je nesmysl používat“ - Samozřejmě, proto jdu asi do těch více inputů... |
||
soucekgns Profil |
#20 · Zasláno: 27. 2. 2011, 21:36:08
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 |
#21 · Zasláno: 27. 2. 2011, 21:52:01
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 |
#22 · Zasláno: 27. 2. 2011, 21:53:43
případně se zkus podívat na uploadify mohlo by to být více user-friendly než třeba 30 inputů
|
||
soucekgns Profil |
#23 · Zasláno: 28. 2. 2011, 14:25:51 · Upravil/a: soucekgns
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 |
#24 · Zasláno: 28. 2. 2011, 20:10:16
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']
|
||
Časová prodleva: 12 dní
|
|||
bissquitt Profil * |
#25 · Zasláno: 12. 3. 2011, 21:20:21
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??
|
||
Časová prodleva: 14 let
|
0