Fotoalbum v PHP – hledání fotografií

12. září 2002

Fotoalbum pro začátečníky dnes doplníme o jednoduché vyhledávání, které umožní spíše lepší orientaci mezi fotografiemi.

Vyhledávání

Na úvodní stránce (index.php) máme v horní liště vpravo zobrazeno malé formulářové pole pro zadání podřetězce k vyhledávání. Uživatel zadá nějaký řetězec a stiskne tlačítko Hledej. Tím se vyvolá skript search.php, který si na vstupu vezme předaný řetězec a provede vyhledání nad popisem všech fotografií. Nalezené fotografie zobrazí v přehledném seznamu. Vyhledávání bere ohled na diakritiku a nelze zatím kombinovat logické spojky apod.

Skript search.php

Kostra skriptu je celkem jednoduchá. Na vstup přijde řetězec od uživatele a hned se provede vyhledání a po té se všechny fotografie zobrazí. U každé fotografie bude její popis, datum a informace o dané kolekci, ve které se nalezená fotografie nachází. Fotografie budou seřazeny abecedně podle svého popisu. Skript uvedu po jednotlivých částech, které blíže okomentuji. Nejprve ale obrázek pro základní představu:

Po klepnutí na thumbnail a popis fotografie se zobrazí v novém okně velká fotografie. Po klepnutí na název se zobrazí obsah celé sekce (zavolá se skript show.php a předá se mu na vstup ID kolekce). Klepnete-li na rok, zobrazí se seznam všech alb vydaných v daném roce (volá se skript index.php s parametrem action=rok a v parametru year se předává konkrétní rok).

<html>
<head>
<title>Hledani fotografii</title>
</head>
<body>
<h1>Fotoalbum 1.0 – Hledání fotografií</h1>
<hr size=“1″ noshade>
<?
  mysql_connect(„localhost“, „login“, „heslo“);
  mysql_select_db(„album“);
  $dotaz = „select KOLEKCE.ID as KOL_ID, POPIS, THUMB, PHOTO, DATUM, NAZEV, ROK, DOBA from KOLEKCE, FOTKA where FOTKA.KOLEKCE_ID = KOLEKCE.ID and POPIS like ‚%$retezec%‘ order by POPIS“;
  $result = mysql_query($dotaz);
  $pocet = mysql_num_rows($result);
  $ch = mysql_errno();

V úvodní části položíme dotaz na seznam všech fotografií, které obsahují ve sloupci POPIS podřetězec, který uživatel zadal (to máme zajištěno konstrukcí POPIS like '%$retezec%' v SQL dotazu). Do proměnné $pocet si uložíme počet vrácených záznamů, a do proměnné $ch uložíme návratový kód z databáze.

  if (!$ch) {
    if ($pocet > 0) {
      print „<b>Nalezeno fotografií: </b> <tt>“.$pocet.“</tt><br>“;
      print ‚<table border=“0″ cellspacing=“0″ cellpadding=“3″>‘;
      while (list ($kol_id, $popis, $thumb, $photo, $datum, $nazev, $rok, $doba) = mysql_fetch_array($result)) {
        print „<tr><td valign=\“top\“><a href=\“photos/$photo\“ target=\“_blank\“><img src=\“photos/$thumb\“ border=\“0\“ alt=\“$popis ($datum)\“></a></td><td valign=\“top\“><a href=\“photos/$photo\“ target=\“_blank\“><b>$popis</b></a><br>[<a href=\“show.php?kolekce=$kol_id\“>$nazev</a> ($doba, <a href=\“index.php?action=rok&year=$rok\“>$rok</a>)]</td></tr>“;
      }
      print „</table>“;
    }
    else {
      print „<b>Nebyla nalezena žádná fotografie!</b><br>“;
    }
  }
  else {
    print ‚<font color=“red“>Při přístupu k databázi došlo k chybě!</font><br>‘;
  }
  mysql_close();
?>
<hr size=“1″ noshade>
<center><a href=“index.php“>Hlavní nabídka</a></center>
</body>
</html>

Pokud operace proběhla úspěšně (proměnná $ch je rovna nule), ověříme, zda byla nalezena alespoň jedna fotografie. Pokud ano, začneme s konstrukcí HTML tabulky, do které postupně všechny nalezené fotografie zařadíme. Cyklem while zajistíme, že se pro každou fotografii zjistí všechny potřebné údaje. Pro každou fotografii se pak vytiskne jeden řádek HTML tabulky: v první buňce <TD> zobrazíme thumbnail, ve druhé buňce pak zobrazíme popis, název kolekce, datum kolekce a rok. Popis, název a rok vytiskneme jako odkazy (s voláním příslušných skriptů, jak jsem uvedl výše).

Celý skript si můžete stáhnout. Uložte jej do hlavního adresáře \Album.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *