Odbieranie kilku plików z pola input type="file"

2014-03-13 14:43
0

Witam!
Mam taki prosty, przykładowy kod, który wykorzystuje javascript, HTML oraz PHP. I teraz nie wiem jak zrobić, żeby po dodaniu dynamicznie nowych miejsc na pliki w javascript, odpowiednio je potem zapisać w PHP. Oto kod:


<head>
<style type="text/css">
<!--
input.upload { display: block; }
-->
</style>
<script type="text/javascript">
<!--
function add(kontener){
    var znacznik = document.createElement('input');
    znacznik.setAttribute('type', 'file');
    znacznik.setAttribute('name', 'plik');
    znacznik.className = 'upload';
    var kontener = document.getElementById(kontener);
    kontener.appendChild(znacznik);
}
//-->
</script>
</head>
<?php
if (isset($_GET['a']))
{
    $a[] = $_FILES['plik']['name'];
    echo $a[0] . '<br>' . $a[1];
}
else
{
?>
<form enctype="multipart/form-data" action="upload.php?a=1" method="POST"> 
    <div id="pliki">
        <input type="file" name="plik" class="upload"/>
    </div>
    <div>
        <input type="button" value="Załącz kolejny plik" onclick="add('pliki');" />
        <input type="submit" value="Wyślij" />
    </div>
</form>
<?php
}
?>

problem mam w tym miejscu:


$a[] = $_FILES['plik']['name'];

Nie wiem jak zrobić, żeby po dodaniu np. 10 pól typu file do tablicy $a[] przypisała się nazwa każdego z nich osobno.

Pozostało 580 znaków

2014-03-13 15:56
0
 <input type="file" name="plik[]" class="upload"/>
 <input type="file" name="plik[]" class="upload"/>
foreach ($_FILES['plik'] as $plik) {
 // ...
}

Pozostało 580 znaków

2014-03-13 16:12
0

działa fajnie, tylko do tablicy

 $plik 

przypisuje się całość $_FILE

, czyli:
      [name]
      [type]
      [tmp_name]
      [error]
      [size]
a ja potrzebowałbym tylko jednej z tych wartości. Wie ktoś jak to zrobić?

Doszedłem do tego, że przy każdym przebiegu foreach wyświetla najpierw wszystkie 
```php
 $_FILE['name']

, potem type, tmp_name, error i size. Gdybym chciał tylko name, to byłoby okej, bo na koniec foreach


 wystarczy dodać break i będzie. Ale gdybym chciał odwołać się np. do tmp_name to co wtedy?
edytowany 4x, ostatnio: NoWay, 2014-03-13 16:19

Pozostało 580 znaków

2014-03-13 19:53
0

boże, bierzesz się za upload plików a nie ogarniasz TABLIC? o.O
przecież to najdalej druga lekcja każdego kursu php..

foreach ($_FILES['plik'] as $plik) {
 echo $plik['name'].'<br />';
}

Pozostało 580 znaków

2014-03-13 19:55
0

próbowałem w taki sposób. Ale dostaję coś takiego:
Notice: Undefined index: name

Pozostało 580 znaków

2014-03-13 20:07
0

U, to działa inaczej niż mi się wydawało.
Zrób sobie var_dump($_FILES); i chyba wszystko będzie jaśniejsze ;]


Pozostało 580 znaków

2014-03-13 20:22
0

hmm. Więc dostałem takie coś:

array(1) 
{ 
    ["plik"]=> array(5) 
    { 
        ["name"]=> array(1) 
        { 
            [0]=> string(45) "2000px-PlayStation_Vita_illustration.svg_.png" 
        } 
        ["type"]=> array(1) 
        {
            [0]=> string(9) "image/png" 
        } 
        ["tmp_name"]=> array(1) 
        {
            [0]=> string(24) "F:\XAMPP\tmp\php769F.tmp" 
        }
        ["error"]=> array(1) 
        { 
            [0]=> int(0) 
        } 
        ["size"]=> array(1) 
        { 
            [0]=> int(277635) 
        } 
    } 
}

Uporządkowałem to, tylko nie bardzo wiem jak z tego skorzystać. Rozumiem, że jest to struktura tablicy, ale jakakolwiek próba mojego odwołania się do czegoś z niej kończyła się niepowodzeniem.

dodanie znacznika <code class="php"> - Furious Programming

edytowany 1x, ostatnio: furious programming, 2014-03-13 20:29
Wstawiaj kod w odpowiednie dla danego języka znaczniki kolorujące składnię; - furious programming 2014-03-13 20:29

Pozostało 580 znaków

2014-03-13 20:24

$_FILES['plik']['name'][0]

foreach stosuj na $_FILES['plik']['name']


Pozostało 580 znaków

2014-03-13 20:32
0

Oto całkowity kod, który teraz już mi działa:


<head>
<style type="text/css">
<!--
input.upload { display: block; }
-->
</style>
<script type="text/javascript">
<!--
function add(kontener){
    var znacznik = document.createElement('input');
    znacznik.setAttribute('type', 'file');
    znacznik.setAttribute('name', 'plik[]');
    znacznik.className = 'upload';
    var kontener = document.getElementById(kontener);
    kontener.appendChild(znacznik);
}
//-->
</script>
</head>
<?php
if (isset($_GET['a']))
{
        for ($licznik=0; $licznik < count($_FILES['plik']['name']); $licznik++)
        {
            echo '<br><br><br>';
            echo $_FILES['plik']['name'][$licznik];
        }
}
else
{
?>
<form enctype="multipart/form-data" action="upload.php?a=1" method="POST"> 
    <div id="pliki">
        <input type="file" name="plik[]" class="upload"/>
    </div>
    <div>
        <input type="button" value="Załącz kolejny plik" onclick="add('pliki');" />
        <input type="submit" value="Wyślij" />
    </div>
</form>
<?php
}
?>

Zrobiłem to bez pętli foreach, gdyż podczas używania jej nazwy były wyświetlane 3 razy, a bez niej działa jak powinno. Dziękuję za pomoc.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0