Autor | Zpráva | ||
---|---|---|---|
David1256 Profil |
Dobrý den,
potřeboval bych vypsat hodnotu inputu, jehož jméno obsahuje pole. Názorně mám tento script. <form method="post"> <input type="text" name="jmeno_inputu[1]"> <input type="submit" value="Nahrát soubor na server"> <?php echo $_POST['jmeno_inputu[1]']; ?> </form> $_POST['jmeno_inputu'] normálně funguje.
Díky. |
||
Someone Profil |
#2 · Zasláno: 11. 6. 2012, 20:35:32
echo $_POST['jmeno_inputu'][1]; |
||
David1256 Profil |
#3 · Zasláno: 11. 6. 2012, 20:49:19
Super. Díky moc. A mělo by to fungovat stejně i v konstrukci
echo $_FILES['soubor'][2]["name"]; ? Protože to mi už nefunguje.
|
||
Someone Profil |
#4 · Zasláno: 11. 6. 2012, 20:51:03
Dumpni si $_FILES ať vidíš jak to tam je.
|
||
David1256 Profil |
#5 · Zasláno: 12. 6. 2012, 15:12:03
Nevím, co myslíš tím dumpnout. Co to znamená? Mám tento script, ale nefunguje. Kde je tedy chyba?
<?php if(isset($_POST['upload'])){ $nahrat = move_uploaded_file($_FILES["soubor"][1]["tmp_name"], "upload/".$_FILES["soubor"][1]["name"]); if($nahrat){echo 'Soubor byl úspěšně uložen.';}else{echo 'Soubor se nepodařilo uložit.';} } ?> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="soubor[1]"> <input type="submit" name="upload" value="Nahrát soubor na server"> </form> |
||
Someone Profil |
#6 · Zasláno: 12. 6. 2012, 15:23:33
if (isset($_POST['upload'])) { var_dump($_FILES); } mrkni an to jak to vypadá a pochopíš. |
||
David1256 Profil |
#7 · Zasláno: 12. 6. 2012, 15:30:21
Asi jsem to nepochopil :-(.
array(1) { ["soubor"]=> array(5) { ["name"]=> array(1) { [1]=> string(17) "ScreenShot003.bmp" } ["type"]=> array(1) { [1]=> string(9) "image/bmp" } ["tmp_name"]=> array(1) { [1]=> string(40) "/var/www/domena/test/tmp/phptuQiaI" } ["error"]=> array(1) { [1]=> int(0) } ["size"]=> array(1) { [1]=> int(1587366) } } } |
||
Someone Profil |
#8 · Zasláno: 12. 6. 2012, 16:14:00
Předpokládám, že chceš nahrávát víc souborů najednou:
if (isset($_POST['nahrat'])) { foreach ($_FILES['soubory']['error'] as $klic => $error) { if ($error == 0) { $nahrat = move_uploaded_file($_FILES["soubory"]["tmp_name"][$klic], "upload/".$_FILES["soubor"]["name"][$klic]); } } } |
||
David1256 Profil |
#9 · Zasláno: 12. 6. 2012, 17:09:06
Podobný script už mám vymyšlený, ale v tom netkví problém. Zjistil jsem nejspíš příčinu. Jelikož inputy jsou generované JavaScriptem, tak když se spustí script PHP je nevidí, protože neumí číst JS. Je toto, co říkám, možné? Pokud ano, tak jak mám mít proměnný počet inputů v závislosti na uživateli aniž bych použil JS.
|
||
Someone Profil |
#10 · Zasláno: 12. 6. 2012, 17:12:37
David1256:
Tím to není, ale $_FILES['soubory'][1]['tmp_name'] prostě neexisuje, když si $_FILES dumpneš při výpisu více souborů tak to zjistíš. vznikne pole $_FILES, které obsahuje pole soubory, které obsahuje pole name,tmp_name,error atd. a ty jednotlivé pole až obsahují údaje k jednotlivým souborům.. |
||
David1256 Profil |
To jsem zapomněl říct, že to mi už tak nějak docvaklo a toto už fungovalo.
<?php if(isset($_POST['upload'])){ $nahrat = move_uploaded_file($_FILES["soubor"]["tmp_name"][1], "upload/".$_FILES["soubor"]["name"][1]); if($nahrat){echo 'Soubor byl úspěšně uložen.';}else{echo 'Soubor se nepodařilo uložit.';} } ?> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="soubor[1]"> <input type="submit" name="upload" value="Nahrát soubor na server"> </form> <script type="text/javascript"> var num_of_lines = 0; function plus(element){ num_of_lines ++; var x = document.getElementById( element ); var input = document.createElement('input'); input.setAttribute('name', 'soubor[' + num_of_lines + ']'); input.setAttribute('type', 'file'); var text = document.createTextNode('Obrázek ' + num_of_lines + ': '); var p = document.createElement('span'); p.setAttribute('class', 'text' ); var br = document.createElement('br'); p.appendChild(text); p.appendChild(input); p.appendChild(br); x.appendChild(p); } function minus(element){ if( num_of_lines < 1 ) return; var d = document.getElementById( element ); var olddiv = document.getElementById( 'span_' + num_of_lines ); num_of_lines--; d.removeChild(olddiv); } </script> <?php if(isset($_POST['upload'])){ $nahrat = move_uploaded_file($_FILES["soubor"]["tmp_name"][1], "upload/".$_FILES["soubor"]["name"][1]); if($nahrat){echo 'Soubor byl úspěšně uložen.';}else{echo 'Soubor se nepodařilo uložit.';} } ?> <form method="POST"> <br> <a href="#" style="color:green" onclick="plus('inputy'); return false;" >Přidej možnost </a><a style="color:red" href="#" onclick="minus('inputy'); return false;" > Odeber možnost</a><br /> <table id="inputy"> </table> <br> <input type="submit" name="upload" value="Nahrát soubor na server"> </form> |
||
martin1312 Profil |
Someone chce povedať, že to pole vyzerá takto:
$_FILES['soubory']['tmp_name'][1] predbehol si ma :) |
||
Someone Profil |
#13 · Zasláno: 12. 6. 2012, 17:22:38
<form method="POST" enctype="multipart/form-data"> |
||
David1256 Profil |
Díky moc, to mi nějak uniklo. Snad už jen poslední otázka. Jaktože count nedokáže spočítat inputy typu file?
<?php $konec = count($_POST['jmeno_inputu']); echo $konec; ?> <form method="POST" enctype="multipart/form-data"> <input type="file" name="jmeno_inputu[1]"> <input type="submit" name="upload" value="Nahrát soubor na server"> </form> |
||
Keeehi Profil |
Protože správně to má být
count($_FILES['jmeno_inputu']['tmp_name']) |
||
David1256 Profil |
#16 · Zasláno: 12. 6. 2012, 19:10:00
Ajo. Vždyť je to analogie stejné chyby, kterou jsem udělal v #10. Asi jsem už nějakej přetaženej či co :-). Každopádně díky moc. Aspoň se mi dneska bude hezky usínat :).
|
||
Časová prodleva: 11 let
|
0