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>
Nevypíše to však nic. Zřejmě se tam musí kvůli poli udělat něco jinak, protože $_POST['jmeno_inputu'] normálně funguje.

Díky.
Someone
Profil
echo $_POST['jmeno_inputu'][1];
David1256
Profil
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
Dumpni si $_FILES ať vidíš jak to tam je.
David1256
Profil
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
if (isset($_POST['upload'])) {
    var_dump($_FILES);
}

mrkni an to jak to vypadá a pochopíš.
David1256
Profil
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
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
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
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>
Ale pokud budu generovat inputy přes JS, tak už to nebude fachčit.
<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>
Stačí si vytvořit první input a máme to samé jak v 1. případě akorát vygenerováno přes JS a už to nefunguje. Nevíš, co s tím?
martin1312
Profil
Someone chce povedať, že to pole vyzerá takto:
$_FILES['soubory']['tmp_name'][1]

predbehol si ma :)
Someone
Profil
<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>
Vypíše 0. Pokud bych změnil type za text, vypíše správně 1.
Keeehi
Profil
Protože správně to má být
count($_FILES['jmeno_inputu']['tmp_name'])
David1256
Profil
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 :).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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