Kniha PHP a MySQL bez předchozích znalostí
Školení, která pořádám
Kniha Miloslava Ponkráce vyšla v roce 2007 a tento článek není její recenzí, ale spíše oponenturou. Hledám totiž knihu, kterou bych s klidným svědomím mohl doporučovat svým studentům a účastníkům školení. Po výborné knize Jiřího Koska (která ale vyšla už v roce 1999, takže je zastaralá), totiž takovou knihu hledám marně. Nakonec jsem si ji musel napsat sám: 1001 tipů a triků pro PHP.
PHP a MySQL bez předchozích znalostí není špatná kniha a v PHP začátečníka programovat myslím naučí. Databáze jsou popsané opravdu jen zlehka, není vysvětlen ani primární klíč natož auto increment, z SQL příkazů je popsán jen základní SELECT
a INSERT
. Plynulost výkladu je dobrá a postupuje od jednoduchého ke složitému. Při čtení jsem si sice občas připadal jak při sledování Teletubbies, protože už jednou popsaná myšlenka je často zopakovaná třeba o dva odstavce později, ale začátečníkům to může vyhovovat.
Problém knihy tkví v tom, že čtenáře nenaučí vytvářet webové aplikace, což se od knihy o PHP tak nějak předpokládá, obzvlášť když jsou všechny ukázky psané v HTML. Nechápu, jak je možné na 175 stranách o PHP zamlčet existenci funkce htmlspecialchars (bez vysvětlení je použita jen v jednom příkladě) a ani okrajově se nezmínit o magic_quotes_gpc
, obzvlášť když se komunikuje s databází.
Poznámky ke knize
Ke knize jsem si udělal několik poznámek. Červeně jsou označeny chyby, které rozšiřují oficiální errata. Zeleně jsou možná rozšíření a doplnění, zbytek jsou poznámky pro autora, které by mohl zohlednit třeba při druhém vydání.
- 33 V knize se používá jak HTML, tak XHTML. Je mi jedno, co kniha používá, ale mělo by to být konzistentní.
- 35 Mohlo by být uvedeno, že značka
?>
na konci souboru je nepovinná.
- 38 Středník může chybět nikoliv za posledním příkazem, ale před značkou
?>
.
- 49 Příklad definuje proměnnou
$eva
, ale používá $x
.
- 53 V příkladu je uvedeno, že po definici dvou proměnných žádné jiné neexistují. To není pravda, protože PHP definuje řadu proměnných samo. Stačilo by text upravit na „uživatelské proměnné“.
- 55 Mělo by být uvedeno, že pokud neuvolníme proměnnou z paměti sami, tak se o to PHP postará při ukončení.
- 55 V jednom krátkém odstavci s příkladem by mohly být popsané konstanty.
- 56 V textu je uvedeno, že pokud apostrofu předchází zpětné lomítko, tak se řetězec neukončí. To není přesné, což se projeví např. ve výrazu
'\\'
.
- 60 V popisu heredoc syntaxe je uvedeno, že se uvnitř textu nesmí vyskytovat ukončovací identifikátor. Ten tam ale být může, jen nesmí být na řádku sám. Naopak chybí informace, že ukončovacímu identifikátoru už na řádku nic kromě středníku nesmí následovat.
- 62 U řetězců se mluví výhradně o znacích, PHP ale pracuje s bajty. Rozdíl se projeví např. s kódováním UTF-8.
- 68 V popisu konstrukce if chybí popis složeného příkazu – konstrukce
{}
. Ten je v knize až mnohem dál, já se naopak kloním k jeho používání vždy.
- 69 Vedle příkazu die by mělo být uvedeno i jeho dvojče exit, už jen proto, že se dále v knize používá.
- 72 U operátoru
===
by mělo být uvedeno, kdy je jeho použití nutné, např. u funkce strpos.
- 73 Tabulka ASCII původně asi měla více sloupců, její vysázení pod sebe způsobilo nesmyslné řazení.
- 91 Chybí popis konstrukce continue.
- 94 Příkaz switch logicky patří k podmínkám, nikoliv k cyklům, kam je zařazen.
- 99 Prvky pole v celé knize nejsou odděleny mezerou, což zhoršuje čitelnost.
- 104 Není použita funkce htmlspecialchars. To se opakuje i dále v knize, konkrétně na stránkách 177, 180, 191, 205.
- 105 U polí je uvedeno, že konstrukce
$pole[] = 220
dá novému prvku index o jedničku větší, než je největší index v poli. To není přesné, protože se berou jen nezáporné číselné indexy a navíc není popsaná situace, kdy prvek s takovým indexem neexistuje (nový prvek dostane index 0).
- 110 Vysvětlování funkcí na print není úplně šťastné, protože to v PHP není funkce, ale jazyková konstrukce. Vypsání textu před a po funkci sleep také není moc šťastné, protože kvůli bufferování výstupu se oba řetězce v prohlížeči typicky zobrazí až najednou.
- 114 U popisu parametrů funkcí chybí zmínka o předávání referencí a o výchozí hodnotě.
- 116 U funkcí chybí popis globálních a statických proměnných.
- 119 V popisu značky
<form>
by měl být uveden zvláštní význam prázdné hodnoty atributu action, obzvlášť když se v knize používá.
- 121 Formulářové prvky mají špatný atribut name.
- 123 Popis metod GET a POST a informace o tom, kdy kterou použít, není úplně nejšťastnější. Stačilo by uvést, že POST se používá u formulářů, které mění stav aplikace nebo přenáší hodně dat nebo citlivá data. Vyhledávací formuláře tyto podmínky nesplňují, takže je lepší je přenášet metodou GET. V knize je místo toho napsáno, že POST je správně v 99 % případů.
- 123 Chybí informace o poli $_REQUEST. Toto pole nedoporučuji používat, ale je lepší o něm vědět, protože se s ním čtenáři mohou setkat a měli by vědět, čím je nevhodné.
- 127 U formulářů chybí alespoň zmínka o tom, že PHP dokáže snadno zpracovat i odeslané soubory a pole.
- 130 Ve výpisu odeslaných dat se nezohledňuje nastavení konfigurační direktivy
magic_quotes_gpc
.
- 131 Vedle funkce ereg by měla být alespoň zmíněna i funkce preg_match.
- 131 V příkladu je nevhodně použit zavináč, navíc bez jakéhokoliv vysvětlení.
- 140 Měla by být zmíněna existence funkce ereg_replace.
- 140 Testová otázka se ptá, jaký regulární výraz strefí libovolné písmeno. Z odpovědi
.
plyne, že otázka měla být na libovolný znak, nikoliv písmeno.
- 159 Jako primární klíč je bez bližšího popisu stanoveno rodné číslo, které ale bohužel není unikátní.
- 159 Adresa by mohla být rozdělena na jednotlivé části, 50 znaků na celou adresu navíc může být málo.
- 167 V popisu příkazu SELECT není uvedeno pořadí jednotlivých klauzulí, které je pevně dané.
- 173 Konstrukce pro vkládání souborů a uživatelské funkce jsou v knize sice teoreticky probrané, ale v příkladě, který by je potřeboval jako sůl, chybí. Příklad opakuje velké bloky kódu, stejné připojení do databáze je použito v několika příkladech. Výhrady mám i k ukončení skriptu uprostřed stránky, bez ukončení XHTML značek.
- 173 Před odpojením od databáze se zbytečně testuje, jestli je připojení platné, přitom se to kontroluje už dříve ve skriptu.
- 175 Místo funkce mysqli_fetch_array by bylo lepší použít funkci mysqli_fetch_assoc.
- 182 Název sloupce
datum
v knize návštěv není nejšťastnější, protože není jasné, co to je vlastně za datum. Lepší by bylo např. vytvoreno
.
- 183 Tabulce pro knihu návštěv chybí primární klíč. Aplikace ho sice zatím na nic nepotřebuje, ale při jejím nepatrném rozšíření by se jeho absence projevila.
- 184 V knize je uvedeno, že databázový NULL znamená neplatnou hodnotu. Přitom znamená neznámou hodnotu.
- 185 U popisu funkce mysqli_real_escape_string by rozhodně mělo být napsáno něco o
magic_quotes_gpc
.
- 186 Formulář má zbytečně uveden atribut name.
- 189 Když dojde při ukládání záznamu do databáze k chybě, tak by se měl formulář předvyplnit zadanými údaji. Místo toho se skript jednoduše ukončí.
- 189 Po odeslání a uložení formuláře by mělo dojít k přesměrování hlavičkou
Location
. Jinak se při obnovení stránky uloží záznam znovu. Je to základní obrat webových aplikací.
- 196 Místo domény
neco.cz
, která skutečně existuje, by se v ukázkách měla používat doména example.com
, která je k tomu přímo určena.
- 197 U posílání e-mailů by měla být zmínka o nutném nastavení hlaviček pro funkčnost s diakritikou.
- 203 U session proměnných je uvedeno, že jejich použití zůstává uživateli utajeno. To ale není úplně přesné, protože podle session identifikátoru se poznat dá.
V knize jsem narazil také na pár překlepů, ty jsem poznačil rovnou do knihy.
Celkově vzato jde výklad probraných oblastí docela do hloubky, ale často skončí těsně před koncem. Čtenář má tedy pocit, že probranou oblast dobře zná, takže jí třeba při čtení PHP manuálu nebude věnovat pozornost, tím mu ale některý důležitý detail unikne.
Závěr
Kniha je jen úvodem do PHP, vůbec nejsou popsané objekty, ale třeba ani cookies, chybí byť i jen zmínka o užitečnosti oddělení PHP a HTML kódu u větších projektů. S klidným svědomím tuto knihu tedy doporučit nemohu, stejně jako knihu Jiřího Brázy, ke které mám také výhrady.
Diskuse
A co kniha PHP 5 Power Programming volně stahnutelná na root.cz, nebo její český překlad pojmenovaný Mistrovství v PHP 5 od cpressu?
Nečetl jsem, ale podívám se na ní. Pro začátečníky podle mě takovéto bichle nicméně nejsou úplně nejvhodnější.
Já jsem pořídil Programujeme PHP profesionálně, která má přes 650 stran, ale zdá se mi vhodná i pro začátečníky. Není tak zaměřena na PHP5 jako PHP 5 Power Programming, ale velice se mi líbí.
Na tehle knize jsem vyrustal, naucil jsem se na ni zaklady. Bohuzel je zde nedostatecne popsane napriklad objektove programovani a strasne zmatene popsane databaze.
Jinak i kdyz ma kniha pres 600 stranek, prijde mi ze v ni mohlo byt mnohem vice.
Kniha pana Pokorného vzhledem k datu vydání asi nebude zohledňovat PHP 5.
Kniha to je opravdu dobrá, ale také se mi na ní pár věcí nelíbí, konkrétně např. v kapitole 5.3:
1. K metodě formuláře je řečeno pouze tolik, že když přenášíme citlivá data, tak bychom měli použít metodu POST. Tu bychom přitom měli použít vždy, když odeslání formuláře provede nějakou akci.
2. Kniha schvaluje použití nebezpečné proměnné $_REQUEST.
3. Při vypsání hodnot není zohledněna direktiva magic_quotes_gpc.
Ještě mě trklo nepoužití funkce htmlspecialchars(), ale to je dále rozebráno.
Pak mi taky vadí, že metody na stránce 128 očekávají vstup ošetřený pro databázi. Hešuje se navíc nikoliv samotné heslo, ale heslo s přidanými zpětnými lomítky.
Skript pro nahrání obrázků kontroluje MIME typ, který se dá snadno podvrhnout. Měl by kontrolovat koncovku, podle které se následně rozhoduje server při posílání souboru.
Skript na stránce 143 by měl v případě neplatné stránky zobrazit 404, nikoliv titulní stránku.
Na knihu jsem se nedíval tak podrobně, ale bohužel i v dobré knize věhlasných autorů je řada netriviálních chyb.
Jak vidim vyhodna koupe:)hned pro ni jdu do knihkupectvi:)
php 5 power programming je dobra..mam ji pouze v aj a procital jsem ji letem svetem..a jak rika Jakub..nehorazna bichle a rozhodne ne pro zacatecniky..zameruje se hlavne na OOP
otázkou je, jestli to je špatně - myslím že naopak, oop je potřeba učit rovnou, dokud je mysl nepopsaná. Naučit se pak myslet aspoň trochu objektově dělá pak neskutečný problémy...
Daniel Tlach:
Já mám nějak celkově problém s knihami od českých autorů. Většina mi přijde chaotická a neúplná (Kosek je výjimka potvrzující pravidlo). Nechtěli byste si třeba sednout s Davidem Grudlem a vypotit něco? :) Myslím, že by to bylo jen ku prospěchu věci.
Martin:
Tohle je typická kniha pro lepiče. Zřejmé je to už z anotace "dosavadní knihy o programování WWW stránek a webových aplikací pro vás byly příliš složité a plné zbytečné teorie?", "Nevynechá žádný krok, nezabíhá však do detailů "...
Je bohužel obecnou pravdou, že člověk, který dnes začíná s php jako svým prvním programovacím jazykem, je slepý chudák. Špatné návyky, špatné techniky a už se toho nikdy nezbaví. Doufám, že tento fakt na svých školeních důrazně opakuješ! :)
ja jsem se php naucil z knizky PHP 5 - zaciname programovat od grada.
Ta je z článku odkázaná spolu s několika mými připomínkami.
Ja by som odporúčal knihu "PHP5, MySQL, Apache Vytvarime webové aplikace" je pre trocha už pokrocilejšieho (aspon ovládať trocha základov, aj ked na začiatku sa takisto venuje základom). Je to podla mna naj kniha :)
Visitor:
Jakube myslím, že jsi zbytečně moc kritický. Nečetl jsem úplně všechny odrážky, ale často upozorňuješ na "chyby", které jsou až takovou specialitkou, že to právě začátečnáka vůbec zajímat nebude.
Příklad za všechny:
35 Mohlo by být uvedeno, že značka ?> na konci souboru je nepovinná.
nevidím důvod proč v normální aplikaci neukončovat PHP kód, stejně jako nevidím důvod proč neukončovat tagy buněk nebo řádků v HTML.
Celkově se ke knížce nevyjídřím, protože jsem ji nečetl, ale tvé výtky mě o vyložené nekvalitě nepřesvědčily.
Výhoda vynechání ?> na konci souboru se projeví v momentě, kdy vložím soubor výhradně s PHP kódem, který končí bílými znaky a pak se po vložení tohoto souboru pokusím poslat hlavičky.
Tohle je pro začátečníka možná opravdu informace navíc, i tak by ale o této možnosti měl vědět. Protože pak uvidí skript, kde bude ?> chybět a on si bude myslet, že tam je chyba.
Oba tyto koncepty (vložení souboru s PHP kódem a následné poslání hlavičky) měly být v knize použity (u webových aplikací jde o zcela základní obrat), pak by se výhoda neuzavření projevila i přímo v knize.
Navíc tento bod není označen jako chyba, ale jako námět na rozšíření.
bukaJ:
Souhlasím, je to drobnost, se kterou jsem ale na samém začátku perně bojoval. Kdybych se tuto drobnost dozvěděl (byť třeba jako perličku v nějakém TIP boxu), ušetřil bych si desítky hodin.
Jaku začátečníka mě opravdu nenapadlo, že ?> není povinné. Vynechání jsem považoval za neplatnou konstrukci.
Ne, zde opravdu musím s Jakubem souhlasit, protože myslím, že toto je důležitá informace, kterou sice začátečník nevstřebá správně při "prvním čtení na jeden dech", ale někde v mysli se mu tiše zachytí a teprve v okamžiku, kdy bude hledat řešení na neustále přebývající koncové entery, má větší šanci, že vykročí správným směrem na první pokus.
Já myslím, že pro úplného laika je velmi dobrá kniha PHP pro úplné začátečníky, kde se seznámí opravdu jen s naprostými základy práce a v návaznosti na ní pak kniha PHP a MySQL - rozvoj webových aplikací, kde se přikračuje k trochu pokročilejším technikám jako OOP apod. a naopak se tam vynechává ten začátečnický balast.
Nicméně když si vzpomenu na svoje začátky - měl jsem asi největší problém vůbec sestavit na svém PC prostředí (Apache, PHP, MySQL), kde bych mohl experimentovat. To není kvalitně popsáno asi nikde... Chápu že to přímo nepatří k problematice, ale je třeba si uvědomit, že když je někdo úplný zelenáč, tak mu nejsou jasné ani základní pojmy.
Ideální jsou v tomto případě návody krok za krokem, bez zbytečných nadinformací, protože ty v tuhle chvíli stejně nepadnou na úrodnou půdu.
Visitor:
Návod jak nainstalovat APACHE+PHP+MYSQL je u Radka Hulána na webu (jinde jsem bohužel kvalitnější a přímočařejší nenašel). Dneska už nejsem takový "hárdkorář", takže buď to jednoduše rozchodím na virtuálním linuxu (občas se hodí rozšířit rozhled mimo windows) a nebo sáhnu po WampServeru, kde nemusím toho mnoho řešit a je to velice přívětivé.
Jsem netušil že pro instalaci LAMP napsat:
"urpmi apache-mod_php mysql"
v příkazové řádce je složité ;)
Ve Windows je to snadnější?
Bonzakcek:
Pro windows existují přímo balíčky které jdou už sestavené a kde nejsou staré verze php jako v případě phpTriad, ale třeba XAMPP -
http://www.apachefriends.org/en/xampp.html Taže pro takzvaného zelenáče jsou tato řešení docela dobrá.
Luboš:
Vertrigo mám nainstalované a jsem s nim velice spokojen. Nato, že jsem vyskoušel ledacos.
Jan "Panda" Smitka:
Doma mám "Velká kniha PHP a MySQL 5", kterou napsal W. Jason Gilmore, a nemohu si stěžovat. U nás jí vydal Zoner Press:
http://www.zonerpress.cz/kniha/pro-programatory/…-profesionalySice jsem v době, kdy se mi dostala do rukou, v PHP již nějaký ten pátek tvořil, ale i tak jsem se tam dozvěděl některé zajímavé věci a myslím, že by mohla být vhodná i pro začátečníky.
Petrr:
jo tak tu taky mohu doporucit ;)
Srigi:
Tiez doporucujem. OOP aj mysql popisane podrobne.
bahara:
taky ji považuji za asi nejlepší, co jsem do teď o php5 našel
Daniel:
Myslím že nebudem hovoriť len za seba ak napíšem že by som si veľmi rád kúpil knihu od Jakuba Vrány. Je veľká škoda že doteraz Jakub žiadnu knihu o php nevydal. Určite by išla ako sa hovorí "na dračku".
Pajin:
Naprostý souhlas. Pokud chci jít na nějaký kurz, za který zaplatím v současnosti významnou částku, chci samozřejmě, abych získané informace mohl rychle vstřebat.
K tomu je celkem užitečné mít už nějaké základy zažité. Ale jak si mám zažít správné základy, když vlastně nevím, jakou knihou je nejlepší začít? Lákala mne celkem "Mistrovství v PHP", ale teď si nejsem jistej, jestli to pro mne, jako začátečníka ve webovém programování má smysl.
Celkem mne opravdu láká výše zmíněná kniha zvaná "Velká kniha PHP a MySQL 5 - kompendium znalostí pro začátečníky i profesionály". Nemohli byste to tu někdo z vás, s PHP již dobře obeznámených, alespoň ve zkratce srovnat?
Díky!
Tuhle knihu mám a rozhodně mě nezklamala - jako úplného začátečníka mě naučila základy PHP a také MySQL, což jsou dva nástroje pomocí nichž jde poměrně jednoduše udělat dynamický web. Text knihy je přehledný, teorie je hojně doplněna skripty a navíc je na konci kapitoly test, který ověří vaše znalosti.
Pro někoho, kdo se chce dozvědět to nejdůležitější o těchto dvou technologiích a potom se jimi třeba zabývat hlouběji se jedná o výbornou knihu. Uplatní se podle mě i jako knížka pro toho, kdo se chce naučit základy programování.
Dan:
Ahoj,
(tykání přijímám - jsme zhruba stejne mladi :-) doporučil by jsi mi knihu od Luboslava Lacka PHP 5 a MySQL 5 Hotová řešení? V PHP sice začínám, ale mám nějaké základy algoritmizace v Jave. Předem dík.
Likvi:
Ahoj,
ja tu knihu znam a zacinal jsem podle ni. Je pravda, ze diky teto knize dokaze clovek neco pomerne rychle nabouchat, ale myslim si ze neni uplne vhodna. Kamarad mi dal hned do ruky knihu PHP3 od Jiřího Koska a bylo to nebe a dudy. Je pravda, ze v knize se toho o PHP5 moc nedozvis :), ale na druhou stranu my prisla lepsi pro pochopeni.
MARK:
"Naopak chybí informace, že ukončovacímu identifikátoru už na řádku nic kromě středníku nesmí následovat."
To je docela pikantni, s ohledem na to, ze ve vasi knize 1001 tipu to take NENI :D
Jakub Vrána :
A v tom je právě rozdíl mezi Průvodcem pro samouky a Tipy a triky – v tom prvním by to být podle mě mělo, v tom druhém může být co chce a co chce může chybět :-).
Diskuse je zrušena z důvodu spamu.