Určitě se vám někdy stává, že chcete přidat do již existující kolekce nějakou novou fotografii, nebo naopak nějakou fotografii ze stávající kolekce odstranit. Dnes se tedy podíváme na jednoduchý nástroj, kterým zajistíme přidání nové fotografie do již existující kolekce.

Manipulace s fotografiemi

Skript nám bude realizovat jak přidání nové fotografie, tak i odebrání staré fotografie. Prakticky to zajistíme parametrem $action, který bude mít při volání skriptu manip.php pro přidání nové fotografie hodnotu add, pro smazání del. Výběr, zda chceme přidávat nebo mazat, zajistíme pomocí dvou klikacích odkazů v úvodu stránky, jak je vidět v základní kostře skriptu manip.php.

Přidání nové fotografie se provede celkově ve dvou krocích (jednotlivé kroky opět zrealizujeme pomocí parametru $krok). Uživatel nejprve zadá údaje o nové fotografii a vybere kolekci, do které se má fotografie přiřadit ($krok == 0). Po odeslání dat z formuláře, skript uživatelem zadané údaje zapíše do databáze ($krok == 1).

Smazání fotografií se bude provádět celkem ve třech krocích. V prvním vybereme kolekci, ze které chceme fotografie mazat ($krok == 0). Ve druhém (fotografie se zobrazí jako seznam thumbnailů) „označíme“ fotografie, které chceme smazat ($krok == 1). A konečně ve třetím se provede smazání příslušných fotografií z databáze ($krok == 2).

Kostra skriptu manip.php

<html>
<head>
<title>Manipulace fotografie</title>
</head>
<body>
<h1>Fotoalbum 1.0 – Manipulace s fotografiemi</h1>
<hr size=1 noshade>
<ul>
<li> <a href=“manip.php?action=add&krok=0″>Přidání nové fotografie</a>
<li> <a href=“manip.php?action=del&krok=0″>Odebrání fotografií z kolekce</a>
</ul>
<hr size=1 noshade>
<?
if ($action == „add“) { /* pridani nove fotografie */
  if ($krok == 0) {
    /* (1) uzivatel zada novou fotografii */
  }
  elseif ($krok == 1) {
    /* (2) zadana fotografie se ulozi do databaze */
  }
}
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 */
  }
}
?>
</body>
</html>

Přidání fotografie

Nyní se podíváme blíže na části (1) a (2), které nám řeší otázku přidání nové fotografie. V první části zobrazíme uživateli formulář (s poli popis, datum, thumbnail a fotografie – podobně jak tomu bylo u zakládání nové kolekce). Tento formulář bude navíc obsahovat pole select, ve kterém bude umožněn výběr kolekce, do níž se má nová fotografie uložit. Vše názorně ukazuje obrázek:

Podívejme se na zdrojový kód části (1):

    print „<h2>Přidání fotografie</h2>“;
    print „<form action=\“manip.php\“ method=\“get\“>“;
    print „<input type=\“hidden\“ name=\“action\“ value=\“add\“>“;
    print „<input type=\“hidden\“ name=\“krok\“ value=\“1\“>“;
    print „<b>Popis:</b> <input type=\“text\“ name=\“popis\“ value=\“$popis\“ size=\“50\“ maxlength=\“80\“> „;
    print „<b>Datum:</b> (ve tvaru: <tt>rrrr-mm-dd</tt>) <input type=\“text\“ name=\“datum\“ value=\“$datum\“ size=\“12\“ maxlength=\“10\“><br>“;
    print „<b>Thumbnail: </b> (pouze název souboru) <input type=\“text\“ name=\“thumb\“ value=\“$thumb\“ size=\“10\“ maxlength=\“30\“> „;
    print „<b>Fotografie: </b> (pouze název souboru) <input type=\“text\“ name=\“photo\“ value=\“$photo\“ size=\“10\“ maxlength=\“30\“><br>“;
    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=\“Přidej\“>“;
    }
    else {
      print „<br><br><b>Nelze přidat žádnou fotografii, neboť ještě není založena žádná kolekce!</b><br>“;
    }
    mysql_close();
    print „</form>“;

Nejprve začneme vypisovat formulář. Pomocí prvků typu hidden zajistíme správné nastavení hodnot parametrů pro další volání skriptu (ve kterém se má fotografie uložit do databáze). Abychom zjistili všechny možné kolekce, které dáme uživateli na výběr, musíme přistoupit k databázi. Uvedeným příkazem SELECT získáme abecedně uspořádaný seznam názvů kolekcí (u každé z nich je ještě uvedeno období a rok).

Cyklem while zajistíme vygenerování všech položek formulářového prvku select. Poté ještě přidáme do formuláře prvek typu submit a formulář uzavřeme. Při generování seznamu kolekcí testujeme, zda je v databázi uložena alespoň jedna kolekce. V případě, že není, prvek typu submit nevypisujeme, místo něj se objeví jen hláška, že nelze přidat žádnou fotografii.

Uložení fotografie do databáze (2)

    print „<h2>Přidání fotografie</h2>“;
    mysql_connect(„localhost“, „login“, „heslo“);
    mysql_select_db(„album“);
    $result = mysql_query(„select POCET, ADRESAR from KOLEKCE where ID = $kolekce“);
    $ch = mysql_errno();
    if (!$ch) {
      list ($kpocet, $kadresar) = mysql_fetch_array ($result);
      $result2 = mysql_query(„select max(ID) as MAXIM from FOTKA“);
      list($newid) = mysql_fetch_array($result2);
      ++$newid; /* nove ID fotky */
      $soubor_thumb = $kadresar.“thumb/$thumb“;
      $soubor_photo = $kadresar.“big/$photo“;
      mysql_query(„insert into FOTKA values ($newid, $kolekce, ‚$popis‘, ‚$datum‘, ‚$soubor_thumb‘, ‚$soubor_photo‘)“);
      mysql_query(„update KOLEKCE set POCET = POCET + 1 where ID = $kolekce“);
      print „<b>Fotografie \“$popis\“ byla úspěšně přidána do kolekce.</b><br> Fotografii uložte do <tt>$soubor_photo</tt>, a thumbnail do <tt>$soubor_thumb</tt><br>“;
    } else {
      print „<font color=\“red\“>Při zjišťování údajů o kolekci došlo k chybě!</font><br>“;
    }
    mysql_close();

Při ukládání fotografie do databáze musíme pohlídat několik věcí. Zaprvé si musíme z databáze zjistit počet fotografií a adresář pro vybranou kolekci (její číslo se předává v parametru $kolekce). Poté musíme zjistit nové ID pro právě vkládanou fotografii (to máme nakonec uloženo v proměnné $newid).

Do proměnných $soubor_thumb a $soubor_photo zkonstruujeme správný řetězec, který bude obsahovat adresářovou cestu včetně zadaného názvu souborů. Potom novou fotografii vložíme do tabulky FOTKA. Následně zvýšíme počet fotografií v záznamu vybrané kolekce (příkaz UPDATE). Zde by správně měly být všechny testy na úspěšnost operace nad databází, ale z důvodu zpřehlednění jsem to zde (tak jako i jinde) vynechal. (Pozn. aut.: Testy na úspěšnost operací nad databází lze provádět pomocí funkcí mysql_errno() a mysql_error().)

Dnes vám skript manip.php ke stažení zatím nenabídnu, příště si jej totiž ještě rozšíříme o další podstatnou část, a to mazání fotografií z kolekce. Skript by mohl být dále rozšířen o úvodní kontrolu zadaných uživatelských dat, která by ovlivňovala další spouštění skriptu manip.php.

Žádný příspěvek v diskuzi

Odpovědět