![]() |
|||
|
|
|
Fotoalbum v PHP – manipulace s fotografiemi
II Dnes budeme pokračovat tvorbou skriptu na
manipulaci s fotografiemi, konkrétně vyřešíme problematiku mazání starých
fotografií v existujicích kolekcích. Tím budeme mít skript
manip.php již dokončený a budete si jej moci zkopírovat do
systémového adresáře aplikace. Mazání fotografiíNa začátek zopakuji kostru té části skriptu manip.php, která zajišťuje mazání fotografií: if ($action == "del") { /* smazani stare fotografie
*/
if ($krok == 0) { /* (3) vyber kolekce, ze ktere budeme chtit fotografie mazat */ } elseif ($krok == 1) { /* (4) vyber fotografii ke smazani ve vybrane kolekci */ } elseif ($krok == 2) { /* (5) smazani vybranych fotografii z databaze */ } } Jak bude mazání fotografií fungovat? Uživatel nejprve vybere kolekci (3), ze které bude chtít mazat. Poté se zobrazí obsah kolekce. U každého z thumbnailů bude zobrazen checkbox pro označení fotografie, kterou bude chtít uživatel mazat (4). Nakonec provedeme smazání vybraných fotografií z databáze (5). Jednoduchou představu si lze udělat z následujícího obrázku (4): Výběr kolekce (3) print "<h2>Smazání
fotografií</h2>";
print "Vyberte kolekci, ze které chcete smazat fotografie<br><br>"; print "<form action=\"manip.php\" method=\"get\">"; print "<input type=\"hidden\" name=\"action\" value=\"del\">"; print "<input type=\"hidden\" name=\"krok\" value=\"1\">"; print "<b>Kolekce: </b> <select size=\"1\" name=\"kolekce\">"; mysql_connect("localhost", "login", "heslo"); mysql_select_db("album"); $result = mysql_query("select ID, NAZEV, ROK, DOBA from KOLEKCE order by NAZEV"); $p = mysql_num_rows($result); if ($p > 0) { print "<option value=\"0\"> --- vyberte kolekci ---"; while (list ($kid, $knazev, $krok, $kdoba) = mysql_fetch_array($result)) { print "<option value=\"$kid\"> $knazev ($kdoba, $krok)"; } print "</select>"; print "<br><br><input type=\"submit\" value=\"Vyber\">"; } else { print "<br><br><b>Nelze smazat žádnou fotografii, neboť ještě není založena žádná kolekce!</b><br>"; } mysql_close(); print "</form>"; V této části se soustředíme zejména na vygenerování formuláře pro výběr kolekce. Na začátku formuláře zajistíme pomocí formulářových prvků typu hidden správné nastavení parametrů $action a $krok, potřebných pro provedení dalšího volání skriptu. Poté vygenerujeme podobným způsobem jako v předchozím díle formulářový prvek select, který bude obsahovat seznam všech kolekcí uložených aktuálně v databázi. Opět ošetříme případ, že v databázi není uložena žádná kolekce. Výběr fotografií (4)Po té, co uživatel vybere některou z kolekcí, přejde skript manip.php do 4. části (na vstupu je proměnná $krok == 1), ve které se zobrazí všechny fotografie vybrané kolekce. Pak je vygenerován rozsáhlejší formulář, který bude v html tabulce zobrazovat přehledně jednotlivé fotografie. U každé bude popis a zatržení pro smazání. V tomto formuláři opět použijeme formulářových prvků typu hidden pro předání parametrů $action a $krok pro realizaci 5. části. print "<h2>Smazání
fotografií</h2>";
print "Zatrhněte fotografie, které chcete smazat.<br>"; mysql_connect("localhost", "login", "heslo"); mysql_select_db("album"); $result = mysql_query("select ID, POPIS, DATUM, THUMB from FOTKA where KOLEKCE_ID = $kolekce"); $ch = mysql_errno(); $pocet = mysql_num_rows($result); if (!$ch) { print "<form action=\"manip.php\" method=\"get\">"; print "<input type=\"hidden\" name=\"action\" value=\"del\">"; print "<input type=\"hidden\" name=\"krok\" value=\"2\">"; print "<input type=\"hidden\" name=\"kolekce\" value=\"$kolekce\">"; print "<input type=\"hidden\" name=\"pocet\" value=\"$pocet\">"; print "<table border=\"0\" cellspacing=\"0\" cellpadding=\"3\">"; $i = 0; while (list ($cislo, $popis, $datum, $thumb) = mysql_fetch_array($result)) { print "<tr><td><input type=\"checkbox\" name=\"photo[$i]\" value=\"$cislo\"></td>"; print "<td valign=\"top\"><img src=\"../photos/$thumb\" border=\"0\"></td>"; print "<td>$popis<br>$datum</td></tr>"; $i++; } print "</table><br><input type=\"submit\" value=\"Odeber\"></form>"; } else { print "<font color=\"red\">Při načítání fotografií zvolené kolekce došlo k chybě!</font><br>"; } mysql_close(); Smazání z databáze (5)Pokud uživatel vybral kolekci a označil fotografie, které chce smazat, může proběhnout poslední část skriptu: print "<h2>Smazání
fotografií</h2>";
mysql_connect("localhost", "login", "heslo"); mysql_select_db("album"); for ($i = 0; $i < $pocet; $i++) { if ($photo[$i] > 0) { mysql_query('delete from FOTKA where ID = '.$photo[$i]); $ch = mysql_errno(); if (!$ch) { print "Fotografie ID=".$photo[$i]." byla úspěšně smazána<br>"; mysql_query("update KOLEKCE set POCET = POCET - 1 where ID = $kolekce"); } else { print "<font color=\"red\">Při mazání fotografie ID=".$photo[$i]." došlo k chybě!</font><br>"; } } } mysql_close(); I když je kód části (5) relativně krátký, uvedu zde přesto pár komentářů. Všimněte si, že nezjišťuji z databáze počet fotografií pro danou sekci. To proto, že v části (4) při generování formuláře jsem si vložil prvek hidden a hodnotu proměnné $pocet jsem si předal jako parametr. Tím jsem ve volání skriptu (v jeho 5. části) ušetřil jeden zbytečný přístup k databázi. Jak poznám, které checkboxy byly zatrženy? K tomu nám slouží pole $photo[$i], kde $i udává pořadí fotografie v kolekci. Je-li hodnota $photo[$i] nulová (pro konkrétní $i), pak to znamená, že fotografie nebyla označena pro smazání. Pokud je hodnota nenulová, pak je tam uloženo skutečné ID fotografie v tabulce FOTKA. Pokud se tedy podmínka $photo[$i] > 0 vyhodnotí kladně, pak nad tabulkou FOTKA provedeme rovnou sql příkaz DELETE. S každou smazanou fotkou nesmíme zapomenout na snížení počtu fotografií v záznamu vybrané kolekce v tabulce KOLEKCE (příkazem UPDATE). Příkazem cyklu for systematicky otestujeme všechny hodnoty $photo[$i]. Kompletní skript manip.php si můžete stáhnout. Nakopírujte si jej do adresáře \Album\system. |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| © Zoner software, s.r.o., všechna práva vyhrazena, tento server dodržuje právní předpisy o ochraně osobních údajů. |