Fotoalbum v PHP – nová kolekce
fotografií
Dnes vám předvedu skript, který bude zajišťovat
založení nové kolekce fotografií. Založení nové kolekce představuje zadání
základních údajů, jako je název, datum, počet fotografií a uvedení, ve
kterých souborech jsou fotografie uloženy.
Založení kolekce
Zavedení nové skupiny fotografií bude prováděno ve dvou krocích.
Nejprve se vyplní údaje jako je název kolekce, doba konání, rok a počet
fotografií. Také uvedeme, zda chceme kolekci fotografií zobrazovat naráz,
nebo po částech (v tom případě musíme zadat, po kolika fotografiích se
bude skupina zobrazovat). V druhém kroku pak zajistíme uložení všech
fotografií. Protože ve většině případů budou názvy fotografií utvořené
systematicky (například P0000.jpg až P0028.jpg),
ošetříme i hromadné zadávání názvů souborů, aby uživatel nemusel každý
soubor zadávat zvlášť.
Kostra skriptu new.php
Jak už jsem uvedl, novou kolekci do systému zadáme postupně ve dvou
krocích. To zajistíme pomocí parametru $krok. Pokud bude
hodnota $krok=0 (nebo nebude uvedena vůbec), znamená to, že
skript new.php spouštíme poprvé a uživatel tedy bude
vyplňovat první část údajů o nové kolekci fotek. Bude-li hodnota
$krok=1, pak skript vyzve uživatele k zadání údajů o
vlastních fotografiích (souborech). A jako poslední krok vše uložíme do
databáze ($krok=2).
<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>
| |
V dnešním díle proberu postupně část (1) a část (2). O kontrole
uživatelských dat (část 0) a vlastním uložení do databáze (část 3) se
dozvíte v pokračování.
Zadání úvodních údajů o kolekci (1)
V první části PHP kódem vygenerujeme formulář, pomocí kterého uživatel
zadá vše potřebné. Protože se může stát, že by uživatel nezadal všechno
správně (nějaká hodnota by chyběla), musíme ve formuláři ošetřit výchozí
hodnoty. To zajistíme tak, že v prvku formuláře vložíme atribut
VALUE, kterému nastavíme hodnotu proměnné, v níž může být
uložena hodnota z předchozího volání skriptu. Vše bude jasnější z obrázku
následovaného kódem:

