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

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.

0
 <input type="file" name="plik[]" class="upload"/>
 <input type="file" name="plik[]" class="upload"/>
foreach ($_FILES['plik'] as $plik) {
 // ...
}
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?
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 />';
}
0

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

0

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

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

0

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

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

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.

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