Autor Zpráva
kachnak
Profil
Zdravím, našiel som na nete funkciu ktorá by mala vedieť nahrať viac fotiek za sebou na server.
Neviem prečo mi ale nefunguje príkaz move_uploaded_file na konci kódu.
Treba to nahrať nejakou inou funkciou?
Ďakujem

<div>Upload Files: <input type="file" name="filesToUpload" id="filesToUpload" multiple="" onChange="makeFileList();" /></div>
<div>Files You Selected:</div>
<div>    
    <ul id="fileList"><li>No Files Selected</li></ul>
    <script type="text/javascript">
        function makeFileList() {
            var input = document.getElementById("filesToUpload");
            var ul = document.getElementById("fileList");
            while (ul.hasChildNodes()) {
                ul.removeChild(ul.firstChild);
            }
            for (var i = 0; i < input.files.length; i++) {
                var li = document.createElement("li");
                li.innerHTML = input.files[i].name;
                ul.appendChild(li);
            }
            if(!ul.hasChildNodes()) {
                var li = document.createElement("li");
                li.innerHTML = 'No Files Selected';
                ul.appendChild(li);
            }
        }
    </script>
</div>
<?
if(count($_FILES['uploads']['filesToUpload'])) 
{
  foreach ($_FILES['uploads']['filesToUpload'] as $file) 
  {      
    //do your upload stuff here
    $name="1.jpg";                         
    move_uploaded_file($file,$name);    
    echo $file;    
  }
}
?>
suvel
Profil
Jak nefunguje? Leda by na serveru běželo php starší než 4.0.3
kachnak
Profil
ten riadok
if(count($_FILES['uploads']['filesToUpload'])) 
má vždy hodnotu 0 a neviem prečo :-/
možno preto sa nedostane k tomu uploadu.
Alphard
Profil
Pěkná ukázka multiple v html5.

<?php
$inputName = 'filesToUpload'; # name inputu v html formuláři
$filename = "files"; # název adresáře, kam se ukládají fotky, měl by existovat a mít nastavená přistupová práva
 
if (count($_FILES[$inputName]['tmp_name']) > 0)
{
  foreach ($_FILES[$inputName]['tmp_name'] as $k => $file) 
  {
    # demonstračně, ukládat soubory pod původním názvem není bezpečné                 
    move_uploaded_file($file,"$filename/".$_FILES[$inputName]['name'][$k]);  
  }
  
  header("location:index.php"); # jméno souboru si upravte
} 
?>

<form action="index.php" method="post" enctype="multipart/form-data">
<div>Upload Files: <input type="file" name="filesToUpload[]" id="filesToUpload" multiple="" onChange="makeFileList();" /></div>
<div>Files You Selected:</div>
<div>    
    <ul id="fileList"><li>No Files Selected</li></ul>
    <script type="text/javascript">
        function makeFileList() {
            var input = document.getElementById("filesToUpload");
            var ul = document.getElementById("fileList");
            while (ul.hasChildNodes()) {
                ul.removeChild(ul.firstChild);
            }
            for (var i = 0; i < input.files.length; i++) {
                var li = document.createElement("li");
                li.innerHTML = input.files[i].name;
                ul.appendChild(li);
            }
            if(!ul.hasChildNodes()) {
                var li = document.createElement("li");
                li.innerHTML = 'No Files Selected';
                ul.appendChild(li);
            }
        }
    </script>
</div>
<input type="submit">
</form>
kachnak
Profil
vďaka za prerábku ale hádže to nejakú chybu asi sa to tam niekde zacyklilo.


Moderátor Alphard: Kvůli odkazům vedoucím sem jsem opravil původní kód. Příspěvky [#5] a [#6] můžete ignorovat.
Alphard
Profil
Jo, omlouvám se. Já to pak ještě upravoval zpaměti. Ale taky vás to mohlo napadnout :-)

if (count($_FILES['filesToUpload']['tmp_name']) > 0)
{
  foreach ($_FILES['filesToUpload']['tmp_name'] as $k => $file) 
  {                 
    move_uploaded_file($file,"files2/".$_FILES[$inputName]['name'][$k]);    
  }
  
  header("location:index.php");
} 

Ono i když jsem zavedl ty nové proměnné, tak by se měly použít

<?php
$inputName = 'filesToUpload';
$filename = "files";
 
if (count($_FILES[$inputName]['tmp_name']) > 0)
{
  foreach ($_FILES[$inputName]['tmp_name'] as $k => $file) 
  {                 
    move_uploaded_file($file,"$filename/".$_FILES[$inputName]['name'][$k]);    
  }
  
  header("location:index.php");
} 
?>
Já si to jednou zkusil, ale pak jsem to ještě upravoval zpaměti.
kachnak
Profil
Paráda fičí mi to :) konečne som zohnal niečo neflashové.
Len na niektorých prehliadačoch to nefunguje ten <input type=file ... , že sa dá vybrať len jeden súbor. napr v IE6, IE8.
To sa dá obísť len cez flash?
abc
Profil
kachnak:
Je to HTML5 fičura. IE6, IE8 HTML5 neumí/jen okrajově.
Nahrát víc souborů najednou lze i pomocí JS, např. Odkaz
Nebo třeba více inputama:
<input type="file" name="prilohy[]" size="50"/>
<input type="file" name="prilohy[]" size="50"/>
<input type="file" name="prilohy[]" size="50"/>
kuba95
Profil
Zdravím,
zkoušel jsem váš script, ale když nahraji soubory, tak se mi na ftp nezobrazí a já nevím kde jsou...
Mohli byste mi poradit, kde je mám hledat?
Davex
Profil
V podadresáři files. Pokud tam takový adresář není, tak se musí nejdřív vytvořit, případně mu nastavit práva 0777. Jinak by bylo dobré skript zabezpečit, aby nedovolil nahrání jakéhokoliv souboru (např. PHP skriptu).
abc
Profil
kuba95:
Jsi si jist, zda se nahrajou?
Jak vypadá řádek, na kterém voláš funkci move_uploaded_file();?
Podívej se do složky temp/tmp/files, jestli se tam něco nahraje
kuba95
Profil
Ok, jsou tam v adresáři files. Díky moc

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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