LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> PHP (81) - Uživatel versus programátor

Při programování (nejen) v PHP by měl být na prvním místě VŽDY uživatel. Dnešní díl seriálu o tvorbě hudebního portálu je krásným příkladem.

20.12.2004 15:00 | Petr Zajíc | Články autora | přečteno 22386×

Komerční sdělení: Pořádáme Kurzy PHP

V předchozím díle jsme sestavili rozhraní pro zadávání alb a písní do databáze. Zkusme dnes toto rozhraní ještě nějak vylepšit.

Vylepšujeme rozhraní pro alba a písně

Naše "diskografické" rozhraní je již docela schopné. Připomeňme si, že pomocí šikovně rozstrkaných formulářů už umíme:

  • přidat píseň do seznamu písní
  • přidat album do seznamu alb
  • přidat píseň do alba
  • odebrat píseň z alba

Člověku by se mohlo zdát, že je prostředí téměř dokonalé. Zkusme ale chvíli uvažovat jako uživatel: Co bude pro administrátora webu zdaleka nejčastější důvod k návštěvě stránky zadejdiskografii.php? Bude to situace, kdy kapela vydá nové CD. Má v takovém případě nebohý administrátor snadný život? Vlastně moc ne. Takový člověk totiž musí k zadání dejme tomu deseti písní udělat následující věci:

  • Zadat album do seznamu alb
  • Zadat píseň č.1 do seznamu písní
  • ... atd až do písně č. 10
  • Přiřadit píseň č. 1 na album
  • ... atd až do písně č. 10

Bystrý počtář sečte, že administrátor musí odklepat 21 formulářů! A člověk ani nemusí být bystrý počtář, aby mu došlo, že administrátor takového webu bude už u několikátého formuláře programátora proklínat.

Tento rozbor měl objasnit jednu věc: To, že jsme splnili nějaký úkol ještě neznamená, že jsme jej splnili dobře! Pojďme se nyní podívat, jak to s pomocí pár triků celé zajistíme jedním (!) jediným formulářem. Ten formulář bude vypadat nějak takto:


Asi každému je jasné, že práci s jedním formulářem uvítá každý administrátor mnohem raději, než práci s jedenadvaceti formuláři. Jak ale celý výstup formuláře ošetřit skriptem? Skript bude muset provést následující věci:

  • Zjistit, zda album s daným názvem již neexistuje, pokud ano, upozornit na to.
  • Zadat album, zjistit si, jaké mu databáze přidělila číslo řádku v tabulce alb
  • Rozsekat seznam písní na jednotlivé písně
  • Zjistit, zda tyto písně v databázi již jsou nebo ne; pokud nejsou zapsat
  • Přiřadit písně na album

Realizace

Skript zadejdiskografii.php tedy dozná mohutných změn. Bude obsahovat čtvrtý formulář s jedním textovým polem pro zadání alba a s dalším, víceřádkovým textovým polem pro zadání seznamu písní oddělených koncem řádku. Rovněž část pro zpracování formuláře se nám poněkud zvětší. Bude obsahovat především příkaz pro rozdělení jednotlivých řádků do pole:

$pisne=explode("\r\n",$_POST["nazvynovychpisni"]);

a rovněž funkci pro kontrolu každé jedné písně na délku:

function pisneok ($pisne)
{
 
$problem="";
  foreach (
$pisne as $pisen)
  {
    if ((
strlen ($pisen)>50) | strlen ($pisen)<3) $problem.="Název písně musí mít 3-50 znaků ($pisen)<BR>\n";
  }
  echo
$problem;
  return (boolean)(
$problem==="");
}

Všimněte si, že tato funkce jednak vrací hodnotu TRUE nebo FALSE a jednak vypisuje hlášení. Někteří programátoři razí teorii, že funkce by měly pouze vracet hodnoty, zatímco příkazy echo by měly být umístěny spíše v těle skriptu. Něco na tom je, ale pro nás by to znamenalo vadnou píseň vypsat pomocí další funkce, což by bylo poměrně složité. Název "vadné" písně bychom ale přece jen vypisovat měli, protože jinak mezi několika či několika desítkami "dobrých" písní uživatel tu "špatnou" bude obtížně hledat.

Skript dále obsahuje kontrolu toho, zda jsme vůbec zadali nějaké písně, a to pomocí následujícího příkazu:

elseif ($_POST["nazvynovychpisni"]=="") echo "Musíte zadat nějaké písně";

Někoho by mohlo napadnout kontrolovat počet prvků pomocí funkce count() pole $pisne, ale to by nefungovalo. Důvodem je fakt, že funkce explode vrátí v případě, kdy "dělící" řetězec nebyl nalezen celý původní "dělený" řetězec. To platí i pro prázdný řetězec a počet prvků pole $pisne tak vždy bude nejméně jeden!

