- Základní údaje
- Kategorie: PHP
- Zobrazení: 525
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=12">Úvod</a></li>
<li><a href="/php?layout=blog&stranka=reference&start=12">Reference</a></li>
<li><a href="/php?layout=blog&stranka=kontakt&start=12">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=12">Reference</a></li>
<li><a href="/php?layout=blog&stranka=kontakt&start=12">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í: 470
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í: 460
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
- Základní údaje
- Kategorie: PHP
- Zobrazení: 450
Formuláře jsou naprostým základem webových stránek, které chcete mít interaktivní, neboli chcete, aby bylo možné pracovat s odezvou uživatele. Naprostým předpokladem je, že v tomto případě musíte mít alespoň základní znalosti HTML (XHTML) v oblasti tvorby formulářů a jejich prvků.
Formuláře a jejich parametry v HTML (XHTML)
Při vytváření jakéhokoliv formuláře HTML začínáme značkou <form>. Ta má několik dalších parametrů. Pro naše současné účely nám ovšem budou postačovat dva hlavní. Prvním je parametr action Ten určuje příjemce dat z formuláře. Pro nás to bude nějaký PHP skript, který bude schopen tyto údaje přijmout a zpracovat, popř. vypsat. O tomto parametru později. Druhým veledůležitým parametrem je parametr method Ten určuje, jakým způsobem se budou data z formuláře posílat. Zde se v praxi využívá prakticky pouze dvou metod a to je metoda post a get. Abychom mohli data z formuláře odeslat, musíme k tomu vytvořit nějaký příkaz. Používá se odesílací tlačítko, které se tvoří vložením značky <input> s parametrem type=“submit“. To zařídí, že se všechna data odešlou do námi zadaného skriptu. Typické použití formulářů vypadá asi takto:
<form action="mujskript.php" method="post">
<!-- datové položky formuláře -->
<input type="submit" value="Odeslat data formuláře">
</form>
Dále si zkusíme do formuláře přidat textové pole, aby bylo co odesílat:
<form action="mujskript.php" method="post">
Jméno: <input type="text" name="jmeno"><br />
<input type="submit" value="Odeslat data formuláře" />
</form>
Nyní si vytvoříme kompletní jednoduchou webovou stránku s formulářem:
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="utf-8">
<title>Jednoduchý formulář</title>
</head>
<body>
<form action="vypis_dat.php" method="post">
Zadej svoje jméno: <input type="text" name="jmeno"><br />
<input type="submit" value="Odeslat data formuláře" />
</form>
</body>
</html>
Jak můžete z kódu vypozorovat, data mají být zpracovány souborem vypis_dat.php. Ten ovšem do této chvíle neexistuje. Proto si jej vytvoříme:
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="utf-8">
<title>Zpracovaná data z formuláře</title>
</head>
<body>
<?php
$jmeno = $_POST['jmeno'];
echo 'Vaše jméno je ', $jmeno;
?>
</body>
</html>
Aby se vám skutečně data z formuláře vypsaly, musí se tento soubor nacházet ve stejné složce jako je ten, ze kterého data odesíláte (pokud tedy nemáte zadanou jinou cestu k souboru, což v našem případě nemáme). Ještě se zaměříme na předešlý kód. První řádek v PHP kódu je deklarace proměnné $jmeno, ke které je přiřazen záznam z odeslaného formuláře a to konkrétně s názvem jmeno. Jak vidíte je zde i zmíněna právě metoda zasílaných dat - $_POST. Pokud tedy odesíláte jednou metodou, nemůžete pro zpracování použít druhou metodu. Dnes se prakticky v 99% pracuje s metodou POST. Rozdíly odesílacích metod:
Metoda GET | Metoda POST |
Neumí odeslat rozsáhlá data | Umí odesílat rozsáhlá data |
Odesílá data jako součást adresy URL | Odesílá data jinou cestou, než je adresa URL |
Formuláře s podmínkou
První příklad je zaměřen na formulář, u kterého přijímací skript ověřuje podmínku – zadání správného hesla. Nejprve tedy stránka s formulářem, do kterého musí uživatel napsat správné heslo:
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="utf-8">
<title>Zadej prosím heslo</title>
</head>
<body>
<h2>Pokud se chceš dozvědět podrobnosti o srazu, musíš zadat správné heslo</h2>
<form action="vysledek.php" method="post">
Zadej heslo: <input type="password" name="heslo"><br>
<input type="submit" value="Odeslat heslo">
</form>
</body>
</html>
Po spuštění se vyhodnocuje odeslaný výraz z formuláře v souboru vysledek.php takto:
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="utf-8">
<title>Informace o srazu</title>
</head>
<body>
<?php
if ($_POST['heslo'] == 'lokomotiva')
echo 'Sraz se bude konat zítra ve 3 hodiny u Tygra';
else
echo 'Bohužel zadal jsi špatné heslo, nic se nedozvíš';
?>
</body>
</html>
Skript je doplněn o podmínku if. Správné heslo je „lokomotiva“. Pokud jej tedy uživatel nezadá, nezobrazí se mu požadovaný text. Pokuste se doplnit podmínku o další prvek, který je nutno správně do formuláře zadat. Doplňte stránku frameworkem Bootstrap.
- Základní údaje
- Kategorie: PHP
- Zobrazení: 116
Tento příklad je pomůcka pro zjištění správné váhy. Je zde využit tzv. Body Mass Index (BMI), který se vypočítá takto: BMI = váha / (výška x výška) POZN.: váha musí být v kg a výška v metrech! Tabulka figury člověka podle BMI:
Podvyživený | BMI je menší než 15 |
Podváha | BMI je menší než 18,5 |
Ideální | BMI je od 18,5 do 25 |
Nadváha | BMI je od 25 do 30 |
Obezita | BMI je od 30 do 40 |
Nadměrně obézní | BMI je větší než 40 |
První stránka pro zadání hodnot vypadá takto:
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="utf-8">
<title>Zadejte Vaše parametry</title>
</head>
<body>
<form action="vysledek.php" method="post">
Zadej váhu: <input type="text" name="vaha"> kg<br />
Zadej výšku: <input type="text" name="vyska"> cm<br />
<input type="submit" value="Spočítej figuru">
</form>
</body>
</html>
Hodnota výšky se zadává běžně v cm, což je následně ve vyhodnocovacím skriptu potřeba převést na metry. Druhá stránka, která má spočítat BMI:
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="utf-8">
<title>Informace o figuře</title>
</head>
<body>
<?php
$vaha = $_POST['vaha'];
$vyska = $_POST['vyska'];
$vyska_v_metrech = $vyska / 100.0;
//tato proměnná se vytváří jen proto, aby se převedla výška na metry
$BMI = $vaha / ($vyska_v_metrech * $vyska_v_metrech);
echo 'Vaše BMI = ', $BMI;
echo '<br /><br />';
if ($BMI < 15)
echo 'Jste podvyživený/á';
else if ($BMI < 18.5)
echo 'Máte podváhu';
else if ($BMI < 25)
echo 'Máte ideální postavu';
else if ($BMI < 30)
echo 'Máte nadváhu';
else if ($BMI < 40)
echo 'Jste obézní';
else
echo 'Jste nadměrně obézní';
?>
</body>
</html>