Autor | Zpráva | ||
---|---|---|---|
Kubas Profil * |
#1 · Zasláno: 14. 11. 2011, 22:24:38
Ahoj, mám script -
$slozka = opendir ("uploady/"); $soubors = array(); while (false!==($soubory = readdir ($slozka))){ if ($soubory != "." && $soubory != ".." && $soubory != "index.php") $soubors[] = $soubory;} natcasesort ($soubors); foreach ($soubors as $s){ $dotazek = "SELECT id FROM soubor WHERE soubor = '$soubors'"; $vysledek = mysql_query($dotazek) or die("Dotaz nelze provést: " . mysql_error()); //Cyklus vypisu while ($eeem = mysql_fetch_array($vysledek)) { echo "<a href='$s'>$s</a> <br>"; echo ''.$eeem['id'].'' ; } } prvně se složka otevře, přečte, obsah se uloží do proměnné $soubors, seřadí se, vypíše se. Tato část je v pořádku. Problém ovšem nastává když tam vložím dotaz na databázi. O co mi jde? V databázi mám ID a cestu k souboru (ve tvaru ./uploady/soubor.neco ) . ID by jsem potřeboval přiřadit ke každému souboru na základě názvu souboru (porovnat název souboru s názvem souboru v databázi). Jelikož název souboru mám uložený v proměnné $soubors, snažil jsem se vytáhnout ID pomocí dotazu WHERE soubor = '$soubors', mno tato varianta bouhžel nejede (nevypíše se nic). Jakým způsobem by to šlo tedy udělat? Děkuju za odpovědi. |
||
Tori Profil |
#2 · Zasláno: 14. 11. 2011, 22:33:27
Řádek 9 - porovnáváte název s celým polem místo s jednotlivými názvy. Cyklus na ř.13 je zbytečný, dotaz by měl vrátit jen jeden řádek výsledků.
K čemu to celé slouží? Pokud platí, že každému souboru v /uploads odpovídá záznam v databázi, tak by možná stačilo číst názvy i ID jen z databáze, ne? |
||
Kubas Profil * |
#3 · Zasláno: 14. 11. 2011, 22:48:28
Děkuju za reakci, jakým způsobem bych teda měl porovnávat název jenom určitým řádkem místo celého pole?
Tady toto slouží jako administrace souborů. V dalším kroku je pak možnost smazání souboru (unlink) a databáze zde má sloužit pouze něco jako statistika -> cílem je že když smažu soubor unlinkem, tak se mi zároveň smaže aj záznam z databáze právě za pomocí ID a k tomu to právě potřebuju k sobě přiřadit. |
||
Tori Profil |
#4 · Zasláno: 14. 11. 2011, 23:02:28
Kubas:
„jakým způsobem“ je tam překlep, $soubors místo $s. Jinak jsem se ptala na to, jestli může existovat soubor v /uploads (kromě index.php), který není v databázi. Pokud ne, tak můžete načíst seznam souborů jen z DB - budete to mít i s ID a bude to rychlejší. |
||
Kubas Profil * |
#5 · Zasláno: 15. 11. 2011, 16:58:38
Děkuju, opravdu to bylo překlepem, kde se mělo dát místo $soubors jenom $s + tam byla ještě chyba v určení cesty. Ještě dodám k první odpovědi že podmínka na řádku 13 není "nechtěná", protože nepotřebuju vypsat jenom jeden radek ale celé pole.
K dotazu "na co to je?" - mám uložený soubor ve složce a odkaz k němu mám v databázi. Aby sem mohl smazat soubor jako takový a pri jenom jsem ho smazal i z databáze, potřebuju k souboru přiřadit nějaký index aby se to dalo dohledat i v databázi. Nebo by to šlo udělat nějak jednodušeji? |
||
tatyalien Profil |
#6 · Zasláno: 16. 11. 2011, 15:28:32
Ulož si v DB id souboru, případně cestu (tedy pokud to vše máš jen složka/idsouboru, tak cestu ukládat nemusíš), možná i uložit příponu (.jpg, .gif, .exe atd)
Jedním dotazem získáš id,příponu a cestu když znáš tak si z výsledku rovnou poskládáš složka/idsouboru.jpg a mazat... smažeš záznam z db a rovnou unlinkneš soubor. |
||
Rellik Profil |
#7 · Zasláno: 16. 11. 2011, 17:03:25
Kubas:
„Aby sem mohl smazat soubor jako takový a pri jenom jsem ho smazal i z databáze“ A co to udělat obráceně? Vypsat si databázi, vytvořit "mazací link" do DB a zároveň smazat soubor? já mám něco podobného na stránkách pro mazání fotek z galerie- odkaz vytvořený z dotazu DB: ?file=nazev_obrazku.jpg&file_id=id_souboru_v_db if(file_exists($adresar.$file)) { mysql_query("DELETE FROM foto WHERE id=".$file_id.""); unlink($adresar.$file); } (zkrácená verze. mám tam ještě navíc mazání miniatur, případně složky pokud už v ní nejsou žádné obrázky...) Tohle ale úplně stačí na smazání souboru a zároveň vymazání jeho existence i z DB |
||
Časová prodleva: 12 let
|
0