PHP (38) - Dolujeme data z MySQL
Jak vybrat data z MySQL a hotová aplikace na vyhledávání obcí dle PSČ
16.8.2004 15:00 |
Petr Zajíc
| Články autora
| přečteno 155515×
Jádrem každé databázové aplikace je čtení dat z databáze. My si dnes
ukážeme, jak číst data z MySQL pomocí PHP. A protože suché teorie je v
tomto seriálu až dost, bude to rovnou hotová aplikace na vyhledávání
obce pomocí PSČ.
SQL a výběrové dotazy
V MySQL, ostatně jako v každé jiné databázi obsahující jazyk SQL se
data z databáze vybírají pomocí příkazu SELECT. Je to příkaz nesmírně
mocný. Jeho nejjednodušší forma je:
SELECT * FROM [název
tabulky]
a dlužno dodat, že může být daleko složitější. Pokud chcete důkladně
postrašit, můžete se podívat na kompletní
formu tohoto příkazu do dokumentace.
Většinou se budeme snažit používat příkaz SELECT v co nejjednodušší
syntaxi, protože cílem našeho seriálu není naučit se SQL, nýbrž PHP.
Příkaz SELECT umí data nejen vybrat, ale umí je pro naše
pohodlí
rovněž například vyfiltrovat, seřadit nebo seskupit. V naprosté většině
skriptů
tedy budeme psát SELECT nějak takto:
SELECT [seznam polí]
FROM [název tabulky nebo tabulek]
WHERE [podmínka] GROUP BY [seskupení] ORDER BY [seřazení]
Příkaz SELECT patří přesně mezi ty věci, které se naučíte neustálým
používáním. Takže se pojďme rovnou podívat, jak se takový SELECT
zpracuje
prostředky jazyka PHP.
MySQL, SELECT a PHP
Možná budete mít pocit, že už jste to někde slyšeli, a bude to
pravda. Bylo to totiž řečeno v předchozím díle - PHP používá na
zadávání příkazu SELECT databázi svoji funkci mysql_query. Což je úplně
stejné, jako v případě příkazu CREATE TABLE. A jak uvidíme, podobné to
bude i s ostatními příkazy pro MySQL. S jedním podstatným rozdílem, a
to tím, že: V PŘÍPADĚ, ŽE mysql_query OBSAHUJE PŘÍKAZ SELECT, vrátí
databáze tzv. SADU ZÁZNAMŮ, kterou asi budeme chtít ZPRACOVAT.
Možná si z minula vzpomenete, že mysql_query vrací false v případě
neúspěchu. Teď to doplním - v případě, že mysql_query obsahuje příkaz
SELECT a nedojde k chybě, vrací mysql_query tzv. identifikátor
výsledku. A ten nám umožní výslednou sadu záznamů zpracovat pomocí PHP.
Příklad uvedu za chvíli.
Pozn.: Pokud mysql_query která má vrátit
nějaké záznamy z libovolného důvodu selže, vrátí samozřejmě také
hodnotu false.
Pozn. 2: Pokud je dotaz select
napsaný správně, ale vrátí nula záznamů, nepovažuje se to za chybu.
Asi bude nejlepší podívat se na nějaký příklad, a proto tady máme
Vyhledávání obcí pomocí PSČ
To může být zajímavé zpestření nějaké aplikace a navíc to je krásný
příklad na SELECT. Na stránkách
české pošty je k dispozici ke stažení datový soubor
obsahující názvy všech obcí v ČR a jejich PSČ. Tento soubor jsem si
stáhl, upravil
a nahrál do MySQL. To znamená, že v MySQL máme nyní tabulku, která se
jmenuje psc a obsahuje pole psc a obec. Čistě pro osvěžení paměti -
tabulka vznikla pomocí následujícího příkazu SQL:
create table psc (obec
varchar (60), psc int)
Pozn.: Tohle sem striktně vzato nepatří,
ale asi se budete ptát, jak
jsem tam ta data dostal. Bylo to takhle:
- Stáhl jsem si soubor ze stránek české pošty a zjistil jsem, že je
ve formátu dbf.
- Otevřel jsem si jej v OpenOffice a uložil jako prostý text
oddělený středníky.
- Vzniklý textový soubor jsem uploadoval na server, na němž běží
MySQL.
- Spustil jsem SQL příkaz LOAD DATA
INFILE, který textový soubor uložil do tabulky. Ještě o něm bude v
našem seriálu řeč.
Celá aplikace bude obsahovat formulář pro zadání PSČ a po jeho
odeslání bude
vypisovat obec, která dané PSČ má. Pozor, jedno PSČ může mít více obcí,
takže s tím budeme počítat. Tady je kód:
<?
$BudemeZobrazovat=true;
if (!empty($_POST)) // tak už se
odesílalo a musíme kontolovat
{
if (strlen($_POST["psc"])<>5 || !is_numeric($_POST["psc"]))
{
//
kontrolou jsme neprošli
echo "PSČ musí být pětimístné číslo";
}
else
{
//
kontolou jsme prošli
$BudemeZobrazovat=false;
// zde
je include souboru s konstantami
mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD);
mysql_select_db(SQL_DBNAME);
$vysledek=mysql_query("select * from psc where
psc=".$_POST["psc"]);
$radku=mysql_num_rows($vysledek);
if ($radku==0) echo "PSČ ".$_POST["psc"]." nemá, bohužel, žádná
obec";
else
{
echo "PSČ
".$_POST["psc"]." má následujících
$radku obcí:<BR>";
while ($zaznam=MySQL_Fetch_Array($vysledek)):
echo $zaznam["obec"]."<BR>\n";
endwhile;
};
}
}
if ($BudemeZobrazovat):?>
<form method="post" action="<?echo $_SERVER["PHP_SELF"]?>">
PSČ: <input name="psc" value="<?echo $_POST["psc"]?>">
<input type="Submit"
name="odesli">
</form>
<?endif;?>
Ukázat
skript | Spustit
skript
Z věcí, které nás zajímají v souvislosti s MySQL, si všimněte
zejména řádku s mysql_query. Její výsledek je vrácen do proměnné
$vysledek, která zjednodušeně řečeno zastupuje výslednou sadu záznamů.
A máme tu dvě funkce, které jsou pro nás nové:
mysql_num_rows
Vrací počet řádků ve výsledné sadě záznamů. To se nám hodí, protože tím
pádem budeme moci ošetřit situaci, kdy není vrácen žádný záznam a
zařídit se podle toho.
mysql_fetch_array
Je poměrně často používaná funkce, která vrátí obsah jednoho řádku z
výsledné sady záznamů jakožto asociativní
pole. Když se zavolá opakovaně, vrátí další řádek sady. Jestliže
řádky došly, vrátí false. Je tedy velmi jednoduché procházet sadou
pomocí konstrukce while.
Pozn.: Pokud Vám není jasné, proč
je formulář ve skriptu až na konci, podívejte se na díl seriálu o ověřování
dat z formulářů. Protože to je
důležité, dodám, že při podobné struktuře programu je ověřování dat z
formulářů nezbytné. Kdybychom totiž proměnnou $_POST["psc"]
neověřovali, může nám nějaký škodolibý návštěvník našich stránek do
formuláře podstrčit něco, co MySQL pochopí jako jiný příkaz jazyka.
Tento druh útoku se nazývá SQL injection.
Jak vidíme, je tedy poměrně snadné vybrat z databáze nějaké řádky.
Příště si ukážeme na dvě úlohy, které s příkazem SELECT a PHP úzce
souvisí - bude řeč o tom, jak prezentovat data ze sad záznamů
prostřednictvím HTML tabulek a jak dlouhé sady záznamů stránkovat.
Verze pro tisk
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|