Fotoalbum v PHP – manipulace s fotografiemi 2.
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
.
Mohlo by vás také zajímat
-
Od iPhonu po Android: Ultra HDR přináší nový standard fotografií
1. listopadu 2024 -
Moderní trendy ve webdesignu: Top trendy pro rok 2024
12. ledna 2024 -
Vstupte do éry umělé inteligence: ASOME Max Studio s AMD Ryzen™ 9 7940HS
14. listopadu 2023 -
Praktické rady na zabezpečení redakčního systému WordPress
27. února 2023
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024