Autor Zpráva
lenka
Profil *
Ahoj.
mám formulář, kde si uživatel vybere, kolik chce nahrát souboru a podle toho mu vyjede počet inputu pro vkladání.

<?php  $kolik = $_POST["kolik"];   for($i = 1; $i <= $kolik; $i++) { echo "<tr><td class='d_text2'>Foto ".$i."</td><td><input type='file' name='foto[]'></td></tr>"."\n"; } ?>
No a teď bych

potřebovala tyto soubory nahrát do adresáře a uložit i jejich názvy do databáze.
1. Zkouším tento script pro nahrání, ale nějak mi to nic nedělá.
<?php
              foreach($_FILES['foto']['name'] as $uploadovany_soubor)
               {
                   if (is_uploaded_file($uploadovany_soubor['tmp_name']) )
                      {
                        $uploaddir = '../fotografie/foto/';
                        $uploadfile = $uploaddir . $uploadovany_soubor['name'];                          
                        $name = $uploadovany_soubor['name']; 
                        $pripona = explode(".", $name);
                        $pripona = $pripona[count($pripona)-1];
                        if (!in_array($pripona, array("jpg", "jpeg", "gif", "png")))
                          {
                             exit ("nepovolena pripona, lze nahrat jen jpg, jpeg, gif, png<br>");
                             continue;
                          }
                        if (move_uploaded_file($uploadovany_soubor['tmp_name'], $uploadfile)) 
                         { 
                           exit ("Soubor byl úspěšně nahrán.\n<br>"); 
                          } 
                        else { 
                           exit ("nepovedlo se nahrat.\n<br>"); 
                               }
                      }
                 }
?>
2. A pak vůbec nevím jak mám složit inzert do databáze když mám vlastně víc těch souborů, to to tam vložím nějak jako pole?
Alphard
Profil
Takhle to pole procházet nejde. Když se nad tím zamyslíte, tak řádky
  foreach($_FILES['foto']['name'] as $uploadovany_soubor)
  {
     print_r($uploadovany_soubor);
  }
by vám vypsaly jen jména souborů. Potom $uploadovany_soubor['tmp_name'] nemůže fungovat.

Vstupní soubory můžete projít třeba takhle:
  for($i = 0; $i < count($_FILES['foto']['tmp_name']); $i++)
  {
    if (is_uploaded_file($_FILES['foto']['tmp_name'][$i]))
    {
      echo $_FILES['foto']['tmp_name'][$i], " ", $_FILES['foto']['name'][$i], "<br>"; // vsechna potrebna pole
    }
  }

Odpověď na druhou otázku závisí na tom, co vlastně chcete do databáze vložit. Nejlépe asi jednotlivé záznamy.
lenka
Profil *
Amo chtěla bych do databáze vložit jednotlivě záznamy, to znamená že když budu mít 10 souboru tak se mi vloží deset řádků. Jak by potom mohl vypadat ten příkaz?
lenka
Profil *
Tak jsem ten kod poupravila takto ale stejně mi to nejede.
1. Nefungujou mi ty přípony (hlasí že nejsou povoleny, přitom by měli být)
2. když ten kód s příponou vymažu tak se stejně nic nenahraje a hodí to chybu:
Warning: move_uploaded_file(../fotografie/foto/C:\wamp\tmp\php4E17.tmp) [function.move-uploaded-file]: failed to open stream:...
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\wamp\tmp\php4E17.tmp' to '../fotografie/foto/C:\wamp\tmp\php4E17.tmp' in C:\wamp\www\...

kód:
for($i = 0; $i < count($_FILES['foto']['tmp_name']); $i++)
              {
                  if (is_uploaded_file($_FILES['foto']['tmp_name'][$i]))
                  {
                    echo $_FILES['foto']['tmp_name'][$i], " ", $_FILES['foto']['name'][$i], "<br>"; // vsechna potrebna pole
                    
                    $uploaddir = '../fotografie/foto/'; // Relative path under webroot 
                    $uploadfile = $uploaddir . $_FILES['foto']['tmp_name'][$i];  //funkce basename je zbytečná, při uploadu se nepředává cesta
                    $name = $_FILES['foto']['tmp_name'][$i];
                    $pripona = explode(".", $name);
                    $pripona = $pripona[count($pripona)-1];
                    if (!in_array($pripona, array("jpg", "jpeg", "gif", "png", "bmp")))
                        {
                       exit ("nepovolena pripona, lze nahrat jen jpg, jpeg, gif, png, bmp<br>");
                       continue;
                    }
                    if (move_uploaded_file($_FILES['foto']['tmp_name'][$i], $uploadfile)) 
                      { 
                    exit ("Soubor byl úspěšně nahrán.\n<br>"); 
                      } 
                    else { 
                    exit ("nepovedlo se nahrat.\n<br>"); 
                         }
                  }
                }
Keeehi
Profil
$uploadfile = $uploaddir . $_FILES['foto']['name'][$i];
$name = $_FILES['foto']['name'][$i];
Mělo by to spravit jak problémy s příponou tak i chybou při přesouvání souboru.
lenka
Profil *
Máš pravdu na to jsem už přišla, teď mi to ale nahraje pouze první soubor a ty další ne, takže tam bude asi ještě někde chyba...
Keeehi
Profil
Co myslíš, že dělá tohle? Čím to nahradíš?
exit ("Soubor byl úspěšně nahrán.\n<br>");
lenka
Profil *
Jéžiš, díky to sem úplně přehlídla že to tady vlastně zastavím...Echo vše vyřešilo.

No a ještě bych potřebovala pomoct s tím zápisem do databaze, abych to tam vložila jako že každý soubor má svůj řádek. To by mělo byt jako že vkládám nějaké pole?
Keeehi
Profil
Úplně normálně. Před řádek echo "Soubor byl úspěšně nahrán.\n<br>"; vložíš
mysql_query("INSERT INTO tabulka VALUES ('data1','data2','data3')");
data1-3 může být třeba idečko, cesta, popis, atd.. Jelikož je to celé v cyklu, tak se i tento dotaz provede vícekrát. A jelikož je to v části, kam se script dostane jen, pokud se povedlo soubor nahrát a přesunout, tak se ten dotaz provede jen u těch úspěšně nahraných souborů.

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:

0