V další části skriptu se program pokusí přidat do databáze album (což může selhat) a pokud to neselže, zapamatuje si číslo alba pomocí funkce mysql_insert_id.

<?
  mysql_query
("insert into alba (nazev) values ('".$_POST["nazevnovehoalba"]."');", $GLOBALS["link"]);
  
$chyba = mysql_error($GLOBALS["link"]);
  if (
$chyba==='') $albumid=mysql_insert_id();
  else echo
"Album NEBYLO přidáno. Databáze vrátila chybu $chyba <BR>\n";
?>

Když i to skončí bez chyb, pustí se skript směle do zadávání písní. U každé písně může nastat jedna ze dvou situací:

  1. Píseň v databázi ještě není, a program ji tedy zadá a zjistí její číslo v tabulce písní
  2. Píseň v databázi již je, a program tedy zjistí její číslo v tabulce písní

A konečně, pomocí čísla alba a čísla písně se již může založit řádek v tabulce obsahyalb.

foreach ($pisne as $pisen)
{
  
$pisenid=pisenid($pisen);
  if (
$pisenid==0)
  {
    
mysql_query ("insert into pisne (nazev) values ('".$pisen."');", $GLOBALS["link"]);
    
$pisenid=mysql_insert_id();
  }
  
mysql_query ("insert into obsahyalb (album, pisen) values (".$albumid.",".$pisenid.");", $GLOBALS["link"]);      
}

Závěr

Vidíme, že uvažovat jako uživatel někdy znamená, že si programátor pořádně znepříjemní život. Nicméně, uživateli se taková aplikace bude lépe ovládat a proto si bude programátora považovat. Rovněž jsme viděli, že zadávat data do více tabulek znamená důsledněji kontrolovat mezivýsledky.

Náš skript zapisoval do více tabulek najednou. To je přesně akce, kdy bychom potřebovali jeden z následujících mechanizmů:

  • aby databáze uměla převzít název alba a názvy písní, celé si to odkontrolovat sama a uložit, co je potřeba
  • aby databáze měla možnost BUĎ to celé provést NEBO to celé neprovést, ale nic mezi tím

Tomu prvnímu se říká uložená procedura a MySQL je zatím bohužel neumí. Tomu druhému se říká transsakce a MySQL je bohužel opět neumí. V tomto bodě musíme dát za pravdu tvrzení, že například taková PostgreSQL by se s uvedenou úlohou vypořádala mnohem snadněji. O PostgreSQL píše na našem serveru MaReK Olšavský, takže se o tom můžete něco dozvědět.

Příště se dozvíme něco o tom, jak tento skript ještě lépe vylepšit a zabezpečit.

Změny na portálu

Na současný stav projektu se můžete na našem webu podívat nebo si jej můžete stáhnout.

Pozn.: Aby Vám stažená verze fungovala na lokálním stroji, upravte si hodnotu konstant SQL_HOST, SQL_USERNAME, SQL_PASSWORD a SQL_DBNAME. Případně si je můžete včlenit do konfiguračního souboru podobně, jako jsem to udělal v souboru func.php.

Verze pro tisk

pridej.cz

 

DISKUZE

vlozeni podle kapely 14.7.2009 13:13 Martinek




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

27.2.2017 22:12 /František Kučera
Pozvánka na 137. sraz OpenAlt – Praha: Tentokrát jsme si pro vás připravili neobvyklou akci. Ve středu 1.3. v 17:30 nás přivítá sdružení CZ.NIC ve svých prostorách v Milešovské ulici číslo 5 na Praze 3, kde si pro nás připravili krátkou prezentaci jejich činnosti. Následně navštívíme jejich datacentrum pod Žižkovskou věží. Provedou nás prostory, které jsou běžnému smrtelníkovi nedostupné!
Po ukončení prohlídky se všchni odebereme do hostince U vodoucha, Jagelonská 21, Praha 3 pochutnat si na některém z vybraných piv či dát si něco na zub. Rezervaci máme od 19:30, heslo je OpenAlt.
Ale pozor! Do prostor datového centra máme omezený přístup, dostane se tam pouze 10 lidí! Takže kdo přijde dříve, ten má přednost, a občanky s sebou! Kdo nebude chtít na prohlídku datového centra, může se pomalu přesunout do hostince U vodoucha a u nepřeberné nabídky piv počkat na ostatní.
Přidat komentář

18.1.2017 0:49 /František Kučera
Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

15.6.2017 9:34 / Ondřej Havlas
php,

10.6.2017 10:39 / Temple
sell home for cash

11.5.2017 23:32 / lelo
Re: Problém se správcem balíčků

11.5.2017 5:45 / davd mašek
Re: Problém se správcem balíčků

10.5.2017 22:54 / lelo
Re: Problém se správcem balíčků

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze