TOPlist
Fotoalbum v PHP – nová kolekce fotografií II

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.

Předchozí články:

Fotoalbum v PHP – Nová kolekce fotografií
Fotoalbum v PHP – Hlavní stránka
Fotoalbum v PHP, 1. díl



Jaromír Skřivan (2.7. 2002)




Vyhledávání

Rozšířené vyhledávání




Nejčtenější






Knižní tip



Zoner Callisto, tipy, efekty, kouzla

Zoner Callisto, tipy, efekty, kouzla



Diskuzní kotel






Hodnotilo: 645 čtenářů
Výsledek: 2,79


 Tisk
 Doporučit článek

Diskuze: Fotoalbum v PHP – nová kolekce fotografií II
02.07.2002, 07:41 Karel Balas Diky
02.07.2002, 14:49 Jaromir Skrivan ccDiky
02.07.2002, 11:51 The King Proč to dělat jednoduše když to jde slo...
02.07.2002, 14:47 Jaromir Skrivan ccProč to dělat jednoduše když to jde sl...
03.07.2002, 10:04 The King ccccProč to dělat jednoduše když to jde s...
06.07.2002, 00:54 Typek Podpis
Zobrazit všePřidat nový
Redakce Interval.cz |  Inzerce na Interval.cz |  Hledáme nové autory ISSN 1212-8651 
 © Zoner software, s.r.o., všechna práva vyhrazena, tento server dodržuje právní předpisy o ochraně osobních údajů.