Dynamický web
Název školy | Vyšší odborná škola obalové techniky a Střední škola, Štětí, příspěvková organizace | ||
Adresa školky | Kostelní 134, 411 08 Štětí | ||
IČ | 46773509 | ||
Název operačního programu | OP Vzdělávání pro konkurenceschopnost | ||
Registrační číslo | CZ.1.07/1.5.00/34.1006 | ||
Označení vzdělávacího materiálu | |||
Název tématické oblasti (sady) | Programování | ||
Název materiálu | PHP - uvozovky | ||
Anotace | |||
Autor | Jazyk | ||
Očekávaný výstup | |||
Klíčová slova | |||
Druh výukového zdroje | Věková skupina žáků | ||
Typ interakce | Ročník | ||
Speciální vzdělávací potřeby | žádné | ||
Zhotoveno, (datum/období) | Celková velikost |
Obsah
Psaní uvozovek
Je třeba si uvědomit, že PHP je skriptovací jazyk, na jehož výstupu bývá zpravidla HTML kód, což je zase zcela jiný jazyk. Navíc se v PHP často používají SQL dotazy, které se mohou psát přímo v podobě SQL dotazů - a to je další, zcela jiný jazyk.
To už jsou 3 jazyky, které se míchají v jednom zdrojovém souboru. Je jasné, že každý jazyk má svou specifickou syntaxi, ke které používá uvozovky. No jo, jenomže jak pak dopadne např. tenhle řádek HTML kódu zapsaný v PHP?
echo "<p class="par">Lorem ipsum</p>";
Jak by mohl dopadnout jinak, než:
PHP Parse error: syntax error, unexpected 'par' (T_STRING), expecting ',' or ';' in /home/mist/devel/php/tmp/www-root/chyba.php on line 3
Proč? Asi proto, že:
Příkaz
echo
vyžaduje uvozovky, do kterých se uzavírá řetězec.Myslíte, že PHP tuší, že v uvozovkách příkazu
echo
je nějaký HTML kód? Netuší.Přednost na uvozovky má ten jazyk, ve kterém skriptujeme, tj. PHP.
Pokud vnořujeme další jazyk (v příkladu HTML), pak má smůlu. Uvozovky, které HTML používá pro hodnoty atributů (v příkladu atribut class) není možné jen tak napsat, aniž by to neovlivnilo uvozovky PHP skriptu.
Jak tedy vyřešit problém výše? Našly by se tři způsoby:
Provést tzv. escapování vnořených uvozovek, tj:
echo "<p class=\"par\">Lorem ipsum</p>";
Pro příkaz
echo
použít jednoduché uvozovky, čímž bude možné bez dalších komplikací vnořit uvozovky dvojité.echo '<p class="par">Lorem ipsum</p>';
Pokud to situace dovolí, vynechat příkaz
echo
a zapsat kód čistě v HTML. Tzn. přerušit PHP skript, vypsat HTML a opět navázat otevřením PHP skriptu. V příkladu výše si to můžeme dovolit.?> <p class="par">Lorem ipsum</p> <?php
Escapování znaků
Některé znaky v PHP mají speciální význam. Aby je bylo možné použít v místech (typicky řetězce), kde chceme význam potlačit, provede se jejich tzv. escapování. V některých případech je možné escapování obejít použitím jednoduchých uvozovek (vizte dále).
V příkladu výše jste mohli vidět, že jsme escapovali uvozovku uvnitř řetězce, abychom ji mohli použít jako skutečný symbol uvozovky, který by nám jinak předčasně řetězec uzavřel. Podobný příklad:
<?php echo "Uvozovky \" uvnitř řetězce";
Jiný příklad pro escapování znaků lze ukázat např. u symbolu $, který se používá jako součást názvu proměnných.
<?php $i = 15; echo "číslo = $i";
Jako výsledek se zobrazí:
číslo = 15
Pokud bychom ovšem z nějakého důvodu chtěli vypsat název proměnné $i (nikoli její hodnotu), pak si můžeme pomoci escapováním $.
<?php echo "číslo = \$i";
Pak se zobrazí:
číslo = $i
Jednoduché uvozovky
V PHP lze řetězce uzavírat do jednoduchý uvozovek, přičemž se na první pohled zdá, že to nemá na nic vliv. Pokud bychom použili příklady výše a zapsali je pomocí jednoduchých uvozovek, vypadal by zdrojový kód:
<?php echo 'číslo = $i'; echo 'Uvozovky " uvnitř řetězce';
přičemž výsledek
číslo = $i Uvozovky " uvnitř řetězce
Pro jednoduché uvozovky tedy platí, že bez problémů pohltí uvozovky dvojité a že se v nich nevyhodnocují proměnné. Z hlediska strojového času je použití jednoduchých uvozovek efektivnější.
Dvojité uvozovky
Dvojité uvozovky pro změnu pohltí uvozovky jednoduché. A na rozdíl od jednoduchých uvozovek se v nich proměnné vyhodnocují - jak jste mohli vidět v příkladech výše.
Cvičení
Příklad 1
Vypište příkazem echo
následující text:
<div id="lorem" class="ipsum">Dolor si't amet</div>řešení
<?php echo "<div id=\"lorem\" class=\"ipsum\">Dolor si't amet</div>"; // nebo echo '<div id="lorem" class="ipsum">Dolor si\'t amet</div>';
Příklad 2
Do proměnné $q uložte následující SQL dotaz:
SELECT `id`, `title` FROM `movies` WHERE `audio`='en' AND `resolution`='FULL HD'řešení
<?php $q = "SELECT `id`, `title` FROM `movies` WHERE `audio`='en' AND `resolution`='FULL HD'"; // nebo $q = 'SELECT `id`, `title` FROM `movies` WHERE `audio`=\'en\' AND `resolution`=\'FULL HD\'';
Příklad 3
SQL dotaz z předchozího dotazu doplňte o proměnné $alang
a $resol
.
Tzn., že na místo hodnot en
a FULL HD
dosadíte uvedené proměnné.
<?php $alang = 'en'; $resol = 'FULL HD'; $q = "SELECT `id`, `title` FROM `movies` WHERE `audio`='$alang' AND `resolution`='$resol'"; // nebo $q = 'SELECT `id`, `title` FROM `movies` WHERE `audio`=\'' . $alang . '\' AND `resolution`=\'' . $resol . '\'';