Autor Zpráva
unlucky
Profil
Ahoj, chci si udělat skript, který by kontroloval nové obrázky v určitém adresáři. Pokud obrázek ještě nebyl přidán do databáze, tak se zobrazí a umožní uživateli/adminovi možnost přidání popisků, jména atd.. pté se uloží do databáze. Toto lze bezproblému udělat.

Problém je v tom, že v adresáři se nachází 100-200 starých obrázků a 100-200 nových. Takže pro každý obrázek by se podíval do databáze je zdlouhavý. Cca 100-200 dotazů, což je asi nesmysl. Jak byste toto řešili?
ShiraNai7
Profil
Musí být nové i staré obrázky v jednom adresáři? Pokud ano, lze si ukládat čas poslední provedené kontroly a při kontrole srovnávat čas poslední úpravy souboru.
unlucky
Profil
ShiraNai7:
ano, to jsem měl také na mysli, ale obrázky nejsou uploadovány najednou.
ShiraNai7
Profil
unlucky:
ale je zde obrázky nejsou uploadovány najednou.

A to vadí čemu?
unlucky
Profil
ShiraNai7:
Problém je takto: Přidám si 300 obrázků, u 150 si přidám popisky. A teďka potřebuji přidat popisky ještě u těch 150. Takže ten čas uploadu opravdu nehraje roli
ShiraNai7
Profil
unlucky:
Ukládej je do databáze všechny HNED jak se nahrají a měj tam sloupec, například "ma_popisek", s výchozí hodnotou 0, který bude indikovat, že u obrázku není vyplněný popisek. Po doplnění se přepíše "ma_popisek" na 1.
Petr__
Profil *
unlucky:
Problém je v tom, že v adresáři se nachází 100-200 starých obrázků a 100-200 nových. Takže pro každý obrázek by se podíval do databáze je zdlouhavý. Cca 100-200 dotazů, což je asi nesmysl. Jak byste toto řešili?
Vždyť vůbec není třeba pokládat tolik dotazů, stačí jen jedním dotazem vybrat rovnou všechny názvy fotek už uložené v databázi, a pak je porovnat (array_diff) s tím co je v daném adresáří (scandir).
Mensí problém nastane, když ty fotky budete chtít i mazat a přejmenovávat, pak bude třeba ošetřeit i vymazání přebývajících názvů z databáze, které nemají protějšek v adresáři.
unlucky
Profil
Petr_:
hned to zkusím.

Ten váš problém nechápu. Na mazání stačí unlink nebo delete. Nebo jak jste to měl na mysli

Tenhle skript jsem viděl ve vbulletin, add multiple avatars. Akorát v jejich kódu se nějak nevyznám :P
unlucky
Profil
Jak prosím vás získám data z databáze, abych je mohl porovnávat v array_diff

$o=mysql_fetch_array(mysql_query("select sloupec from avatar"));
print_r($o;


tohle mi vrátí pouze jeden výsledek. Mám si je přidat do cyklu přes while? Nebo jsem někde udělal chybu?

while($z=mysql_fetch_assoc($o)){
  array_push($x,$z['avatarpath']);
}


zatím mám toto, ale myslím si, že to lze i jinak a rychleji přímo z dbz?
Petr__
Profil *
unlucky:
No šel bych na to takto:

$dotaz = mysql_query("SELECT sloupec_s_nazvem_fotky FROM tabulka");

while ($radek = mysql_fetch_array($dotaz)) {
$db[] = $radek[0];
}

$adresar = scandir("cesta_k_adresari");

print_r(array_diff(array_diff($adresar, array('.','..')),$db)); // druhý array_diff vyfiltruje znaky . a ..


Výsledkem jsou názvy souborů z adresáře, které nejsou obsaženy v databázi. Podmínka je, že tam nejsou žádné podadresáře...



Ten váš problém nechápu. Na mazání stačí unlink nebo delete. Nebo jak jste to měl na mysli
Já jsem předpokládal, že ty obrázky do adresáře přidáváte přes FTP nějakým Total Commanderem, či podobným programem, tím pádem by se databáze neměla jak dozvědět, pokud nějaký obrázek stejným způsobem smažete. Pokud obrázky nahráváte přímo v PHP, pak nechápu, proč si k nim zároveň v daném webovém formuláři nepřidáte nějakou textareu pro popisek. Nevím, jak tam ty obrázky dostáváte.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: