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

> PHP (78) - Informační obsah portálu

Kterak je důležité míti Filipa...a testovací data pro vývoj webu v PHP.

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

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

Minule jsme rozebrali databázový návrh uspořádání alb a písní na našem hudebním webu. Dnes je tedy čas něco pořádného s tím udělat prakticky. Půjde o to, jak to celé zorganizovat a dovést ke zdárnému konci.

Ještě lehká úvaha

Ačkoli jsme úvahou strávili celý minulý díl, ještě jednu věc bychom si měli rozmyslet. Při zadávání a zobrazování koncertů jsme nejprve vyřešili zadávání dat a potom jejich zobrazování na webu. V případě diskografie to ale zkusíme opačně. Důvody jsou dva:

  1. Abych Vám ukázal, že to jde, jak se to od opačného postupu liší a na co dávat pozor
  2. Protože diskografie zpracovává tři tabulky najednou a zobrazení dat bude neskonale jednodušší než jejich zadávání

Tak či tak, pokud budeme chtít nejprve řešit zobrazování alb a písní, měli bychom si nachystat nějaký vzorek dat. Takže vymyslíme testovací data, naplníme je do databáze a pokusíme se je zobrazit.

Tvorba testovacích dat může být náročný oříšek, pokud nevíte, jak na to. Tady je několik podnětů:

  • Testovací data by měla být alespoň trochu podobná datům skutečným (objem, rozsahy, hodnoty)
  • Všechny nestadndardní situace by měly být zastoupeny (například, jedna píseň na více albech)
  • Do vzorku dat se rovněž můžete pokusit zanést chyby a sledovat, zda a jak na to aplikace bude reagovat.

My budeme brýt v úvahu především první dvě hlediska problému - a pořídíme si testovací data s několika alby a opakujícími se písněmi. Pokud byste to doma chtěli testovat na stejných datech jako já, zde najdete odpovídající příkaz pro MySQL pro tvorbu tabulek a dat.

Pozn.: Člověk je tvor líný a vymýšlet se mi to nechtělo. Půjčil jsem si tedy z http://music.clnet.cz/zalman/diskografie.htm diskografii existující skupiny.

Při přípravě testovacích dat obyčejně přijdete na nějaké věci, které by se měly v návrhu databáze upravit. Tak například já jsem přišel na to, že by bylo dobrá kontrolovat, zda jedna píseň není v tabulce písní zbytečně dvakrát, a pořídil jsem pro sloupec nazev v tabulce písní unikátní index.

Zobrazujeme diskografii

Při zobrazení diskografie bychom měli mít na paměti, že by měla jít zobrazit

  • buď alba, tedy jejich názvy, nebo
  • alba a na každém albu písně

Pokusíme se tedy diskografii podle toho navrhnout. Pokud by soubor diskografie.php zobrazoval pouze alba, mohl by fungovat nějak takto:

  $vysledek=mysql_query("select nazev from alba",$GLOBALS["link"]);
  if (
mysql_num_rows($vysledek)==0)
    echo
"--  Není vydáno žádné album --";
  else
  {
    echo
"<TABLE>";
    while (
$zaznam=MySQL_Fetch_Array($vysledek)):
      
?>
      <TR>
        <TD><?echo $zaznam["nazev"]?></TD>
      </TR>
      <?
    
endwhile;
    echo
"</TABLE>";
  }

Pokud by měl obsahovat alba a písně, můžeme to provést například tak, že vnoříme smyčku pro průchod písněmi do smyčky pro průchod alby. Celá taškařice pak může vypadat nějak takto:

  $vysledek=mysql_query("select id, nazev from alba",$GLOBALS["link"]);
  if (
mysql_num_rows($vysledek)==0)
    echo
"--  Není vydáno žádné album --";
  else
  {
    echo
"<TABLE>";
    while (
$zaznam=MySQL_Fetch_Array($vysledek)):
      
$album=$zaznam["id"];
      
?>
      <TR>
        <TD><B><?echo $zaznam["nazev"]?></B></TD>
      </TR>
      <?
      $vysledek2
=mysql_query("select nazev from pisne join obsahyalb on pisne.id = obsahyalb.pisen where obsahyalb.album=".$album,$GLOBALS["link"]);
        if (
mysql_num_rows($vysledek2)==0)
          echo
"--  Nejsou k dispozici písně na tomto albu --";
        else
        {
          while (
$zaznam2=MySQL_Fetch_Array($vysledek2)):
            
?>
            <TR>
              <TD><?echo $zaznam2["nazev"]?></TD>
            </TR>
            <?
          
endwhile;
        }
?>
      <?
    
endwhile;
    echo
"</TABLE>";
  }

