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

> PHP (61) - Rozsáhlejší projekty 2.

Jak se neztratit při vývoji rozsáhlejšího PHP projektu - databáze a fundované psaní kódu.

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

V předchozím díle našeho seriálu jsme nakousli téma vývoje rozsáhlejších projektů. Dnes budeme pokračovat; řekneme si něco o přípravě struktury databáze a o členění programu. Tyto věci je potřeba udělat již v poměrně rané fázi vývoje, abyste měli jasno, kam se bude Vaše aplikace ubírat.

Data a databáze

Pokud aplikace má (a ona má skoro vždycky) nějaký vztah k databázi, bývá dobrým zvykem navrhnout si, jak bude taková databáze vypadat. To je velmi důležitá část přípravy. Není nic horšího než dodělávání struktury databáze "za chodu", a to zejména mají-li se měnit relační vztahy mezi tabulkami. Obecné pravidlo, jak to udělat "napoprvé a dobře" pravděpodobně neexistuje. Ale jako příklad naznačíme, jak by se mohla ubírat naše představivost při sestavování (dejme tomu) protálu pro ON-LINE evidenci půjčování knížek z knihovny.

Pozn.: Musíte uznat, že to je daleko méně otřepaný příklad než ON-LINE obchod.

Důležité je si uvědomit, že každá tabulka by měla shromažďovat data o jedné "entitě". Tento hrozný výraz zkrátka znamená, že budeme mít tabulku "knih", tabulku "čtenářů" a tabulku "výpůjček". V MySQL by návrh mohl vypadat nějak takto:

CREATE TABLE ctenari (
  id int(11) NOT NULL auto_increment,
  prijmeni varchar(20) NOT NULL default '',
  jmeno varchar(10) default NULL,
  PRIMARY KEY  (id)
)

CREATE TABLE knihy (
  id int(11) NOT NULL auto_increment,
  nazev varchar(50) NOT NULL default '',
  popis varchar(255) default NULL,
  PRIMARY KEY  (id)
)

CREATE TABLE vypujcky (
  id int(11) NOT NULL auto_increment,
  ctenar int(11) NOT NULL ,
  kniha int(11) NOT NULL ,
  datum_od date NOT NULL ,
  PRIMARY KEY  (id)
)

Bude to stačit? V případě, že budeme půjčovat jen jednu knihu, zcela určitě to jako kostra stačit bude; pokud bychom najednou půjčovali více knih, stojí za zvážení zřízení další tabulky, aby se nám udaj "půjčeno od" neopakoval zbytečně v mnoha řádcích. Níže uveďme některé technické zásady, které byste měli mít při tvorbě tabulek k dispozici:

  • Ujasněte si, zda budete používat v názvech databázových objektů malá, velká písmena nebo jejich kombinace. V MySqL to totiž není jedno.
  • Zaveďte si nějakou metodiku pojmenování polí. Například já jsem použil "id" jako název klíče v každé tabulce. To Vám může a nemusí vyhovovat (někdo třeba používá "ctenari_id", "knihy_id" a podobně).
  • Je-li to jen trochu možné, používejte nějaké vizuální pomůcky pro návrh databáze
  • Navrhněte nejprve pole, sloužící jako primární a cizí klíče. Například, tabulka výpůjček bude jistě mít i pole datum_do, knihy mohou mít čárový kód a podobně. Nicméně, pro představu o vztazích mezi tabulkami stačí výše uvedená sktruktura.

Členění programu

Dobře napsanou funkci můžete použít vícekrát. A to i v mnoha projektech a v tom je kouzlo opakovaného používání kódu. Zvažme, například, následující kód pro ověření hesla, který bychom chěli využít v několika projektech:

<?      
function overheslo ($uzivatel, $heslo)
{
  
mysql_connect("localhost", "root", "");
  
mysql_select_db("lsoft");
  
$vysledek=mysql_query("select * from hesla where uzivatel=$uzivatel");
  
$radku=mysql_num_rows($vysledek);
  if (
$radku==0) return false;
  else
  {
    
$zaznam = MySQL_Fetch_Array($vysledek);
    if (
$zaznam["heslo"]==$heslo) return true; else return false;
  }
}
?>

Poctivě řečeno, tato funkce moc dobře napsána není. V reálné aplikaci by pravděpodobně stačilo použít existující připojení k databázi, spíše než uvnitř těla funkce vytvářet nové (důvodem je to, že pravděpodobně už nějaké to připojení k databázi bude existovat, nebo by zanedlouho stejně vzniklo). Další problém je logický - nejprve zjišťujeme zda existuje uživatel a potom, zda má správně heslo. To by se dalo spojit do jednoho kroku. Třetí důvod proč to nepůjde použít je ten, že k funkci není žádná dokumentace. Po úpravě by to mohlo vypadat mnohem nadějněji (třeba takto):

<?      
function overheslo ($link, $uzivatel, $heslo)
{
  
/*
    funkce ověří heslo proti datům v tabulce hesel
    vyžaduje:
    $link - existující spojení na databázi
    $uzivatel - id ověřovaného uživatele
    $heslo - nešifrovaná podoba hesla
    vrací:
    TRUE v případě, že daný uživatel má dané heslo,
    FALSE ve všech ostatních případech
  */
  
$vysledek=mysql_query("select * from hesla where uzivatel=$uzivatel and heslo='".$heslo."'", $link);
  return (boolean)
mysql_num_rows($vysledek);
}  
?>

Všimněte si (vím, že se opakuji), že kvalitní kód obsahuje komentáře. To proto, abyste se v něm vyznali, když jej budete za nějakou dobu chtít opravit - nebo znovupoužít. Toto téma je tak důležité, že mu věnujeme i část následujícího dílu.

Verze pro tisk

pridej.cz

 

DISKUZE

sql injection 27.10.2004 17:43 soso
L Re: sql injection 28.10.2004 09:58 Petr Zajíc
komentare 27.10.2004 17:51 soso
  L Re: komentare 28.10.2004 09:59 Petr Zajíc
    L Re: komentare 28.10.2004 10:55 soso
      L Re: komentare 28.10.2004 12:56 Petr Zajíc




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

18.6.2018 0:43 /František Kučera
Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.
Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

13.2.2018 0:41 /František Kučera
Únorový pražský sraz OpenAltu se koná 15. 2. 2018 a tentokrát se vydáme na návštěvu do jednoho pražského datacentra. Sejdeme se v 17:50 v severovýchodní části nástupiště tramvajové zastávky Koh-I-Noor. Po exkurzi se přesuneme do restaurace U Pštrosa (Moskevská 49), kde probereme tradiční témata (svobodný software a hardware, DIY, CNC, SDR, 3D tisk…) a tentokrát bude k vidění i IoT brána od The Things Network.
Přidat komentář

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

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

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