Autor | Zpráva | ||
---|---|---|---|
Tomasds Profil |
#1 · Zasláno: 28. 10. 2008, 09:32:58 · Upravil/a: Tomasds
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 |
#2 · Zasláno: 28. 10. 2008, 09:48:21
Když si do formuláře přidáš další inputy pro ta ID, tak jejich obsah se nepřenese?
|
||
Tomasds Profil |
#3 · Zasláno: 28. 10. 2008, 09:54:18
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 |
#4 · Zasláno: 28. 10. 2008, 09:58:28
Tak namísto foreach používej for.
|
||
Tomasds Profil |
#5 · Zasláno: 28. 10. 2008, 09:59:54 · Upravil/a: Tomasds
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 |
#6 · Zasláno: 28. 10. 2008, 10:02:35
Aha, ty si neumíš zjistit počet prvků :-)
|
||
Tomasds Profil |
#7 · Zasláno: 28. 10. 2008, 11:36:39
Tak ten for to vyřešil, dík.
|
||
Časová prodleva: 2 roky
|
|||
SkIpPeR Profil |
#8 · Zasláno: 7. 12. 2010, 20:34:11
Mužeš mi to prosimtě sem poslat, jak si to vykódil?
|
||
Keeehi Profil |
#9 · Zasláno: 7. 12. 2010, 21:09:25 · Upravil/a: Keeehi
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 |
#10 · Zasláno: 9. 12. 2010, 15:09:00
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 |
#11 · Zasláno: 9. 12. 2010, 15:50:36
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 |
#12 · Zasláno: 9. 12. 2010, 15:55:46
Keeehi:
Aha, ok, díky ... v JS se tak dlouho nehrabu, pomohlo |
||
SkIpPeR Profil |
#13 · Zasláno: 9. 12. 2010, 16:47:02
<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 |
#14 · Zasláno: 9. 12. 2010, 17:26:12
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 |
#15 · Zasláno: 9. 12. 2010, 20:39:16 · Upravil/a: SkIpPeR
panther:
Je to řádek 12 a 13 v mojem kodě, sorry že sem to sem nedal a strejda google moc nepomohl |
||
Časová prodleva: 11 dní
|
|||
SkIpPeR Profil |
#16 · Zasláno: 20. 12. 2010, 15:51:35
Fakt to nemužu najít, pár zmínek o tom, ale nikde konkretní řešení, který by mě pomohlo
|
||
Keeehi Profil |
#17 · Zasláno: 20. 12. 2010, 17:18:27 · Upravil/a: Keeehi
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 |
#18 · Zasláno: 20. 12. 2010, 18:47:28 · Upravil/a: SkIpPeR
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 |
#19 · Zasláno: 20. 12. 2010, 19:32:45
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 |
#20 · Zasláno: 20. 12. 2010, 19:45:40
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 |
#21 · Zasláno: 20. 12. 2010, 20:44:33
Zkontroluj, zda je v cestách to, co by tam být mělo.
|
||
SkIpPeR Profil |
#22 · Zasláno: 20. 12. 2010, 20:57:10
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 |
#23 · Zasláno: 20. 12. 2010, 20:58:29
SkIpPeR:
Co vypíše print_r($_FILES['fupload']); ?
|
||
SkIpPeR Profil |
#24 · Zasláno: 20. 12. 2010, 21:06:16
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 |
#25 · Zasláno: 20. 12. 2010, 21:19:48
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 |
#26 · Zasláno: 20. 12. 2010, 22:03:41
Keeehi:
Děkuji, funguje to :) |
||
Časová prodleva: 13 let
|
0