Autor | Zpráva | ||
---|---|---|---|
verča Profil * |
#1 · Zasláno: 5. 1. 2011, 11:14:53
Ahoj, uvádím kousek kódu, který používám pro vkládání údajů do db.
Kód mi funguje ale pouze za předpokladu že uživatel zadal foto. Jakmile je políčko pro fotky nevyplňené tak se mi nic neuloží. Můžete mi prosím poradit jak to mám ošetřit aby se mi údaje ukládali i když nebude vyplňena žádná fotka? Děkuji $last_id=mysql_insert_id(); $vzkaz = addslashes($_POST["vzkaz"]); $index = addslashes($_POST["index"]); 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>"; $uploaddir = '../foto/predstaveni/'; $uploadfile = $uploaddir . $_FILES['foto']['name'][$i]; $name = $_FILES['foto']['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)) { $vysledek=mysql_query("insert into tabulka (id, cas, vzkaz, index, foto) values (".$last_id.",".time().",'".$vzkaz."','".$index."','".$name."')"); } else { } } } $path= 'http://' . $_SERVER['SERVER_NAME'] . dirname($_SERVER['SCRIPT_NAME']) . '/predstaveni.php'; Header("Location:".$path); |
||
Medvídek Profil |
#2 · Zasláno: 5. 1. 2011, 11:18:06
verča:
Protože vkládáš údaje do DB až po úspěšném nahrání fotky. Udělej to uplně mimo a jen si ověřuj, jestli někdo fotku poslal, nebo ne. |
||
verča Profil * |
#3 · Zasláno: 5. 1. 2011, 15:17:56
No ale když tich fotek bude několik, tak to přeci musím mít v tom cyklu aby se mi nahráli všechny řádky, nebo ne?
Kde jinde by ten dotaz měl být? |
||
verča Profil * |
#4 · Zasláno: 5. 1. 2011, 17:04:49
Tak na to ne a ne přijít jak zjistím zda byla nějaka fotka odeslána, abych podle toho udělala asi dva dotazy do db. Aspoň si teda myslím že tak by to mělo být. Když zjistím že nebyla vyplněna uložím to bez fotky, jinak s fotkou. Ale bohužel neumím zjistit zda byla či nebyla fotka odeslána, aniž bych to neměla v tom mém cyklu
for($i = 0; $i < count($_FILES['foto']['tmp_name']); $i++) |
||
lordfrikk Profil |
#5 · Zasláno: 5. 1. 2011, 17:40:36
Trošku nechápu. Vkládaš třeba 3 fotky, takže v databázi pak máš 3 identické záznamy, které se liší pouze sloupcem foto?
|
||
Fergi Profil |
#6 · Zasláno: 5. 1. 2011, 19:29:41 · Upravil/a: Fergi
máš to kapku takový zmatenější ale když skus před to for na začátek přidat
if($_FILES["foto"]["name"]!=""){ Tvůj kód }else{echo"vyberte soubory!"} tak by to snad mělo jet ;) |
||
verča Profil * |
#7 · Zasláno: 5. 1. 2011, 20:46:39
lordfrikk:
Přesně tak mám pak tři zaznámy které se liší pouze fotem. Chtěla jsem docílit toho aby prostě k jednomu záznamu někdo mohl přiřadit x fotek. Myslíš že bych to měla řešit jinak? |
||
verča Profil * |
#8 · Zasláno: 5. 1. 2011, 20:57:12
Fergi:
Tak to to asi pojede akorat kdyz nezadam zadnou fotku tak mi to hlasi hlasku v tom tvem kousku kodu ze nezna index foto Notice: Undefined index: foto in ... on line if($_FILES["foto"]["name"]!="") { |
||
lordfrikk Profil |
#9 · Zasláno: 5. 1. 2011, 21:23:15 · Upravil/a: lordfrikk
verča:
Samozřejmě, toto řešení je špatné. Data budou např. v tabulce ZAZNAMY a fotky v tabulce FOTO. Tabulka ZAZNAMY bude mít tyto sloupce: ID, CAS, VZKAZ, INDEX Tabulka FOTO bude mít tyto sloupce: ID, ZAZNAM_ID, FOTO Záznamy uložíš hned a pokud budou nějaké fotky, tak je uložíš až poté. Tím vyřešíš všechny svoje problémy a navíc: 1) nebudeš mít zbytečný sloupec FOTO pro záznamy, které foto neobsahují 2) nebudeš mít duplicitní záznamy, které se budou lišit pouze fotem. Pokud budeš potřebovat dále pomoc, stačí se zeptat :) |
||
verča Profil * |
#10 · Zasláno: 5. 1. 2011, 23:00:57
lordfrikk:
Jasně to bude asi fakt lepší řeěení, akorát abych to celé pochopila: 1. Dvě tabulky to je jasné. 2. Musí být spolu nějak propojeny, napadá mě že ID z první tabulky by mělo být stejné jako ZAZNAM_ID je to tak? 3. Jak toto id jednoduše zjistit? |
||
lordfrikk Profil |
#11 · Zasláno: 5. 1. 2011, 23:37:30
verča:
2. Přesně tak. 3. Nerozumím (které id?) |
||
verča Profil * |
#12 · Zasláno: 5. 1. 2011, 23:42:18
lordfrikk:
No tu bunku Zaznam ID, ta by mela byt pro ty obrazky, ktere patri k danemu clanku stejna ne? a měla by mít hodnotu ID vzkazu abych vedela ke komu co patri ne? |
||
verča Profil * |
#13 · Zasláno: 5. 1. 2011, 23:54:46
lordfrikk:
Tak jsem to vyřešila takto, myslíš si že je to ok? $last_id=mysql_insert_id(); $vzkaz = addslashes($_POST["editor2"]); $poradi = addslashes($_POST["poradi"]); $vysledek=mysql_query("insert into predstaveni (id, cas, vzkaz, poradi) values (".$last_id.",".time().",'".$vzkaz."','".$poradi."')"); $vysledek=mysql_query("select id from predstaveni where poradi = $poradi", $link) or die('Error: '.mysql_error ()); while ($zaznam=MySQL_Fetch_Array($vysledek)) $zaznam_id = $zaznam['id']; for($i = 0; $i < count($_FILES['foto']['tmp_name']); $i++) { $druh = addslashes($_POST["druh"]); echo $_FILES['foto']['tmp_name'][$i], " ", $_FILES['foto']['name'][$i], "<br>"; // vsechna potrebna pole if (is_uploaded_file($_FILES['foto']['tmp_name'][$i])) { echo $_FILES['foto']['tmp_name'][$i], " ", $_FILES['foto']['name'][$i], "<br>"; // vsechna potrebna pole $uploaddir = '../foto/predstaveni/'; // Relative path under webroot $uploadfile = $uploaddir . $_FILES['foto']['name'][$i]; //funkce basename je zbytečná, při uploadu se nepředává cesta $name = $_FILES['foto']['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)) { $vysledek=mysql_query("insert into foto (id, zaznam_id, foto, druh) values (".$last_id.",'".$zaznam_id."','".$name."','".$druh."')"); } else { } } } $path= 'http://' . $_SERVER['SERVER_NAME'] . dirname($_SERVER['SCRIPT_NAME']) . '/predstaveni.php'; Header("Location:".$path); |
||
lordfrikk Profil |
#14 · Zasláno: 6. 1. 2011, 00:07:18 · Upravil/a: lordfrikk
Ano, takhle jsem to myslel, až na několik detailů.¨
while ($zaznam=MySQL_Fetch_Array($vysledek)) $zaznam_id = $zaznam['id']; Naprosto zbytečné, ID záznamu máš uloženo v $last_id, tudíž stačí: $zaznam_id = $last_id; U ukládání fotek používáš stále $last_id. Pokud budeš mít více než jednu fotku, tak ti to vyhodí chybu (každé ID musí být unikátní). Nechápu, proč to ID vkládáš ručně přes mysql_insert_id(); Stačí pouze, abys tabulku upravila tak, aby měla AUTO_INCREMENT, pak se bude ID automaticky vyplňovat +1 větší než to předchozí, takže ho ze svých dotazů můžeš ůplně odstranit. Takhle to pak bude vypadat: $vysledek=mysql_query("insert into foto (zaznam_id, foto, druh) values ('".$zaznam_id."','".$name."','".$druh."')"); Navíc mysql_insert_id(); ti vrací hodnotu ID z posledního dotazu, to znamená že buď při vkládání nebude pouze $last_id ale $last_id+1, nebo si uprav i tabulku predstaveni tak, aby měla AUTO_INCREMENT a nemusíš se o to vůbec starat. Nejsem si jistý, jestli to vůbec s tím, jak máš to $last_id teď, může fungovat. |
||
verča Profil * |
#15 · Zasláno: 6. 1. 2011, 07:39:25
lordfrikk:
Tak jak jsem to měla mi to fungovala, ted kdyz to zmenim jak jsi psal tak v tabulce foto mám zaznam_id roven 0 |
||
lordfrikk Profil |
#16 · Zasláno: 6. 1. 2011, 10:24:23
Takhle by to mělo fungovat, ale MUSÍŠ mít ty tabulky s AUTO_INCREMENT.
$vzkaz = addslashes($_POST["editor2"]); $poradi = addslashes($_POST["poradi"]); $vysledek=mysql_query("insert into predstaveni (cas, vzkaz, poradi) values (".time().",'".$vzkaz."','".$poradi."')"); $zaznam_id = mysql_insert_id(); for($i = 0; $i < count($_FILES['foto']['tmp_name']); $i++) { $druh = addslashes($_POST["druh"]); echo $_FILES['foto']['tmp_name'][$i], " ", $_FILES['foto']['name'][$i], "<br>"; // vsechna potrebna pole if (is_uploaded_file($_FILES['foto']['tmp_name'][$i])) { echo $_FILES['foto']['tmp_name'][$i], " ", $_FILES['foto']['name'][$i], "<br>"; // vsechna potrebna pole $uploaddir = '../foto/predstaveni/'; // Relative path under webroot $uploadfile = $uploaddir . $_FILES['foto']['name'][$i]; //funkce basename je zbytečná, při uploadu se nepředává cesta $name = $_FILES['foto']['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)) { $vysledek=mysql_query("insert into foto (zaznam_id, foto, druh) values ('".$zaznam_id."','".$name."','".$druh."')"); } else { } } } $path= 'http://' . $_SERVER['SERVER_NAME'] . dirname($_SERVER['SCRIPT_NAME']) . '/predstaveni.php'; Header("Location:".$path); |
||
Časová prodleva: 13 let
|
0