Autor Zpráva
Kubas
Profil *
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
Řá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 *
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
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 *
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
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
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

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