Dnes plynule navážu na předchozí díl a podíváme se na zbývající (nejdůležitější) část skriptu pro nahrání nové kolekce fotografií do databáze. Předtím se ještě zastavíme u kontroly uživatelských dat.

Kostra skriptu new.php

V tomto díle se budeme zabývat částmi (0) a (3). Pro připomenutí, základní kostra skriptu vypadá následovně:

<html>
<head>
<title>založení nové kolekce</title>
</head>
<body>
<h1>fotoalbum 1.0 – založení nové kolekce</h1>
<hr size=1 noshade>
<?
/* (0) kontrola uzivatelskych dat */
if (!$krok) {
/* (1) zadani uvodnich udaju o kolekci */
}
if ($krok==1) {
/* (2) druha cast zadani udaju o fotografiich */
}
if ($krok==2) {
/* (3) novou kolekci ulozime do databaze */
}
?>
</body>
</html>

Kontrola uživatelských dat (0)

Než všechno zapíšeme do databáze, potřebujeme mít jistotu, že uživatel vše správně vyplnil. Proto v této nulté části provedeme jednoduchou kontrolu, zda uživatel zadal alespoň ty hodnoty, které jsou povinné (název kolekce, rok…) Pokud se zjistí nějaká nesrovnalost, vypíše se na obrazovce upozornění a znovu se vyvolá původní formulář (hodnoty, které uživatel již zadal, se ve formuláři objeví jako předdefinované). Uživatel tedy opraví údaje a znovu je pošle skriptu na zpracování. Pokud nastane chyba v 1. části, pak přepíšeme proměnnou $krok na hodnotu 0, čímž zajistíme opět vyvolání formuláře z části 1, a nezobrazí se formulář z části 2. Kód pro kontrolu zadání názvu, roku a adresáře je celkem jednoduchý:

if ($krok) { /* skript neni volan poprve */
  if (!$nazev) {
    print „<font color=red>chyba: název kolekce nebyl zadán!</font><br>“;
    $krok=0; /* neprovede se krok 2, ale krok 1 */
  }
  if (!$adresar) {
    print „<font color=red>chyba: adresář nebyl zadán!</font><br>“;
    $krok=0;
  }
  if (!$rok) {
    print „<font color=red>chyba: rok nebyl zadán!</font><br>“;
    $krok=0;
  }
}

Uložení kolekce do databáze (3)

Ze všech částí skriptu new.php se dostáváme k té nejsložitější. Všechny údaje od uživatele již máme zadány. Údajů obecně může být velmi mnoho, proto také formulář pro předávání dat používá metodu post. Zdrojový kód této části neuvedu celý naráz, ale po jednotlivých částech. Ke každé části podám ještě bližší vysvětlení.

V této části opět provedeme dva kroky. Nejprve uložíme do databáze záznam o nové kolekci (naplníme tabulku kolekce) a poté zpracujeme seznam všech fotografií (tabulka fotka). Druhá část bude zcela jistě pracnější, podívejme se nejprve na tu jednoduší, první:

mysql_connect(„localhost“, „login“, „heslo“);
$result = mysql(„album“, „select max(id) as maxim from kolekce“);
$nid = mysql_result($result, 0, „maxim“);
++$nid; /* nove id kolekce */
$stranka = -1; if ($ano_cast == 1) {
 $stranka = $cast;
}
$command = „insert into kolekce values ($nid, ‚$nazev‘, $pocet, ‚$rok‘, ‚$obdobi‘, $stranka, ‚$adresar‘)“;
mysql(„album“, $command);
$ch = mysql_errno();
if (!$chyba) {
 print „základní údaje o kolekci byly zadány do databáze (id kolekce: $nid)<br>“;
} else {
 print „<font color=red>chyba: při vkládání základních údajů o kolekci došlo k chybě!</font><br>“;
 exit;
}
mysql_close();

Prvním voláním funkce mysql() zjistíme maximální id existující kolekce. Toto zjištěné číslo zvýšíme o jedničku a máme tak připraveno nové id pro novou kolekci (máme zaručeno, že bude jedinečné). Pokud uživatel zatrhl ve formuláři, že chce zobrazovat kolekci fotografií po částech, pak nastavíme proměnnou $stranka na zadanou hodnotu, jinak jí dáme -1. V tabulce kolekce pak atribut cast bude mít buď -1, nebo konkrétní číslo, které zadal uživatel. Potom vytvoříme příkaz na vložení nové kolekce do tabulky. Provedeme jej (voláním funkce mysql()) a ověříme, zda-li operace proběhla úspěšně, či nikoli. O výsledku informujeme uživatele na stránce.

Dalším kódem zpracujeme jednotlivé fotografie. Nejprve vypíšeme na stránku upozornění o tom, kam musíme uložit fyzické soubory s fotografiemi:

print „<br><b>uložení fotografií:</b><br>“;
print „velké fotografie uložte do adresáře <b><tt>album/photos/$adresar“.“big/</tt></b><br>“;
print „thumbnaily uložte do adresáře <b><tt>album/photos/$adresar“.“thumb/</tt></b><br><br>“;

Další kód budeme opakovat v cyklu for (pro každou fotografii provedeme totéž). Zjistíme nové id fotky (podobně, jak jsme zjišťovali nové id kolekce). Pokud fotografie nemá zadáno datum, pak jej nastavíme na hodnotu shodnou s předchozí fotografií. Tato rekurzivita nám zajistí, že všechny fotografie budou mít svoje datum. Poté sestrojíme název souboru včetně cesty, kde je uložen. Pokud se mají automaticky generovat názvy souborů (proměnná $generator=1), zkonstruujeme název podle čísla tak, aby nám zachoval počet znaků (například p0028.jpg). Máme-li u každé fotografie datum a přesný název souboru včetně cesty, můžeme sestrojit příkaz insert a fotografii uložit do databáze. Viz následující kód:

mysql_connect(„localhost“, „login“, „heslo“);
for ($i=1; $i<=$pocet; $i++) {
  $result = mysql(„album“, „select max(id) as maxim from fotka“);
  $fid = mysql_result($result, 0, „maxim“);
  ++$fid;
  /* neni-li definovano datum, vezmu z predchozi fotky */
  if (!$datum[$i]) {
    $datum[$i] = $datum[$i-1];
  }
  $pcislo = $adresar.’big/‘.$photo[$i];
  $tcislo = $adresar.’thumb/‘.$thumb[$i];
  if ($generator) {
    if ($i<=9) {
      $psoubor = ‚p000′.$i.‘.jpg‘;
      $tsoubor = ‚t000′.$i.‘.jpg‘;
    } else if ($i>=10 && $i<=99) {
      $psoubor = ‚p00′.$i.‘.jpg‘;
      $tsoubor = ‚t00′.$i.‘.jpg‘;
    } else {
      $psoubor = ‚p0′.$i.‘.jpg‘;
      $tsoubor = ‚t0′.$i.‘.jpg‘;
    }
    $pcislo = $adresar.’big/‘.$psoubor;
    $tcislo = $adresar.’thumb/‘.$tsoubor;
  }
  $command = „insert into fotka values ($fid, $nid, ‚$popis[$i]‘, ‚$datum[$i]‘,’$tcislo‘, ‚$pcislo‘)“;
  mysql(„album“, $command);
  $ch = mysql_errno();
  $t = mysql_error();
  if (!$ch) {
    print „fotografie č. $i \“$popis[$i]\“ byla úspěšně přidána<br>“;
  } else {
    print „<font color=red>při vkládání fotografie č. $i došlo k chybě</font> $t<br>“;
  }
}
mysql_close();

Skript new.php pro založení nové kolekce fotografií si po stažení uložte do adresáře \album\system.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

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

Odpovědět