print "<h2>A. Zadání
základních údajů</h2>"; print "<FORM
ACTION=\"new.php\" METHOD=\"post\">"; print "<INPUT
TYPE=hidden NAME=krok VALUE=1>"; print "<B>Název
kolekce: </B> (max. 80 znaků) <INPUT TYPE=text
NAME=nazev VALUE=\"$nazev\" SIZE=40
MAXLENGTH=80><BR>"; print "<B>Období:
</B> (např. <tt>17.9. až 25.10.</TT>, max.
40 znaků) <INPUT TYPE=text NAME=obdobi VALUE=\"$obdobi\"
SIZE=40 MAXLENGTH=40><BR>"; print "<B>Rok:
</B> (na 4 cifry, např. <TT>1998</TT>)
<INPUT TYPE=text NAME=rok VALUE=\"$rok\" SIZE=5
MAXLENGTH=4><BR>"; print "<B>Počet
fotografií v kolekci:</B> <INPUT TYPE=text NAME=pocet
VALUE=\"$pocet\" SIZE=5 MAXLENGTH=4><BR>"; print
"<INPUT TYPE=checkbox NAME=ano_cast VALUE=1>
<B>zobrazovat kolekci po částech</B>; pokud ano,
pak zobrazuj po <INPUT TYPE=text NAME=cast VALUE=\"$cast\"
SIZE=3 MAXLENGTH=2> fotografiích na
stránku<BR>"; print "<BR><B>Adresář, kde
budou uloženy fotografie:</B><BR>(relativně,
vzhledem k hlavnímu adresáři, na konci nezapomeň na lomítko /;
např.:
'<TT>2001/Korsika/</TT>')<BR>"; print
"<TT>Album/photos/</TT><INPUT TYPE=text
NAME=adresar VALUE=\"$adresar\" SIZE=60
MAXLENGTH=80><BR>"; print "<BR>Vše je
správně vyplněné, mohu pokračovat dál.<BR>"; print
"<INPUT TYPE=submit NAME=action
VALUE=\"Pokračuj\">"; print
"</FORM>";
| |
Zadání údajů o fotografiích (2)
Druhá část skriptu se bude opět skládat převážně z příkazů pro vypsání
formuláře na obrazovku prohlížeče. Kromě prvků formuláře bude vhodné
vypsat i jednoduchou nápovědu pro vyplnění všech políček formuláře. V
závěru formuláře uvedeme několik prvků HIDDEN, kterými si
uchováme zadané hodnoty z předchozího volání skriptu new.php.
Ukázku stránky zobrazuje následující obrázek:
Kód je následující:
print "<H2>B. Zadání
fotografií kolekce: $nazev ($rok)</H2>"; print
"<FORM ACTION=\"new.php\" METHOD=\"post\">"; print
"<INPUT TYPE=hidden NAME=krok VALUE=2>";
print
"<B>Hromadné zpracování fotek:
</B><BR>"; print "Bude-li vyplněno, použije se
automatické generování názvů jednotlivých fotografií (včetně
thumbnailu), není třeba pak vyplňovat u každé fotky zvlášť
jména souboru (thumbnailu i vlastní
fotografie).<BR><BR>";
print "<INPUT
TYPE=checkbox NAME=generator VALUE=1> Ano, chci použít
automatické názvy souborů thumbnailů i fotografií (posloupnost
typu <TT>t0001.jpg</tt> až
<tt>t0028.jpg</TT>; <TT>p0001.jpg</TT>
až <TT>p0028.jpg</TT>)<BR>";
print
"<BR><B>Fotografie:</B><BR>"; print
"Vyplňte popis pro každou fotografii, datum zadávejte ve tvaru
RRRR-MM-DD, např. 2001-04-26. Pokud všechny fotografie mají
datum společné, stačí vyplnit datum jen u první fotografie. K
ostatním fotografiím se datum zkopíruje to samé. (Takto lze
zadávat datum u částem: např. uvedeno datum u 1. fotky
2001-05-02 a u 10. fotky 2001-05-03, znamená, že 1. až 9.
fotografie má datum 2.5.2002 a 10. až poslední fotografie má
datum 3.5.2002)"; print "<BR>Kolonky thumbnail a
fotografie vyplňujte pouze v případě, že jste nezadal hromadné
generování názvu fotek. Případně zadávejte pouze název
souboru, bez cesty.<BR>";
print "<TABLE
BORDER=0>"; print
"<TR><TD>Číslo</TD><TD>Popis</TD><TD>Datum</TD> <TD>Thumbnail</TD><TD>Fotografie</TD></TR>"; for
($i=1; $i<=$pocet; $i++) { print
"<TR><TD><B>$i.</B></TD><TD><INPUT
TYPE=text NAME=popis[$i] VALUE=\"$popis[$i]\" SIZE=50
MAXLENGTH=80></TD> "; print
"<TD><INPUT TYPE=text NAME=datum[$i]
VALUE=\"$datum[$i]\" SIZE=12
MAXLENGTH=10></TD>"; print
"<TD><INPUT TYPE=text NAME=thumb[$i]
VALUE=\"$thumb[$i]\" SIZE=10
MAXLENGTH=30></TD>"; print
"<TD><INPUT TYPE=text NAME=photo[$i]
VALUE=\"$photo[$i]\" SIZE=10
MAXLENGTH=30></TD>"; print
"</TR>"; } print
"</TABLE>";
/*
zapamatujeme si predchozi vyplnene hodnoty uzivatelem
*/
print "<INPUT TYPE=hidden NAME=nazev
VALUE=\"$nazev\">"; print "<INPUT TYPE=hidden
NAME=obdobi VALUE=\"$obdobi\">";
print "<INPUT
TYPE=hidden NAME=rok VALUE=\"$rok\">"; print "<INPUT
TYPE=hidden NAME=pocet VALUE=\"$pocet\">"; print
"<INPUT TYPE=hidden NAME=cast
VALUE=\"$cast\">"; print "<INPUT TYPE=hidden
NAME=ano_cast VALUE=\$ano_cast\">"; print "<INPUT
TYPE=hidden NAME=adresar VALUE=\"$adresar\">";
print
"<INPUT TYPE=submit NAME=action
VALUE=\"Odeslat\">"; print
"</FORM>";
| |
Skript pro založení nové kolekce bude k dispozici v příštím
díle.