- Základní údaje
- Kategorie: PHP
- Zobrazení: 517
Pole si můžeme představit jako množinu dat, které vzájemně nějak souvisí. Například abeceda, skupina čísel, názvy ovoce, skupina žáků ve třídě apod. Jedná se o prostředek pro hromadné zpracování dat. Jinak řečeno, pole je místem, do kterého můžeme uskladnit libovolné množství dat. A to do slova. Tedy velikost pole je závislá pouze na velikosti dostupných prostředků počítače (velikost paměti, databáze...). Vytváření pole Pole se vytváří za pomoci konstrukce array. Příklad:
<?php
$cisla = array(1,2,3);
// Vytvoření pole, do kterého budou uložena tři čísla: jednička, dvojka a trojka.
var_dump($cisla);
// Vypsání celého pole. Výpis bude vypadat takto: // array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
?>
V poli můžeme používat i různé kombinace datových typů, např. místo dvojky můžete vložit text „dvojka“ (vyzkoušejte si to). Práce se záznamy v poli Se záznamy v poli se dá různě pracovat. 1. Sečtení počtu záznamů v poli Pro sečtení celkového počtu záznamů v poli existuje jednoduchá funkce count. Příklad:
<?php
$pole = array(10,20,30,40);
// Vytvoření pole, do kterého budou uložena čtyři čísla
$pocet = count($pole);
// Funkce count zde zjišťuje počet údajů v poli $pole. Protože pole $pole obsahuje čtyři údaje, funkce count vrátí čtyřku. Proměnná $pocet tedy bude obsahovat čtyřku.
echo $pocet;
// Vypíše: 4
?>
Tato funkce se velmi často používá. Příklad – vypsání celkového počtu záznamů v návštěvní knize, celkový počet záznamů ve fotogalerii apod. 2. Hledání v poli
Aby bylo možné se záznamy v poli pracovat, je nutné, aby byl každý záznam nějak identifikovatelný (každý záznam má své pojmenování). To se děje vlastně automaticky a to tak, že každý ze záznamů má podle toho jak byl do pole uložen své pořadí. V PHP tomu říkáme index. Pořadí či index je v PHP (ale i v jiných prog. jazycích) počítáno od nuly. Tedy první záznam má index nula druhý jedna, třetí dva atd... Příklad:
$pole = array(10,20,30,40);
//desítka má index nula, dvacítka má index jedna, třicítka má index dva…
Pro práci s indexi používá PHP hranatých závorek. Např. – [2] (klávesová zkratka pravý Alt+F a G)
Příklad:
<?php
$pole = array(10,20,30,40);
// Vytvoření pole, do kterého budou uložena čtyři čísla
var_dump($pole[1]);
// Vypíše: int(20),
?>
3. Změny záznamů v poli Velmi jednoduchým způsobem můžeme také jednotlivé záznamy v poli měnit. Příklad:
<?php
$pole = array(1,2,3,4,5);
// Vytvoření pole, ve kterém bude uloženo pět čísel. Jednička má index nula, dvojka má index jedna, trojka má index dva, čtyřka mí index tři a pětka má index čtyři.
var_dump($pole);
// Vypíše celé array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
echo '<br>';
//další záznamy budou na novém řádku
$pole[3] = 10;
// Změna prvku v poli, který má index tři. Na tomto indexu byla původně čtyřka, teď jsme tam uložili namísto ní desítku. Pole teď vlastně obsahuje čísla: 1,2,3,10,5.
var_dump($pole);
// Vypíše array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(10) [4]=> int(5) }
?>
4. Přidávání nových prvků do pole Pokud do pole potřebujeme přidat nový záznam, máme k dispozici dva způsoby – přidání nového záznamu automaticky, tedy na konec pole nebo tak, že rovnou napíšeme, jáký index záznamu dáváme. Příklad, kdy vytváříme nový index 2 a do něj vkládáme hodnotu 30:
<?php
$pole = array(1 => 20, 3 => 40, 6 => 70);
// Vytvoření pole, ve kterém budou uložena tři čísla
echo $pole[1];
// Vypíše: 20, protože index 1 má číslo 20
$pole [2] = 30;
// Vytvoření záznamu s indexem 2 a vložení čísla 30 do tohoto indexu
var_dump ($pole);
// Vypíše: 20array(4) { [1]=> int(20) [3]=> int(40) [6]=> int(70) [2]=> int(30) }
?>
Všimněte si, že nový záznam je vypsán až jako poslední i když to neodpovídá číselné posloupnosti. Druhým způsobem je vkládání nového záznamu bez udání indexu. Stačí vložit jen prázdné hranaté závorky:
<?php
$pole = array(1 => 20, 3 => 40, 6 => 70);
// Vytvoření pole, ve kterém budou uložena tři čísla
echo $pole[1];
// Vypíše: 20, protože index 1 má číslo 20
$pole [] = 30;
// Vytvoření záznamu s indexem 7 a vložení čísla 30 do tohoto indexu
var_dump ($pole);
// Vypíše: 20array(4) { [1]=> int(20) [3]=> int(40) [6]=> int(70) [7]=> int(30) }
?>
V tomto případě se PHP podívá na největší existující index a nově vkládanému přiřadí index o číslo větší. Tedy v tomto případě 7. 5. Ovlivňování indexů Indexy v poli můžeme i my sami ovlivnit a to zápisem: index => hodnota PHP neklade žádná omezení, indexy můžete tvořit i napřeskáčku. Např.:
<?php
$pole = array(7 => 20, 6 => 30);
// Vytvoření pole, ve kterém budou uložena dvě čísla, a to dvacítka a třicítka.
// Index 5 má dvacítka a index 6 má třicítka.
echo $pole[6];
// Vypíše: 30
?>
6. Řetězce jako indexy Indexy můžeme mít i v podobě textových řetězců. Příklad:
<?php
$pole = array('jednička' => 1, 'dvojka' => 2);
// Vytvoření pole, ve kterém budou uložena dvě čísla, a to jednička a dvojka.
// Index 'jednička' má uloženo číslo 1 a index 'dvojka' má uloženo číslo 2.
echo $pole['jednička'];
// Vypíše: 1
?>
Mezi indexem pro který je použito celé číslo a indexem, pro nějž je použit řetězec není v principu (z hlediska práce s ním) žádný rozdíl. 7. Procházení polí Pro procházení polí se používá většinou funkce foreach. Existují ještě jiné funkce, ale ty se používají jen velmi zřídka (např. next() a prev()). Funkce (nebo také konstrukce) foreach je vlastně cyklus, který prochází všemi prvky pole a pro každý z nich provede nějakou činnost. Např. jej vypíše. Zjednodušeně to vypadá takto:
foreach (pole as proměnná_pro_každý_prvek_pole)
příkaz_který_se_provede_pro_každý_prvek_pole;
Ve skutečnosti to vypadá následovně:
<?php
$pole = array(1,2,3);
// Vytvoření pole, které obsahuje tři čísla.
foreach ($pole as $hodnota)
echo 'Nalezen prvek s hodnotou: ',$hodnota,'<br>';
// Konstrukce foreach, která prochází pole $pole a hodnotu každého prvku tohoto pole vypíše.
?>
Této konstrukci říkáme procházení bez indexu. Další variantou je procházení s indexem. Ke stávajícímu příkladu vlastně jen přidáme požadavek na výpis indexu:
<?php
$pole = array(1,2,3);
// Vytvoření pole, které obsahuje tři čísla.
foreach ($pole as $index => $hodnota)
echo 'Nalezen prvek s indexem: ',$index,', hodnota: ',$hodnota,'<br>';
// konstrukce foreach, která prochází pole $pole a vypíše jak index daného prvku, tak jeho hodnotu
?>
Pozn.: proměnná $index může mít jakýkoliv název, tedy ne zrovna „index“. To stejné platí pro proměnnou „hodnota“. 8. Prověření existence pole Abychom zjistili, jestli v nějakém poli existuje určitý prvek, použijeme funkci in_array(). Příklad:
<?php
$jmena = array("Petr", "Jan", "Gustav", "Pavel");
if (in_array("Jan", $jmena))
{
echo "Jan je mezi jmény";
}
else
{
echo "Jan mezi jmény není";
}
?>
9. Přidání a odebrání prvku pole Přidání na začátek pole Jak je popsáno výše, pokud přidáme do pole nový prvek, vždy se zařadí na konec - tedy zařadí se jako poslední. Pokud ale chceme, aby se zařadil jako první, můžeme k tomu využít funkci array_unshift(). Příklad:
<?php
$jmena = array("Adam","Bára","Tomas");
echo ($jmena[0]." ".$jmena[1]." ".$jmena[2]);
echo "<br>";
array_unshift($jmena,"Karel");
echo ($jmena[0]." ".$jmena[1]." ".$jmena[2]);
?>
V tomto příkladu vidíte, že na počátku má pozici 0 v poli jméno Adam. Po přidání nového jména Karel se toto jméno zařadí funkcí array_unshift na začátek, tedy místo jména Adam. Ostatní prvky pole se posunou. Odebrání prvního prvku pole Pokud použijeme funkci array_shift, pak se naopak první prvek v poli smaže a ostatní prvky pole se posunou o pozici vpřed:
<?php
$jmena = array("Adam","Bára","Tomas");
echo ($jmena[0]." ".$jmena[1]." ".$jmena[2]);
echo "<br>";
array_shift($jmena);
echo ($jmena[0]." ".$jmena[1]);
//pozice 2 není vypsána, protože neexistuje a skript by vypsal chybu
?>
Přidání na konec pole Velmi podobně se používá funkce array_push:
<?php
$jmena = array(1 => "Adam", 3 => "Dan", 6 => "Karel");
print_r($jmena);
echo "<br>";
array_push($jmena,"Hana");
print_r($jmena);
?>
Odebrání prvku z konce pole Pokud potřebujeme odebrat poslední prvek pole, použijeme funkci array_pop:
<?php
$jmena = array(1 => "Adam", 3 => "Dan", 6 => "Karel");
print_r($jmena);
echo "<br>";
array_pop($jmena);
print_r($jmena);
?>
10. Přidání a odebrání více prvků pole Rozšíření pole Pomocí funkce array_pad můžeme prvky pole rozšířit jak na začátku (záporné hodnoty), tak na konci (kladné hodnoty). Tato funkce má však 3 parametry. Syntaxe funkce:
array_pad(pole, množství, prvky)
Jako množství se udává celkový počet prvků, které bude pole tvořit po přidání. Parametr prvky je hodnota, která bude do celkového počtu vytvořena na zbývajících indexech pole. Příklad:
<?php
$jmena=array("Adam","Dan","Karel");
print_r(array_pad($jmena,6,"Vaclav"));
?>
Výsledkem bude, že celkový počet prvků v poli bude 6 a poslední 3 budou mít stejnou hodnotu - Václav. Načtení prvků Hromadně můžeme načíst prvky pole za pomoci funkce array_slice. Tato funkce má 4 parametry:
array_slice(pole, pozice, délka, zachování indexů)
Pozice znamená číslo indexu, od kterého se mají začít načítat hodnoty prvků. Délka je nepovinný údaj. Pokud se uvede, znamená to počet indexů, které se mají od pozice načíst. V případě, že není uvedena, načtou se všechny prvky až do konce. Zachování indexů je parametr, který má dvě hodnoty - false nebo true. Pokud použijeme ano, tedy true, zachovají se původní hodnoty indexů daných prvků. Hodnota false je defaultní a je zbytečné ji udávat. Znamená to tedy, že nově vytvořený seznam prvků má novou (svoji) indexaci:
<?php
$jmena=array("Adam","Dan","Karel","Bára","Josef", "Tomáš");
print_r(array_slice($jmena,2,2));
//načetli jsme prvky od pozice 2 v počtu 2. Indexy jsou vytvořeny znovu.
echo "<br>";
print_r(array_slice($jmena,2,2,true));
//načetli jsme prvky od pozice 2 v počtu 2. Indexy se zachovaly z původního číslování pole.
?>
Nahrazení prvků Pro nahrazování prvků pole se používá funkce array_splice. Základní syntaxe:
array_splice(pole, pozice, délka, nahrazující prvek)
Nahrazení je provedeno tak, že se od pozice XY (parametr pozice - např. od pozice 2) v délce XY (délka je počet indexů - např. 3) nahradí prvky původního pole nahrazujícími prvky (většinou definované v proměnné).
<?php
$jmena=array("Adam","Dan","Karel","Bára","Josef", "Tomáš");
print_r($jmena);
echo "<br>";
$jmena2=array("David","Petr","Jan");
array_splice($jmena,2,3,$jmena2);
//Jména Karel a Bára budou nahrazeny novými jmény David, Petr a Jan
//Jedná se o pozice od č.2 v počtu 3. Nová jména jsou načítána z proměnné jmena2
print_r($jmena);
?>
Odstranění prvků Odstranění prvků se provede stejnou funkcí, jen vynecháme nahrazující prvek:
<?php
$jmena=array("Adam","Dan","Karel","Bára","Josef", "Tomáš");
print_r($jmena);
echo "<br>";
print_r(array_splice($jmena,2,3));
echo "<br>Výsledek po odstranění: ";
print_r($jmena);
?>
V tomto případě budou od pozice 2 (včetně) odstraněny 3 prvky. Zbytek zůstává beze změn, jen zachované prvky změní svůj index (v příkladu dostane jméno Tomáš nově index č. 2). Převedení pojmenovaných indexů na číselné Pokud máme pole, kde máme jednotlivé indexy pojmenované (asociativní pole), můžeme si je jednoduše převést na defaultní - číselné hodnoty funkcí array_values:
<?php
$seznam=array("Jméno"=>"Petr","Věk"=>"41","Bydliště"=>"Znojmo");
print_r(array_values($seznam));
//Výsledek - Array ( [0] => Petr [1] => 41 [2] => Znojmo )
?>
Převedení pojmenování indexů na jednotlivé prvky Pokud jsou jednotlivé indexy pojmenované a tyto názvy potřebujeme dostat do pole jako jednotlivé prvky, použijeme funkci array_keys:
<?php
$auta=array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander");
print_r(array_keys($auta));
//Výsledkem je Array ( [0] => Volvo [1] => BMW [2] => Toyota )
?>
Tato funkce má ještě další dva volitelné parametry - hodnota (value) a kontrola typu (strict). První příklad ukazuje hledání hodnoty indexu čísla "15" bez kontroly typu:
<?php
$cisla=array(15,25,35,45,"15");
print_r(array_keys($cisla,"15"));
//Výsledek je Array ( [0] => 0 [1] => 4 )
//Skript našel číslo 15 na pozici 0 a na pozici 4
?>
Druhý příklad ukazuje hledání hodnoty indexu čísla "15" s kontrolou datového typu. A protože hledaný výraz "15", tedy číslo, uvedené v uvozovkách není číslem, ale textovým řetězcem, není nalezeno na pozici 0, ale jen na pozici 4:
<?php
$cisla=array(15,25,35,45,"15");
print_r(array_keys($cisla,"15",true));
//Výsledek je Array ( [0] => 4 )
//Skript našel výraz "15" pouze na pozici 4. Nově má index 0
?>
Záměna hodnot a indexů Funkcí array_flip zaměníme hodnoty prvků a indexy:
<?php
$pole1=array("a"=>"červená","b"=>"zelená","c"=>"modrá","d"=>"žlutá");
$zmena=array_flip($pole1);
print_r($zmena);
//Výsledek - Array ( [červená] => a [zelená] => b [modrá] => c [žlutá] => d )
?>
Obrácené pořadí prvků Funkce array_reverse slouží k obrácení pořadí prvků v poli:
<?php
$auta=array("a"=>"Volvo","b"=>"BMW","c"=>"Toyota");
print_r(array_reverse($auta));
//Výsledek - Array ( [c] => Toyota [b] => BMW [a] => Volvo )
?>
Sdružení (sloučení) polí Na sloučení polí používáme funkci array_merge. Pozor u asociativních (pojmenovaných) indexů - zde mohou nastat chyby.
<?php
$pole1=array("červená","zelená");
$pole2=array("modrá","žlutá");
print_r(array_merge($pole1,$pole2));
//Výsledek - Array ( [0] => červená [1] => zelená [2] => modrá [3] => žlutá )
?>
PHP disponuje mnoha dalšími funkcemi na práci v poli. Další informace o polích v PHP najdete např. na webu itnetwork.cz nebo např. na w3schools.com
- Základní údaje
- Kategorie: PHP
- Zobrazení: 779
Funkce v PHP dělíme na dvě základní skupiny – vestavěné a uživatelské.
Vestavěné funkce
Samotné PHP obsahuje doslova tisíce funkcí, které můžete libovolně používat ve svých skriptech. Těmto tedy říkáme vestavěné funkce. Jedním ze základních příkladů je funkce phpinfo:
<?php
phpinfo();
?>
Tato vestavěná funkce nám například vypíše kompletní informace o PHP serveru. Funkci můžeme přidat také určité parametry. Ty jsou umístěny v závorkách za názvem funkce. Příklad:
<?php
print('ahoj');
// V tomto případě pouze vypíše ahoj.
?>
Dále může funkce tzv. něco vracet (například vypisovat).
<?php
$cislo = pi();
// Proměnná $cislo bude obsahovat číslo pí
echo $cislo;
// Výpis čísla pí
echo '<br />';
// Zařídí, aby se další vypsalo na nový řádek
echo pi();
// Číslo pí je možné také vypsat přímo
?>
Nebo příklad z funkcí max:
<?php
$cislo = max(4,1);
// Proměnná $cislo bude obsahovat největší číslo z čísel 4 a 1.
echo $cislo;
// Výpis hodnoty proměnné $cislo
echo '<br>';
// Zařídí, aby se další číslo vypsalo na nový řádek. I tuto funkci můžeme vypsat takto:
echo max(4,1);
// Vypíše největší číslo z čísel 4 a 1
?>
Příklad využití vestavěné funkce náhodného čísla - mt_rand (elektronická verze házecí kostky) Funkce mt_rand vrací náhodné číslo. Má 2 parametry, a to minimální a maximální číslo z rozsahu, který má vrátit. V tomto případě 1 až 6.
<?php
$nahodne_cislo = mt_rand(1,6);
switch ($nahodne_cislo) {
case '1':
echo 'Padlo číslo 1';
break;
case '2':
echo 'Padlo číslo 2';
break;
case '3':
echo 'Padlo číslo 3';
break;
case '4':
echo 'Padlo číslo 4';
break;
case '5':
echo 'Padlo číslo 5';
break;
case '6':
echo 'Padlo číslo 6';
break;
}
?>
Seznam všech vestavěných funkcí PHP lze najít v oficiálním manuálu PHP - http://php.net nebo např zde - http://php.baraja.cz/
Uživatelské funkce
Pro vytváření uživatelských neboli vlastních funkcí se používá klíčové slovo funkcion. Za klíčovým slovem funkcion následuje název (jméno) funkce, které si sami zvolíme. Zjednodušeně to vypadá následovně:
<?php
function jmeno_funkce()
{
telo_funkce;
}
?>
Nyní si zkusíme konkrétní jednoduchý příklad, kde se pouze vypíše pozdrav Ahoj:
<?php
function vypis()
// Zde jsme vytvořili funkci s názvem vypis. Dále následuje její tělo. V tomto případě je to pouze příkaz k vypsání slova Ahoj
{
echo 'Ahoj';
}
vypis();
// Zde voláme funkci s názvem vypis. V tomto případě provede vypsání slova Ahoj.
?>
Uživatelské funkce s parametry
Další příklad ukazuje složitější funkci s parametry:
<?php
// Deklarace a definice funkce:
function TretiMocnina($Cislo)
{
$Vysledek = $Cislo * $Cislo * $Cislo;
return $Vysledek;
}
// Volání funkce TretiMocnina():
echo TretiMocnina(5); // Vypíše: 125
?>
Nejprve je vytvořena funkce s názvem TretiMocnina. Ta obsahuje parametr, který v tomto případě tvoří novou proměnnou s názvem $Cislo. V tělu funkce následuje operace, kdy vytvoříme novou proměnnou s názvem $Vysledek. Tomu je přiřazena operace, která násobí třikrát za sebou proměnnou $Cislo (protože chceme tvořit třetí mocninu, což je trojnásobek). Na dalším řádku máme slůvko returt což je příkaz, který nám vrací hodnotu proměnné $Vysledek. Následuje příkaz echo, který vypíše hodnotu proměnné TretiMocnina s parametrem 5. Neboli do proměnné $Cislo dosadíme tímto číslo 5, které se následně třikrát po sobě vynásobí a vytvoří tedy třetí mocninu. Další příklad ukazuje, že funkci můžeme ve skriptu použít, kolikrát chceme. Což se velmi často používá:
<?php
// Deklarace a definice funkce:
function TretiMocnina($Cislo)
{
$Vysledek = $Cislo * $Cislo * $Cislo;
return $Vysledek;
}
// Volání funkce TretiMocnina():
echo TretiMocnina(5); // Vypíše: 125
?>
Další ukázka uživatelské funkce (zdroj http://php.vrana.cz):
<?php
// Vrácení českého názvu měsíce
function cesky_mesic($mesic) {
static $nazvy = array(1 => 'leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec');
return $nazvy[$mesic];
}
echo cesky_mesic(date("n")) . "\n";
// Vrácení českého názvu dne v týdnu
function cesky_den($den) {
static $nazvy = array('neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota');
return $nazvy[$den];
}
echo cesky_den(date("w")) . "\n";
?>
Pozn.: znaky \n se v PHP používají pro odřádkování v kódu. Nikoliv ve webové stránce! Pro tu se musí použít klasické <br>
Globální a lokální proměnné
Jakákoliv proměnná, která je použita mimo jakoukoliv funkci, se v PHP nazývá globální proměnná. Zato ta, která je použita uvnitř funkce se nazývá lokální proměnná. Tyto proměnné se navzájem nijak nemíchají a jsou jakoby oddělené. Příklad:
<?php
$x = 4;
// Globální proměnná $x nastavena na 4.
function vypis_x()
{
echo $x;
// Tohle je pokus o výpis lokální proměnné $x.
}
echo vypis_x();
?>
Po spuštění dostanete asi toto chybové hlášení: Notice: Undefined variable: x in C:\wamp\www\index.php on line 7 Jde o to, že uvnitř funkce s názvem vypis_x se pokoušíme příkazem echo vypsat proměnnou $x. Takováto proměnná ale uvnitř této funkce neexistuje. Nachází se totiž mimo tuto funkci, tak že ji tento příkaz echo uvnitř funkce marně zkouší vypsat. Proměnná $x sice ve skriptu existuje, ale je je to globální proměnná, na kterou „zevnitř“ funkce nevidíme.
Poznámky k funkcím
- Funkce muže mít více vstupních parametrů. Ty se pak oddělují čárkou.
- Funkce v PHP mohou předávat parametry odkazem. To se provede tak, že před název proměnné v hlavičce funkce se uvede ampersand (&)
- V těle funkce mohou být definovány proměnné s klíčovým slovem static. Hodnotu takových proměnných si PHP mezi jednotlivými voláními funkce pamatuje.
- Funkce v PHP mohou být rekurzivní. To znamená, že funkce muže volat sebe samu.
- Funkce nemůže vracet více než jeden výstupní parametr. Ale muže vracet pole, takže se to dá obejít.
- Jedna uživatelská funkce muže volat jinou. Na pořadí, v jakém jsou uvedeny ve skriptu, přitom nezáleží. Volání funkce muže být uvedeno dokonce již dříve než definice funkce samotné.
- Základní údaje
- Kategorie: PHP
- Zobrazení: 681
Pro vkládání souborů do kódu se používají funkce include, require, include_once, require_once. Základní rozdíl mezi funkcí include a require je v tom, že pokud funkce include volá soubor, který neexistuje, vypíše chybové hlášení, ale pokračuje ve skriptu. Kdežto funkce require skončí fatální chybou. Funkce include_once a require_once se používají v případě, kdy potřebujeme zamezit vícenásobnému vložení stejného externího souboru. Varianty s _once na konci zaručí, že se v případě vícenásobného použití stejného souboru vloží jen ten první. Nejčastěji se ovšem používá funkce include.
Příkaz include
Příkaz include je základní příkaz, kterým je možné do skriptu PHP vložit jiný skript PHP. Typické je to např. v případě vkládání menu webových stránek, kdy je takovéto menu uloženo v jednom souboru a ostatní si jej pouze vkládají v podobě funkce include. Při změně menu se tak nemusejí pracně jednotlivé stránky měnit a automaticky načítají novou podobu takového menu. Pro začátek vložíme do stránky jinou, která obsahuje adresu. Nejprve vytvoříme soubor s adresou:
<em>Kontakt:</em><br />
<strong>Jaroslav Novák</strong><br />
Holická 33<br />
111 11 Počernice<br />
e-mail: jaroslav.novak[zavináč]firmaxy.cz<br />
tel.: 123 456 789<br />
Tento soubor načítá adresu funkcí include:
<html>
<head>
<title>Příklad na include</title>
<meta charset='utf-8'>
</head>
<body>
<p>Tady je vlastní text stránky.</p>
<?php
include 'adresa.php';
?>
</body>
</html>
Pomocí příkazu include je možné vložit cokoliv, teda i kód PHP. Např.:
<?php
echo 'Tady je kousek PHP kódu<br />';
?>
Počet vložení externího souboru do kódu pomocí funkce include není omezen.
Když vkládaný soubor chybí
Pokud vložený soubor neexistuje, vypíše PHP chybové hlášení (ovšem záleží na nastavení serveru). Např: Warning: include(test-include.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\adresa.php on line 9 V praxi se samozřejmě příkazy pro vložení externího souboru využívají v daleko větší míře a především s následným zapojením databáze. Další jednoduchý příklad ukazuje, jak lze "poskládat" webovou stránku tak, abychom si při vytváření dalších nových stránek webu ulehčili práci. Nejprve je dobré si vytvořit jednotlivé části webu, které se nebudou v celém systému webových stránek měnit. Jedná se např. o hlavičku dokumentu, menu, zápatí apod. Tak že např. zahlavi.php, menu.php a paticka.php. Následné složení stránky může vypadat např. takto:
<?php
include ("hlavicka.php");
include ("menu.php");
?>
Zde bude unikátní část webu, na každé stránce jiný...
<?php
include ("paticka.php");
?>
Každá část webu pak musí vypadat takto, pouze unikátní část html kódu se bude lišit. Dalším vylepšením bude to, že si každou tuto "unikátní část webu" budeme chtít načítat např. z databáze. Pak nám bude stačit pouze jeden soubor (např. index.php). Další stránky nebudeme potřebovat, protože hlavní ("unikátní") část webu se bude dynamicky načítat podle toho, jakou budeme "volat" stránku. K tomuto účelu se využívá metoda _GET, která dokáže přidat do adresy URL jakoukoliv hodnotu (parametr) a tím "zavolat" patřičný obsah. Nejprve začneme jednoduchým vložením externího souboru za pomoci funkce require. Napojení do databáze si vyzkoušíme až po prostudování kapitoly o databázích.
<html>
<head>
<title>Příklad na vkládání externích souborů</title>
<meta charset='utf-8'>
</head>
<body>
<h1>Menu:</h1>
<ul>
<li><a href="/php?layout=blog&stranka=uvod&start=10">Úvod</a></li>
<li><a href="/php?layout=blog&stranka=reference&start=10">Reference</a></li>
<li><a href="/php?layout=blog&stranka=kontakt&start=10">Kontakt</a></li>
</ul>
<?php
echo "<p>Dynamický obsah:</p>";
require($_GET['stranka'] . '.php');
?>
</body>
</html>
Jak pracuje metoda _GET s parametrem Pro pochopení si nejprve všimněte jednotlivých položek menu. Odkazy jednotlivých položek mají adresu index.php?stranka=xxx. Tato konstrukce (tvar) adresy funguje tak, že do následně volané metody _GET v kódu PHP se doplní právě parametr, který vidíme za rovnítkem. Tedy např. slovo kontakt. Tím, že k tomuto slovu ještě připojíme (tečkou) příponu .php se načte do tohoto místa tento externí soubor. Pokud tedy existuje.
require($_GET['stranka'] . '.php');
Vytvořte tedy podle tohoto příkladu startovací stránku webu - index.php a dále tři "podstránky" - uvod.php, reference.php a kontakt.php. Zde je demo. Po kliknutí na jednotlivé položky sice vše funguje, ale základní startovací stránka webu - index.php vykazuje chybu. Proto je potřeba doplnit skript o podmínku, která kontroluje, zda je v adrese nějaký parametr:
<html>
<head>
<title>Příklad na include</title>
<meta charset='utf-8'>
</head>
<body>
<h1>Menu:</h1>
<ul>
<li><a href="/index.php">Úvod</a></li>
<!-- Zde již můžeme nechat pouze odkaz na index.php -->
<li><a href="/php?layout=blog&stranka=reference&start=10">Reference</a></li>
<li><a href="/php?layout=blog&stranka=kontakt&start=10">Kontakt</a></li>
</ul>
<?php
echo "<p>Dynamický obsah:</p>";
if (isset($_GET['stranka']))
// pokud je něco v parametru adresy URL, pak tento parametr načti.
require($_GET['stranka'] . '.php');
else
// Pokud ne, načti následující kód.
echo "Toto je obsah titulní strany webu..."
?>
</body>
</html>
Podmínka "kontroluje" zda je v parametru URL adresy nějaký text. Pokud ano, vypíše jej. Pokud ne, vypíše se část else podmínky. Tady je výsledek. Pokuste se takovýto příklad vložit do stránky s nějakým frameworkem (např. Bootstrap...)
Další příklad možného řešení: DEMO | Celý web ke stažení (pro zvýraznění položky aktivního menu, je použit script podle kapitoly 25)
- Základní údaje
- Kategorie: PHP
- Zobrazení: 602
Pro spojení databáze a PHP je potřeba znát alespoň několik základních informací o databázích a především o jazyce MySQL.
Databáze MySQL
Dnešní PHP stránky už si bez spolupráce s nějakou databází prakticky nedovedeme představit. V největší míře se používá databáze MySQL. Další variantou může být také např. PostgreSQL a další. Pro základní operace a funkčnost se však zaměříme pouze na databázi MySQL. Jedná se o produkt, který je zdarma, i když ne úplně ve všech případech. Nástroje pro práci s MySQL Nejčastějším nástrojem je phpMyAdmin. Ten umožňuje prakticky jakékoliv operace s databází i se všemi daty v ní. Bývá také součástí většiny předpřipravených balíčků webových serverů (např. PHP Web Server, PHP Easy, WAMP Server apod.). Dalším velmi zdařilým a přitom jednoduchým nástrojem je Adminer českého autora Jakuba Vrány. Jeho výhodou je především velmi jednoduchá instalace. Obsahuje totiž pouze jeden soubor, který nakopírujeme na webový server a spustíme v prohlížeči. Srovnání Adminera a PHPMyAdmin najdete také na stránce autora - http://www.adminer.org/cs/phpmyadmin/. Připojení k databázi Pro připojení k databázi potřebujeme tyto základní údaje:
- název hostitele (adresa serveru) – každá databáze běží na nějakém „stroji“ (virtuálním nebo běžném serveru). Název tohoto serveru může být buď název v podobě nějaké adresy typu mysql.server.cz (případně IP adresa tohoto serveru) a nebo v případě lokálního umístění databáze v podobě tvaru localhost (případně verze IP adresy – 127.0.0.1). Název hostitele obdržíme vždy od poskytovatele webhostingu
- název databáze – název je opět buď vytvořen poskytovatelem webhostingu nebo si ho sami můžeme vytvořit v administraci našeho webhostingového účtu
- uživatelské jméno – opět platí stejná pravidla, jako u názvu databáze.
- heslo – i zde platí stejná pravidla
Někdy bývá (opravdu jen výjimečně) potřeba zadat ještě port. MySQL naslouchá na portu 3306, pokud není při konfiguraci serveru určeno jinak. Práce s databází Prvním krokem je vytvoření databáze. Přes rozhraní phpMyAdminu nebo Admineru to můžeme udělat velmi jednoduše přes formulářové pole (tzv. „na kliknutí“). Velmi často také bývá minimálně jedna databáze vytvořena již se vznikem webohostingového prostoru. Každá databáze (pokud není prázdná) obsahuje tabulky. Současně s tvorbou tabulky také vytváříme sloupce tabulky, u kterých musíme definovat jejich obsah. Tedy jaká data v nich budou obsažena, jejich datový typ. Můžeme také definovat, zda je v daném sloupci povolena nulová hodnota nebo zda je daný sloupec definován jako primární klíč.
Datové typy MySQL
Základní informace
- pro omezení délky řetězce (maximální velikost je 255) používáme parametr "m", zápis je: datovy_typ(m) - např.: TINYINT(1), nebo VARCHAR(100)
- u reálných čísel používáme navíc parametr "d" (maximální velikost je 30), tímto parametrem omezíme délku čísla za desetinou čárkou, zápis je: datovy_typ(m,d) - např.: FLOAT(5,3)
- sloupce určené jako INDEXY (nebo i PRIMARY KEY) označíme na konci deklarace tabulky - např.: CREATE TABLE pokus (jm CHAR(20) NOT NULL, cis INT, PRIMARY KEY (jm), INDEX(cis));
- název indexu (INDEX nazev (sloupec)) zadáváme pokud bude indexů více
Datové typy se nejčastěji dělí na tři základní skupiny:
- číselné
- textové (někdy označované jako znakové nebo řetězcové)
- datumové (datum a čas)
1. Číselné
Celočíselné typy
Typ | Popis | Atributy | Rozsah |
---|---|---|---|
TINYINT | velmi malá čísla | AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL | −128 až 127; UNSIGNED => 0 až 255 |
SMALLINT | malá čísla | AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL | −32768 až 32767; UNSIGNED => 0 až 65535 |
MEDIUMINT | střední celá čísla | AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL | −8388608 až 8388607; UNSIGNED => 0 až 16777215 |
INT nebo INTEGER | běžné celé číslo | AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL | −2147483648 až 2147483647;UNSIGNED => 0 až 4294967295 |
BIGINT | velká celá čísla | AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL | −9223372036854775808 až 9223372036854; UNSIGNED => 0 až 18446744073709551615 |
Reálné typy (s desetinnou čárkou)
Typ | Popis | Atributy | Rozsah |
---|---|---|---|
FLOAT | malá desetinná čísla | UNSIGNED, SIGNED a ZEROFILL | nejmenší nenulové hodnoty jsou ±1,175494351E−38; největší nenulové hodnoty jsou −±3,402823466E+38; UNSIGNED => záporné hodnoty jsou zakázány |
DOUBLE | velká desetinná čísla | UNSIGNED, SIGNED a ZEROFILL | nejmenší nenulové hodnoty jsou ±2,2250738585072014E-308; největší nenulové hodnoty jsou −±1,17976931348623157E+308; UNSIGNED => záporné hodnoty zakázané |
DECIMAL | velká desetinná čísla ukládaná jako řetězce | UNSIGNED, SIGNED a ZEROFILL | stejné jako DOUBLE |
2. Textové typy
Používají se pro ukládání textu; některé typy dokáží rozlišovat i velká a malá písmena; lze do nich ukládat i čísla
Typ | Popis | Atributy |
---|---|---|
CHAR | řetězec pevně dané délky 0-255; delší text bude oříznut, kratší bude doplněn mezerami do zadané délky | BINARY, CHARACTER SET |
VARCHAR | stejné jako CHAR, ale kratší text není doplněn mezerami | BINARY, CHARACTER SET |
TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB | klasické hodnoty BLOB | - |
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT | klasický text | CHARACTER SET |
ENUM | výčtový typ | - |
SET | množinový typ | - |
3. Typy pro datum a čas
Typ | Popis | Rozsah |
---|---|---|
DATE | datum ve formátu CCYY-MM-DD | 1000-01-01' až '9999-12-31 |
TIME | čas ve formátu 'hh:mm:ss'; pro záporné hodnoty '-hh:mm:ss'; reprezentuje uplynulý čas nebo čas dne | -838:59.59' až '838:59:59 |
TIMESTAMP | časová značka, obsahuje datum a čas; pokud zadáme NULL vyplní se zde aktuální datum a čas | - |
DATETIME | datum a čas ve formátu 'CCYY-MM-DD hh:mm:ss' | 1000-01-01 00:00:00' až '999-12-31 23:59:59 |
Modifikátory
Modifikátory jsou nastavení tabulek, kterými určujeme chování jednotlivých záznamů.
- AUTO_INCREMENT - systém si sám ve sloupci generuje unikátní (jedinečné) číselné hodnoty - modifikátor lze použít pouze na celočíselný datový typ - za deklarací nové tabulky můžeme ještě navíc určit výchozí hodnotu: ...AUTO_INCREMENT=50;
- CHARACTER SET - znaková sada sloupce
- BINARY - pro CHAR a VARCHAR; tento typ bude brán jako binární a budou se tak rozlišovat malá a velká písmena
- DEFAULT vychozi_hodnota - pokud bude buňka prázdná, systém do ní automaticky přiřadí hodnotu "vychozi_hodnota" - řetězce nezapomeňte psát v uvozovkách
- FULLTEXT INDEX - platí pro sloupce typu CHAR, VARCHAR a TEXT - fultextový index slouží k rychlejšímu hledání dat v textových polích - hledání v takovýchto polích provádíme pomocí příkazů MATCH a AGAINST - př.: SELECT * FROM tabulka WHERE MATCH(sloupec) AGAINST("hledana_hodnota");
- INDEX - sloupec/sloupce označené jako INDEX umožní rychlejší přístup k datům která obsahují
- NOT NULL - pokud použijeme tento modifikátor, označený typ bude muset v každé buňce obsahovat nějakou hodnotu
- NULL - opak NOT NULL; buňka může být prázdná
- PRIMARY KEY - označený typ bude sloužit jako primární klíč - při jeho použití musíme zároveň použít UNIQUE - sloupec nám tedy jedinečným způsobem identifikuje záznamy v tabulce
- UNIQUE - v daném sloupci nesmějí být v buňkách stejné hodnoty, tedy co kus to unikát
- UNSIGNED - pokud použijeme modifikátor UNSIGNED, datový typ bude bez znaménka a posune se interval hodnot - u čísel s pohyblivou desetinou čárkou se interval použitím UNSIGNED neposunuje a berou se jen kladná čísla - př.: TINYINT má rozsah -118 až +127 a TINYINT UNSIGNED má rozsah 0 až 255
- ZEROFILL - použití u čísel, dotaz doplní před číslo nuly v celé jeho šířce - př.: pokud máme definováno MEDIUMINT(6) ZEROFILL a je v něm hodnota 123, tak se nám zobrazí 000123
Základní příkazy SQL
SQL příkazy můžete používat jak v prostředí Adminera (nebo phpMyAdminu), ale i následně v rámci PHP kódu (to je častější použití v praxi). Nejprve si ukažme práci v okně SQL příkazů:
Create table – tvorba tabulek
Pomocí tohoto příkazu vytvoříte tabulku v databázi. Zjednodušená syntaxe vypadá takto:
create table název tabulky (název sloupce datový typ null/not null)
Příklad:
create table knihy
(
CisloKnihy integer not null primary key,
NazevKnihy varchar(60) not null,
Autor varchar(60) not null
)
Tabulka nese název knihy a obsahuje celkem 3 sloupce:
- číslo knihy (CisloKnihy), datový typ integer, nesmí být nulový a je to primární klíč tabulky
- název knihy (NazevKnihy), datový typ varchar o maximální délce 60 znaků a nesmí být nulový
- autora knihy (Autor), datový typ varchar o maximální délce 60 znaků a nesmí být nulový
Insert – vložení dat
Příkazem insert se vkládají data do tabulky. Syntaxe:
insert into NazevTabulky values (hodnota,…)
Příklad:
insert into knihy values (1, 'Malý Bobeš','J.V.Pleva');
insert into knihy values (2, 'R.U.R.','Karel Čapek');
insert into knihy values (3, 'Bylo nás pět','Karel Poláček');
Select – načtení z tabulky
Příkaz select načte data z tabulky. Může být spojen i s nějakou podmínkou.
select NazevSloupce from NazevTabulky [where NazevSloupce=hodnota]
Příkaz v hranatých závorkách je volitelný Příklad:
select CisloKnihy, NazevKnihy from knihy where Autor = 'Karel Čapek'
(vyber údaje ze sloupce CisloKnihy a NazevKnihy z tabulky Knihy, kde je uveden autor Karel Čapek) Další příklady:
select * from knihy
- vypíše všechny položky záznamů
select NazevKnihy, Autor from knihy
- vypíše jen vybrané položky záznamů (název a autora)
select NazevKnihy, Autor from knihy order by NazevKnihy
- vypíše názvy a autory seřazené podle názvů knih
select NazevKnihy, Autor from knihy order by NazevKnihy desc
- vypíše názvy a autory seřazené podle názvů knih, ale v opačném abecedním pořadí (parametr "desc")
select NazevKnihy, Autor from knihy where NazevKnihy like "P%" or autor like "M%"
- vypíše názvy a autory knih, jejichž názvy začínají písmenem P nebo pokud jméno autora začíná písmenem M
Delete – odstranění řádků
Příkazem delete se odstraní řádky tabulky. Syntaxe vypadá následovně:
delete from NazevTabulky [where NazevSloupce=hodnota]
Příklad:
delete from knihy where Autor = 'Karel Čapek'
(odstraní z tabulky knihy všechny knihy, které mají jako autora uvedeného Karla Čapka)
Update – změna hodnot
Příkazem update se změní hodnoty sloupce v tabulce. Zjednodušená syntaxe:
update NazevTabulky set NazevSloupce = NovaHodnota
Příklad:
update knihy set Autor = 'Božena Němcová' where CisloKnihy = 3
Tento příklad změní autora knihy s číslem 3 na novou hodnotu – Božena Němcová.
Drop Table – odstranění tabulky
Tímto příkazem odstraníte celou tabulku z databáze. Syntaxe:
drop table NazevTabulky
Příklad:
drop table knihy
To je jen několik základních nejčastěji používaných příkazů. Existuje jich samozřejmě daleko více.
- Základní údaje
- Kategorie: PHP
- Zobrazení: 815
Vlastní komunikace z hlediska skriptu PHP vypadá následovně:
- připojení k databázovému serveru MySQL a výběr databáze
- zaslání příkazů a převzetí výsledných dat (či aktualizace těchto dat) z databázového serveru MySQL
- odpojení se od databázového serveru MySQL
Než tyto tři kroky provedeme, měli bychom znát několik základních funkcí PHP, kterými "ovládáme" databázi. Tyto funkce používáme za pomoci ovladačů. Nejčastější typy ovladačů:
- mysql (pouze pro verze PHP 5.5 a nižší, zastaralé a již se nedoporučuje používat)
- mysqli (MySQL Improved, parametry se do dotazů předávají velmi nepohodlně)
- PDO (PHP Database Objects, jedná se o nejnovější a velmi kvalitní objektový ovladač, který se jednoduše používá a podporuje kromě MySQL ještě několik databází.
- a další
Funkcím, které začínají výrazem mysql, je již v PHP lepší se úplně vyhnout. Pro PHP do verze 5.4 se mohlo používat funkce MySQL. Od vyšších verzí PHP je nutné používat funkci MySQLi nebo PDO_MySQL. Více informací najdete např. v tomto článku (odkaz na web http://jecas.cz) Několik základních příkazů pro práci s databází:
- mysqli_connect - otevírá spojení se serverem MySQL
- mysqli_select_db - vybíra MySQL databázi
- mysqli_query - posíla MySQL příkaz
- mysqli_num_rows - vrací počet řádků výsledku příkazu
- mysqli_affected_rows - vrací počet řádků, které byly ovlivněny poslední operaci
- mysqli_fetch_array - zpracovává jeden řádek výsledku příkazu, vrací asociativní pole, číselné pole či oboje
- mysqli_fetch_row - zpracovává jeden řádek výsledku příkazu, vrací číselné pole
- mysqli_fetch_assoc - zpracovává jeden řádek výsledku příkazu, vrací asociativní pole
- mysqli_unbuffered_query - posílá MySQL příkaz bez automatického zpracování výsledku a bez ukládání do vyrovnávací paměti
- mysqli_error - vrací chybný řádek posledního MySQL příkazu
- mysqli_change_user - mění uživatele pro určité připojení
- mysqli_free_result - uvolňuje paměť od výsledku příkazu
- mysqli_result - vrací data výsledku příkazu
- mysqli_fetch_object - zpracovává jeden řádek výsledku příkazu a vrací objekt
- mysqli_client_encoding - vrací kódování spojení
- mysqli_close - ukončuje spojení s MySQL serverem
- mysqli_pconnect - vytvoří trvalé připojení se serverem MySQL
- mysqli_create_db - vytvoří MySQL databázi
- mysqli_db_name - vrací název databáze
- mysqli_db_query - přepíná se na uvedenou databázi a posílá příkaz
- mysqli_field_len - vrací délku pole
- mysqli_get_host_info - vrací informaci o MySQL připojení
- mysqli_get_client_info - vrací informaci o MySQL uživateli
- mysqli_field_flags - vrací atributy uvedeného pole
- mysqli_drop_db - smaže MySQL databázi
Připojení k databázovému serveru MySQL a výběr databáze
Pro připojení k databázovému serveru MySQL slouží funkce mysqli_connect. Často se doplňuje o kontrolu, zda se připojení podařilo. Dále se provádí samotné dotazy do databáze a nasleduje odpojení, i když to PHP provede většinou samo i bez našeho přičinění. Patří to ale ke slušnému stylu:
<?php
//Zadání jednotlivých údajů potřebných pro připojení do databáze:
$dbhost = 'server.xy'; //server, kde se nachází databáze (často bývá localhost)
$dbname = 'databaze'; //jméno databáze
$dbuser = 'uzivatel'; //uživatelské jméno
$dbpass = 'heslo'; //heslo
//Vytvoření připojení:
$spojeni = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);
//Kontrola připojení s případnou hláškou
if (!$spojeni)
{
echo 'Spojení s mysql serverem se nepodařilo navázat.<br>';
}
else
{
echo 'Spojení s mysql serverem bylo úspěšně navázáno.<br>';
//Následuje nastavení kódování a následná práce s daty
mysqli_set_charset($spojeni, "utf8");
//Odpojení od databáze s kontrolou
//Odpojení je možné až po skončení všech skriptů, které čerpají data z databáze
$zavreni = mysqli_close($spojeni);
if(!$zavreni)
{
echo 'Spojení s mysql serverem se nepodařilo ukončit.';
}
else
{
echo 'Spojení s mysql serverem se podařilo ukončit.';
}
}
?>
Tento zdrojový kód můžete mít přímo v souboru s jakýmkoliv dalším skriptem nebo bývá často jako samostatný soubor, např. db.php. Pokud se bude jednat o samostatný soubor, musíte vynechat "Odpojení od databáze", protože jinak nebude možné s databází cokoliv dělat. Soubor db.php tedy může vypadat např. takto:
<?php
//Zadání jednotlivých údajů potřebných pro připojení do databáze:
$dbhost = 'server.xy'; //server, kde se nachází databáze (často bývá localhost)
$dbname = 'databaze'; //jméno databáze
$dbuser = 'uzivatel'; //uživatelské jméno
$dbpass = 'heslo'; //heslo
//Vytvoření připojení:
$spojeni = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);
//Kontrola připojení s případnou hláškou
if (!$spojeni)
{
echo 'Spojení s mysql serverem se nepodařilo navázat.<br>';
}
//Stav, kdy se podaří navázat spojení s databází již nevypisujeme
//Následuje nastavení kódování a následná práce s daty
mysqli_set_charset($spojeni, "utf8");
?>
Tento soubor (obvykle s názvem db.php, config.php, admin-config.php configuration.php apod....) pak bývá součástí dalších souborů, kteří jej mají vložen např. přes příkaz include nebo require. Ukončení spojení s databází pak bývá právě tam.
Zaslání příkazů a převzetí výsledných dat
Výpis dat z databáze se prování nejčastěji pomocí příkazu jazyka SQL, což je příkaz SELECT Jeho základní struktura je tato:
- SELECT - seznam požadovaných položek
- FROM seznam tabulek
- WHERE – podmínka
- GROUP BY - seznam položek
- HAVING - skupinová podmínka
- ORDER BY - třídění;
Následuje výběr tabulky z databáze. V našem příkladu to bude tabulka "knihy". V minulé kapitole byla vytvořena a následně smazána, proto si ji musíte vytvořit znovu:
create table knihy
(
CisloKnihy integer not null primary key,
NazevKnihy varchar(60) not null,
Autor varchar(60) not null
)
Dále ještě znovu vložíme 3 knihy:
insert into knihy values (1, 'Malý Bobeš','J.V.Pleva');
insert into knihy values (2, 'R.U.R.','Karel Čapek');
insert into knihy values (3, 'Bylo nás pět','Karel Poláček');
Výběr tabulky provedeme funkcí mysqli_query např. takto:
$vyber_tabulky = mysqli_query("SELECT * FROM knihy");
Abychom výsledná data skutečně viděli, je třeba, abychom byli připojeni na databázi a aby data ve volané tabulce existovaly. Dále si necháme vypsat data z této tabulky a to funkcí mysqli_fetch_array. Cyklus WHILE obsahuje nově vzniklou proměnnou $vysledek, která pak postupně načítá data do polí s určitým názvem. Název pole odpovídá názvům sloupců z tabulky v databázi.
<?php
// Krok 1: připojení do databáze externím souborem
include 'db.php';
// Krok 2: Napojení na konkrétní tabulku včetně kontroly
$vyber_tabulky = mysqli_query($spojeni, "SELECT * FROM knihy");
if(!$vyber_tabulky)
{
echo 'Dotaz vykazuje chybu.<br>';
}
else
{
// Krok 3: Pokud je vše v pořádku, zpracuje se dotaz a vypíše
// Je použit cyklus while, který vypisuje data tolikrát, kolik jich v tabulce je
while($radek = mysqli_fetch_array($vyber_tabulky))
{
echo
"Číslo knihy: ".$radek["CisloKnihy"]."<br>".
"Název knihy: ".$radek["NazevKnihy"]."<br>".
"Autor: ".$radek["Autor"]."<br><hr>";
}
}
// Krok 4: Odpojení od databáze
$zavreni = mysqli_close($spojeni);
if(!$zavreni)
{
echo 'Spojení s mysql serverem se nepodařilo ukončit.';
}
?>
Informaci o zdárném ukončení spojení s databází již nevypisuje. Návštěvníky webu by tak zbytečně obtěžovala.
Pokud chceme seřadit vypsané záznamy podle nějakého kritéria (v tomto případě podle čísel knih od největšího po nejmenší), přidáme k příkazu SELECT následující:
$dotaz = mysqli_query("SELECT * FROM knihy ORDER BY CisloKnihy DESC");
Dále můžeme vypsat např. počet záznamů v tabulce funkcí mysql_num_rows:
$pocet = mysqli_num_rows($dotaz);
echo '<br>Celkový počet záznamů v tabulce je: '.$pocet;
Kompletní zdrojový kód:
<?php
// Krok 1: připojení do databáze externím souborem
include 'db.php';
// Krok 2: Napojení na konkrétní tabulku včetně kontroly
$vyber_tabulky = mysqli_query($spojeni, "SELECT * FROM knihy ORDER BY CisloKnihy DESC");
if(!$vyber_tabulky)
{
echo 'Dotaz vykazuje chybu.<br>';
}
else
{
echo 'Dotaz byl úspěšně vykonán.<br>';
// Krok 3: Pokud je vše v pořádku, zpracuje se dotaz a vypíše
// Je použit cyklus while, který vypisuje data tolikrát, kolik jich v tabulce je
while($radek = mysqli_fetch_array($vyber_tabulky))
{
echo
"Číslo knihy: ".$radek["CisloKnihy"]."<br>".
"Název knihy: ".$radek["NazevKnihy"]."<br>".
"Autor: ".$radek["Autor"]."<br><hr>";
}
// Výpis celkového počtu knih
$pocet = mysqli_num_rows($vyber_tabulky);
echo '<h2>Celkový počet záznamů v tabulce je: '.$pocet."</h2>";
}
// Krok 4: Odpojení od databáze
$zavreni = mysqli_close($spojeni);
if(!$zavreni)
{
echo 'Spojení s mysql serverem se nepodařilo ukončit.';
}
?>
SQL příkazy za pomoci ovladače PDO
Protože ovladač mysqli přináší určitá bezpečnostní rizika (především SQL injection), je někdy vhodnější používat ovladač PDO. Zdrojový kód pro vložení dat (v tomto případě nové knihy č. 4) by pak vypadal např. takto:
<?php
$dbhost = "server.xy";
$dbname = "databaze";
$dbuser = "uzivatel";
$dbpass = "heslo";
try {
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->exec("set names utf8");
$sql = "INSERT INTO knihy (CisloKnihy, NazevKnihy, Autor)
VALUES ('4', 'Létající Čestmír', 'Karel Jarolím')";
// use exec() because no results are returned
$conn->exec($sql);
echo "Nová kniha byla vložena";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}$conn = null;
?>
Jedná se o objektově orientované programování, které není součástí tohoto základního materiálu. Zdroj - http://jecas.cz/pdo