Pozn.: Kdybych byl v zanořování kódu důsledný, vložím do jedné tabulky (s alby) jinou tabulku (s písněmi). Protože ale vnořené tabulky nemám rád, raději jsem pokračoval v kódu přidáním dalšího řádku do již existující tabulky. Pochopitelně, fantazii se meze nekladou.

Všimněte si toho vnořeného databázového dotazu. Je to poprvé, co jsme v seriálu použili dotaz obsahující klauzuli join, takže si to pojďme vysvětlit. Dotaz nyní vybírá data ze dvou tabulek (pisne a obsahyalb), přičemž tyto tabulky spojuje. To je v pořádku, protože nás nezajímají názvy všech písní, ale jen názvy písní z určitého alba. Tabulka písní však nemá o uspořádání alb ani ponětí, to znamená, že se musí spojit s tabulkou obsahyalb a danou informaci dohledat.

Napsat

select nazev from pisne join obsahyalb on pisne.id = obsahyalb.pisen where obsahyalb.album=1

je tedy úplně stejné jako napsat:

select nazev from pisne, obsahyalb where pisne.id=obsahyalb.pisen and obsahyalb.album=1

Spojení jsou ve světě relačních databází na denním pořádku, proto byste jim měli věnovat pozornost a dobře se je naučit, zejména pokud to s prací s daty myslíte vážně.

V dalším díle seriálu se zamyslíme na tím, jak elegantně ošetřit volbu zobrazení a budeme pokračovat dalšími úkoly.

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

kodovani 15.2.2011 22:26 Ondřej Černín




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

24.8.2016 6:44 /Ondřej Čečák
Poslední týden CFP LinuxDays 2016; pokud byste rádi přednášeli na LinuxDays 2016 8. a 9. října v Praze, můžete svůj příspěvek přihlásit, následovat bude veřejné hlasování.
Přidat komentář

9.8.2016 22:56 /Petr Ježek
Zařazení souborového systému reiser4 do jádra 4.7 znamená konečně konec patchování jádra jen kvůli možnosti použít reiser4.
Přidat komentář

12.7.2016 13:14 /František Kučera
Spolek OpenAlt zve na 130. distribuovaný sraz příznivců svobodného softwaru a otevřených technologií (hardware, 3D tisk, SDR, DIY, makers…), který se bude konat ve čtvrtek 21. července od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

11.7.2016 16:53 /Redakce Linuxsoft.cz
Konference LinuxDays hledá přednášející. Přihlášky poběží do konce prázdnin, v září bude hlasování a program. Více na https://www.linuxdays.cz/2016/cfp/.
Přidat komentář

8.5.2016 17:19 /Redakce Linuxsoft.cz
PR: Dne 26.5.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, cloudové služby, infrastruktura cloudu, efektivní využití cloudu, možné nástrahy cloudů a jak se jim vyhnout
Přidat komentář

21.4.2016 8:01 /František Kučera
Spolek OpenAlt zve na 127. distribuovaný sraz příznivců svobodného softwaru a otevřených technologií (hardware, 3D tisk, SDR, DIY, makers…), který se bude konat ve čtvrtek 28. dubna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

2.3.2016 22:41 /Ondřej Čečák
Letošní ročník konference InstallFest již tento víkend!
Přidat komentář

14.2.2016 16:39 /Redakce Linuxsoft.cz
O víkendu 5. a 6. března 2016 proběhne na pražském Strahově 8. ročník tradiční konference InstallFest. Celkem za dva dny uvidíte ​30 přednášek​ a ​6 workshopů.
Přidat komentář

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

> Poslední diskuze

12.8.2016 11:51 / Josef Zapletal
Jak udělat HTML/Javascript swiping gallery do mobilu?

8.8.2016 14:58 / Adams
fairies for hire

28.7.2016 15:51 / pepan
Re: NetBeans vs Eclipse

10.6.2016 21:10 / pavel riha
FreeBSD 10.3 a virtualizace

8.6.2016 21:56 / Milan Gallas
Nevalidní prefix m

Více ...

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