Autor Zpráva
Tomasds
Profil
Používám víceméně stejný kód jaký se dá najít v helpu php:

<form action="" method="post" enctype="multipart/form-data">
<p>Pictures:
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="submit" value="Send" />
</p>
</form>

<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "data/$name");
    }
}
?>


Mám to ale složitější, protože ten počet inputů je proměnlivý a zároveň má každý z nich nějakou vlastnost, kterou potřebuju pro vložený soubor přenést a uložit s jeho názvem do databáze. Nejlepší bude asi příklad:

    echo "<tr><td>";
    echo "<td><input type=\"file\" id=\"".$zaznam3["ID"]."\"  name=\"pictures[]\" accept=\"image/*\">";
    echo "</td></tr>";


Aź soubory uploadnu, potřebuju každý název uložit do databáze, ale zároveň s ním uložit ID. Poradíte jak?

Vím že to vypadá nelogicky, ale opravdu to má smysl.
Mastodont
Profil
Když si do formuláře přidáš další inputy pro ta ID, tak jejich obsah se nepřenese?
Tomasds
Profil
Přenese, ale nevím jak to svázat. Potřebuju znát vazbu těch file na to ID. A když to procházím tím foreach, tak nevím jak se k tomu ID dostat. Dělám na webu od včerejšího rána, tak už mně to moc nepálí :)
Mastodont
Profil
Tak namísto foreach používej for.
Tomasds
Profil
for když neznám počet prvků? Ó, ty nečistý!

edit: vastně to možná taková ... nečistota .. není. Zkusím to promyslet, díky.
Nechám odemčeno, možná to někdo vymyslí i s tím foreachem, který mně přece jen připadá že by to tak Mirek Dušín udělal.
Mastodont
Profil
Aha, ty si neumíš zjistit počet prvků :-)
Tomasds
Profil
Tak ten for to vyřešil, dík.
SkIpPeR
Profil
Mužeš mi to prosimtě sem poslat, jak si to vykódil?
Keeehi
Profil
SkIpPeR:
1) počet prvků count();
2) id se bude přenášet pěkně blbě, takže by bylo lepší ho šoupnout jako index do name. Předpokládám, že SkIpPeRovi o id vůbec nejde. Nebo se pletu?

S čím máš vlastně problém?
SkIpPeR
Profil
Keeehi:
S čím máš vlastně problém?
Asi jen jak udělat proměnlivý počet inputů pro file (fotogalerie) ... nejspíš JavaScriptem, ale neřikám že sem to hodně studoval, teď mám hodně práce s fórem
A potom jak v php ... tolik sem ještě nepochopil to for($podmínka=>$podmínka2)
Keeehi
Profil
Dynamické přidávání elementů formuláře.
Je to cyklus. Navíc jsi chtěl napsat toto: foreach($pole as $honodta) - Projde to všechny prvky $pole a jejich obsah vloží do proměnné $hodnota.
SkIpPeR
Profil
Keeehi:
Aha, ok, díky ... v JS se tak dlouho nehrabu, pomohlo
SkIpPeR
Profil
<form action="index.php?page=foto&pict=<?php echo $slozka; ?>&succes=1" method="post" enctype="multipart/form-data" id="fotos">
      <input type="file" name="fupload[]"><br>
      <a href="#" onclick="plus('fotos'); return false;" >Přidat další Screenshot</a><br>
      <input type="submit" value="Nahrát">
    </form>
<?php
$galery = $_GET['pict'];
$slozka = "foto";
if (isset($_FILES['fupload']))
  {
  foreach($_FILES['fupload'] as $hodnota){
    $cil = $slozka . "/" . $galery . "/" .$_FILES['fupload'][$hodnota]['name'];
    $nazev_souboru = $_FILES['fupload'][$hodnota]['tmp_name'];
    $copy = move_uploaded_file($nazev_souboru, $cil)
      or die ("Přenesený soubor nelze zkopírovat");
    chmod ($cil, 0777);
if($succes == "1" and $copy == true)
{
	echo '<div id="upozorneni">';
  echo 'Fotka '.$_FILES['fupload'][$hodnota]['name'].' byla nahrána.';
  echo '</div>';
  $succes = "0";
}
else{
      echo '<div id="upozorneni">Soubor nemohl být nahrán.</div>';
    }
  }
  }

Nevíte prosím vás kde mám chybu, píše to Warning: Illegal offset type in .../web/url/foto.php on line 118 Warning: Illegal offset type in .../web/url/foto.php on line 119
panther
Profil
SkIpPeR:
Nevíte prosím vás kde mám chybu
víme. Na 119. řádku. Chybovou hlášku si přelož, případně dohledej, co znamená. Na tom řádku máš pár znaků, přijdeš na to.
SkIpPeR
Profil
panther:
Je to řádek 12 a 13 v mojem kodě, sorry že sem to sem nedal a strejda google moc nepomohl
SkIpPeR
Profil
Fakt to nemužu najít, pár zmínek o tom, ale nikde konkretní řešení, který by mě pomohlo
Keeehi
Profil
Tvůj kód:
foreach($_FILES['fupload'] as $hodnota){
  $cil = $slozka . "/" . $galery . "/" .$_FILES['fupload'][$hodnota]['name'];
}

ti vlastně udělá něco takového:
$cil = $slozka . "/" . $galery . "/" .$_FILES['fupload'][$_FILES['fupload'][0]]['name'];
$cil = $slozka . "/" . $galery . "/" .$_FILES['fupload'][$_FILES['fupload'][1]]['name'];
$cil = $slozka . "/" . $galery . "/" .$_FILES['fupload'][$_FILES['fupload'][2]]['name'];

Připadá ti to správně? Mě moc ne.

Toto už vypadá lépe:
foreach($_FILES['fupload'] as $hodnota){
  $cil = $slozka . "/" . $galery . "/" .$hodnota['name'];
}

Když jsem si chybovou hlášku "Illegal offset type" nechal vyhledat googlem, jako třetí odkaz na mě vyskočilo toto: http://www.jaknaweb.com/ukazuj.php?f=1&i=157517&t=157478&v=f. Hned v druhý příspěvek by tě měl navést k řešení.
SkIpPeR
Profil
Keeehi:
Díky ... k tomu odkazu, z toho sem to nějak nepochopil, jdu to vyzkoušet, ještě jednou díky.

EDIT: Ačkoliv teď mě to u výše zmíněného kódu háže do or die -> Přenesený soubor nelze zkopírovat, ať už nahrávám cokoliv (velikost, formát)
Keeehi
Profil
SkIpPeR:
Ten odkaz tě měl přivést k tomu, že se pokoušíš přistupovat k neznámému prvku v poli. Nejdříve by jsi si měl asi zjistit, ak vlastně funguje foreach.

Samozřejmě si musíš upravit cestu i na 12. řádku. Jak? Úplně stejně jako jsem upravil předchozí řádek já, ale pokud jsi si zjistil, jak foreach funguje, tak už to jistě víš sám.
SkIpPeR
Profil
Keeehi:
myslíš takhle?
if (isset($_FILES['fupload']))
  {
  foreach($_FILES['fupload'] as $hodnota){
    $cil = $slozka . "/" . $galery . "/" .$hodnota['name'];
    $nazev_souboru = $hodnota['tmp_name'];
    $copy = move_uploaded_file($nazev_souboru, $cil)
      or die ("Přenesený soubor nelze zkopírovat");
    chmod ($cil, 0777);
if($succes == "1" and $copy == true)
{
	echo '<div id="upozorneni">';
  echo 'Fotka '.$hodnota['name'].' byla nahrána.';
  echo '</div>';
  $succes = "0";
}
else{
      echo '<div id="upozorneni">Soubor nemohl být nahrán.</div>';
    }
  }
  }

Tak to mám, ale nefunguje to
Keeehi
Profil
Zkontroluj, zda je v cestách to, co by tam být mělo.
SkIpPeR
Profil
Keeehi:
Jak je vidět, tak se nepřemístí ['name'] a ['tmp_name'] ... neb print_r($hodnota); vypíše: Array ( [0] => 'nazev souboru' ), ale print_r($hodnota['name']); a print_r($hodnota['tmp_name']); je prázdné
Keeehi
Profil
SkIpPeR:
Co vypíše print_r($_FILES['fupload']); ?
SkIpPeR
Profil
Array ( [name] => Array ( [0] => 8151_mapex_mal_mal_.jpg ) [type] => Array ( [0] => image/jpeg ) [tmp_name] => Array ( [0] => D:\xampp\tmp\php10E.tmp ) [error] => Array ( [0] => 0 ) [size] => Array ( [0] => 43035 ) )
Keeehi
Profil
Tohle by mělo nějak fungovat. Jsou potřeba ošetřit různé případy, ale to už snad zvládnete.
<?php
if (isset($_FILES['fupload']))
  for($i=0;$i<count($_FILES['fupload']['name']);$i++){
    $cil = "./" .$_FILES['fupload']['name'][$i];
    $nazev_souboru = $_FILES['fupload']['tmp_name'][$i];
    $copy = move_uploaded_file($nazev_souboru, $cil);
    chmod ($cil, 0777);
    if($copy)
      echo "<div id=\"upozorneni\">\n".
      "Fotka ".$_FILES['fupload']['name'][$i]." byla nahrána.\n".
      '</div>';
    else
      echo '<div id="upozorneni">Soubor nemohl být nahrán.</div>';
  }
?>
SkIpPeR
Profil
Keeehi:
Děkuji, funguje to :)

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: